Linux之数据链路层

news2025/4/1 1:44:41

Linux之数据链路层

  • 一.以太网
    • 1.1以太网帧格式
    • 1.2MAC地址
    • 1.3MTU
  • 二.ARP协议
    • 2.1ARP协议工作流程
    • 2.2ARP协议格式
  • 三.NAT技术
  • 四.代理服务
    • 4.1正向代理
    • 4.2反向代理
  • 五.四大层的学习总结

一.以太网

在我们学习完了网络层后我们接下来就要进入数据链路层的学习了,在学习完网络层后我们知道网络层的作用是进行路径选择以及完成路由,但是无论是应用层,传输层还是网络层都没有完成我们数据传输中最重要的一环那就是传输数据,上三层分别提供了数据处理,可靠性保证,路径选择和完成路由而真正的数据传输环节就需要我们现在学的数据链路层来完成了。数据链路层不同于上三层可以由具体的某项协议完成而是由一系列的协议标准来实现的。例如我们今天会仔细说的以太网。我们要了解以太网不是一种具体的网络而是一种技术标准,以太网的内容结合了数据链路层和物理层。以太网是如今应用最广泛的互联网技术与其并列的有令牌环和无线LAN等。

1.1以太网帧格式

首先我们先来了解什么叫做以太网帧:把在数据报首部添加报头尾部添加检验和的新的报文整体叫做以太网帧。所以以太网帧中分为三部分:报头,正文和校验和。
在这里插入图片描述

  • 目的地址和源地址
    其中的地址代表的是网卡的硬件地址也就是MAC地址,占据了六个字节也就是48位。
  • 类型
    这里的类型指的是应用于帧数据字段的协议。类型占据了两个字节即8位
  • 校验和
    这里的校验和就和TCP协议IP协议中的校验和相同即利用CRC算法来检查数据报是否损坏。

对于数据链路层来说传输靠的就不是IP地址了而是MAC地址因为数据报是通过一个一个的子网传输到目的主机的而在一个子网中传输靠的就是MAC地址。

1.2MAC地址

对于MAC地址我们应该不陌生了在讲述协议的时候我们就提到过MAC地址的概念以及它和IP地址的区别,这里我们就来再次认识一下MAC地址。
MAC地址是来识别数据链路层中相连的节点也就是不同的主机或者路由器,MAC地址的长度是48位即6个字节,一般是用16进制以及符号:来进行分割例如:08:00:27:03:fb:19。对于MAC地址来说这是在我们电脑出厂之后就存储在网卡中的并且是唯一的。
对于MAC地址和IP地址的区别我们能理解,我们可以将IP地址当作出去旅游时的起始处和目的地例如我们要从北京到上海去,那么源IP地址就是北京目的IP地址就是上海。而MAC地址则是我们在路上具体是从哪个地方到哪个地方例如从北京到上海,最开始源MAC地址就是北京目的MAC地址是河北,到了河北后源MAC地址就是河北目的MAC地址是河南以此类推直到目的MAC地址是上海。所以IP地址是不变的,MAC地址是一直在发生变化的。
在这里插入图片描述
那么在了解了MAC地址后我们要知道MAC的作用就是完成局域网中的通信也就是完成一个子网中的通信,在局域网中一个主机想要发送数据给另外一个主机就必须通过MAC地址而不是IP地址。那么在这个通信的过程也会产生一些问题,我用图来给大家解释。
在这里插入图片描述
所以在进行局域网通信的时候局域网就相当于是一个"临界资源"因为局域网会被很多的主机来访问,那么我们就需要对这个临界资源进行保护也就是对局域网进行保护以免出现错误,例如如果局域网中同时有两台及以上的主机同时发送数据报那么这些数据报可能就会在碰撞域中发生碰撞从而造成数据报的损坏。
所以对于碰撞域也就是局域网来说任何时刻只允许一台主机向局域网中发送数据报否则就有可能产生碰撞问题。想要解决碰撞问题我们可以采用碰撞检测和碰撞避免以及划分碰撞域的方法。

1.3MTU

在讲述IP协议的分包时我们就提到过MTU即网络的最大传输单元也就相当于我们发快递时的包裹大小限制,MTU的数值是不同的数据链路层对应的物理层产生的。所以这个值是不固定的对于以太网帧来说它规定数据长度的最小值是47个字节最大值是1500个字节如果数据报的长度不够就需要往后面补充字节。MTU不仅会对IP协议产生影响也会对UDP,TCP协议产生影响。

对于UDP协议,我们需要让传输层的数据报的有效载荷不能超过1472因为UDP协议报头是8个字节,IP协议报头是20个字节这样最后刚好达到MTU。如果超过了有效载荷超过了1472那么这个数据报就会在网络层被分片。

对于TCP协议也是相同的,只是我们在讲述TCP协议时提到过TCP的数据报大小不能超过MSS也就是Max((Max Segment Size)所以这个MSS也受制于MTU的大小最好的情况就是MSS刚好是在网络层不会被分片的大小。同时我们知道TCP是有三次握手这个行为的在三次握手中双方会把自己的MSS大小写入到TCP协议的头部中从而进行协商MSS大小,在双方得到两方的MSS大小后会将较小的MSS值当作最终的MSS值。而这个协商的过程MSS大小就是存储在TCP协议那40个字节的选项中的。
如果我们想要查看自己机器的MTU大小我们可以使用ifconfig这个命令。
在这里插入图片描述

二.ARP协议

在知道了MAC地址是用于局域网之间通信的之后我们要思考一个问题了,在我们发送数据报时我们是用IP地址来定位目的主机的也就是说我们并不知道目的主机的MAC地址以至于我们无法完成局域网之间的通信,所以为了解决这个问题我们就要利用ARP协议。
ARP协议是一个存在于网络层和数据链路层之间的一个协议它的作用就是完成IP地址和MAC地址的映射关系从而可以让我们根据目的IP地址转换为目的MAC地址来实现局域网之间的通信。

2.1ARP协议工作流程

对于ARP协议是如何完成IP地址和MAC地址的映射的我们也需要来说道说道我们一样用图来解释
在这里插入图片描述
图中的这些询问以及回答MAC地址的数据报就是ARP请求和ARP响应,所以在进行局域网之间的通信时通信两方会利用ARP请求以及响应来得到双方的MAC地址从而构建出IP地址和MAC地址的映射关系。同时我们也可以从图出看出来一些细节:对于一个局域网中的主机来说它既可以接收ARP请求也可以接收ARP响应并且主机在接收到ARP结果后会将其暂时缓存起来直到超过规定的时间,在超过规定的时间后还想和ARP结果内存储的目的主机进行通信的话就需要再次发送ARP请求。

2.2ARP协议格式

ARP协议和其他协议一样也具有自己的格式,我们现在就来看看它的格式是什么样的。
在这里插入图片描述
对于这个数据报的格式其中很多的字段我们都是见过或者很容易就能理解的,所以我们就大致介绍并且解析其中的一些问题。

  1. 我们发现在以太网的头部以及ARP协议中都存在目的MAC地址和源MAC地址,这是因为以太网不是数据链路层唯一的一种方法,如果数据链路层是以太网的那么这样就是多余的但是如果数据链路层不是以太网的那么这种方法就是必须的了。
  2. 硬件类型是指数据链路层的网络类型,1为以太网
  3. 协议类型是指要转换的地址类型,0x0800为IP地址
  4. 硬件地址长度是数据链路层网络类型的地址长度,对于以太网来说是6字节
  5. 协议地址长度是转换的地址类型的地址长度,对于IP地址来说是4字节
  6. op字段则是标明是ARP请求还是响应,1是请求,2为响应。

三.NAT技术

在之前我们学习网络层的时候我们就提到过NAT技术,NAT技术产生的缘由就是为了解决IPv4数量不足的而NAT技术本身我们可以将其理解成一种互相转换私有IP和公有IP的方法。实现方法简单来说就是在NAT路由器有两个地址一个是私有地址也就是局域网内的IP地址一个是公有地址也就是公网内的IP地址,当局域网里有主机想要访问外网时路由器就会将其数据报中的源IP地址转换为公有IP地址,当外网服务器想要传输数据报到局域网内的主机时就会将数据报里的目的IP地址转换为对应的主机的私有地址。所有在NAT路由器中有着一张表其中存储着局域网内主机的私有IP地址和公有IP地址的映射关系来方便转换,并且这个表也是又路由器自己维护的。
在这里插入图片描述

这个处理逻辑只是最基础的NAT技术我们可以思考一个问题局域网内有多个主机它们的私有IP地址都不同但是路由器只有一个公有IP地址那么在外网的服务器传输数据报回来时路由器怎么知道是传输给哪个主机呢?这就要用到NAPT了也就是使用IP地址+端口号的方式,具体一点就是在路由器的地址转换表中不仅存储了局域网主机的IP地址也存储了对应的端口号。
在这里插入图片描述
NAT技术实实在在的缓解了IPv4地址数量不足的问题但是它也有其限制和弊端:

  1. 无法从NAT外部向内部服务器建立连接
  2. 地址转换表的创建和销毁都需要额外资源
  3. 通信过程中一旦NAT路由器设备出现问题那么所有的TCP连接都会出错

四.代理服务

在国内如果想要访问外网的资源我们需要进行翻墙也就是通过代理来访问外网资源。那么代理服务到底是如何实现的呢?
对于代理服务我们分为正向代理和反向代理,这两种代理方式运用场景以及原理都不同我们需要来一个一个说。

4.1正向代理

正向代理(Forward Proxy)是一种常见的网络代理方式,它位于客户端和目标
服务器之间,代表客户端向目标服务器发送请求。正向代理服务器接收客户端的请
求,然后将请求转发给目标服务器,最后将目标服务器的响应返回给客户端。通过这
种方式,正向代理可以实现多种功能,如提高访问速度、隐藏客户端身份、实施访问
控制等。
简单来说正向代理就是在客户端和网络之间插入了一个新的代理服务器,客户端会先把请求发送到代理服务器上再由代理服务器将其转发给目的服务器,响应也是先发送到代理服务器上再转发到客户端上。
在这里插入图片描述
正向代理的功能特点:

  • 缓存功能:正向代理服务器可以缓存经常访问的资源,当客户端再次请求这些资
    源时,可以直接从缓存中获取,提高访问速度。
  • 内容过滤:正向代理可以根据预设的规则对请求或响应进行过滤,如屏蔽广告、
    阻止恶意网站等。
  • 访问控制:通过正向代理,可以实现对特定网站的访问控制,如限制员工在工作
    时间访问娱乐网站。
  • 隐藏客户端身份:正向代理可以隐藏客户端的真实 IP 地址,保护客户端的隐私。
  • 负载均衡:在多个目标服务器之间分配客户端请求,提高系统的可扩展性和可靠
    性。

应用场景:

  • 企业网络管理:企业可以通过正向代理实现对员工网络访问的管理和控制,确保员工
    在工作时间内专注于工作,避免访问不良网站或泄露公司机密。
  • 公共网络环境:在公共场所如图书馆、学校等提供的网络环境中,通过正向代理可以
    实现对网络资源的合理分配和管理,确保网络使用的公平性和安全性。
  • 内容过滤与保护:家长可以通过设置正向代理来过滤不良内容,保护孩子免受网络上
    的不良信息影响。
  • 提高访问速度:对于经常访问的网站或资源,正向代理可以通过缓存机制提高访问速
    度,减少网络延迟。
  • 跨境电商与海外访问:对于跨境电商或需要访问海外资源的企业和个人,正向代理可
    以帮助他们突破网络限制,顺畅地访问海外网站和资源。

4.2反向代理

反向代理服务器是一种网络架构模式,其作为 Web 服务器的前置服务器,接收
来自客户端的请求,并将这些请求转发给后端服务器,然后将后端服务器的响应返回
给客户端。这种架构模式可以提升网站性能、安全性和可维护性等。
同样简单来说反向代理是在目的服务器和网络之间插入了一个新的服务器,当我们使用客户端向目的服务器传输数据时我们无法直接访问目的服务器而是要将数据先发送到反向代理服务器中再由它将数据转发到目的服务器中,响应也是先由目的服务器传输到反向代理服务器上再传输给客户端。听着好像和正向代理服务相似都是插入一个中间服务器但是其中的功效则完全不同,正向服务是为了保护客户端而反向服务则是为了保护服务器。
在这里插入图片描述
功能特点:

  • 负载均衡:反向代理服务器可以根据配置的负载均衡策略,将客户端的请求分发
    到多个后端服务器上,以实现负载均衡。这有助于提升网站的整体性能和响应速度,
    特别是在高并发场景下。
  • 安全保护:反向代理服务器可以隐藏后端 Web 服务器的真实 IP 地址,降低其被
    直接攻击的风险。同时,它还可以配置防火墙、访问控制列表(ACL)等安全策略,
    对客户端的请求进行过滤和限制,以保护后端服务器的安全。
    -缓存加速:反向代理服务器可以缓存后端 Web 服务器的响应内容,对于重复的
    请求,它可以直接从缓存中返回响应,而无需再次向后端服务器发起请求。这可以大
    大减少后端服务器的负载,提升网站的响应速度。
  • 内容过滤和重写:反向代理服务器可以根据配置的规则对客户端的请求进行过滤
    和重写,例如添加或删除请求头、修改请求路径等。这有助于实现一些特定的业务需
    求,如 URL 重写、用户认证等。
  • 动静分离:在大型网站中,通常需要将静态资源和动态资源分开处理。通过将静
    态资源部署在反向代理服务器上,可以直接从反向代理服务器返回静态资源的响应,
    而无需再次向后端服务器发起请求。这可以大大提升静态资源的访问速度。
    应用场景:
  • CDN(Content Delivery Network,内容分发网络)就是采用了反向代理的原理

五.四大层的学习总结

  1. 应用层
  • 应用层的作用: 满足我们日常需求的网络程序, 都是在应用层
  • 能够根据自己的需求, 设计应用层协议
  • 了解 HTTP 协议
  • 理解 DNS 的原理和工作流程
  1. 传输层
  • 传输层的作用: 负责数据能够从发送端传输接收端.
  • 理解端口号的概念.
  • 认识 UDP 协议, 了解 UDP 协议的特点.
  • 认识 TCP 协议, 理解 TCP 协议的可靠性. 理解 TCP 协议的状态转化.
  • 掌握 TCP 的连接管理, 确认应答, 超时重传, 滑动窗口, 流量控制, 拥塞控制, 延
    迟应答, 捎带应答特性.
  • 理解 TCP 面向字节流, 理解粘包问题和解决方案.
  • 能够基于 UDP 实现可靠传输.
  • 理解 MTU 对 UDP/TCP 的影响
  1. 网络层
  • 网络层的作用: 在复杂的网络环境中确定一个合适的路径.
  • 理解 IP 地址, 理解 IP 地址和 MAC 地址的区别.
  • 理解 IP 协议格式.
  • 了解网段划分方法
  • 理解如何解决 IP 数目不足的问题, 掌握网段划分的两种方案. 理解私有 IP 和公
    网 IP
  • 理解网络层的 IP 地址路由过程. 理解一个数据包如何跨越网段到达最终目的地.
  • 理解 IP 数据包分包的原因. • 了解 ICMP 协议. • 了解 NAT 设备的工作原理.
  1. 数据链路层
  • 数据链路层的作用: 两个设备(同一种数据链路节点)之间进行传递数据
  • 以太网是一种技术标准; 既包含了数据链路层的内容, 也包含了一些物理层的内
    容. 例如: 规定了网络拓扑结构, 访问控制方式, 传输速率等;
  • 以太网帧格式
  • 理解 mac 地址
  • 理解 arp 协议
  • 理解 MTU

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2324810.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何在 vue 渲染百万行数据,vxe-table 渲染百万行数据性能对比,超大量百万级表格渲染

vxe-table 渲染百万行数据性能对比,超大量百万级表格渲染;如何在 vue 渲染百万行数据;当在开发项目时,遇到需要流畅支持百万级数据的表格时, vxe-table 就可以非常合适了,不仅支持强大的功能,虚…

MySQL-5.7.37安装配置(Windows)

1.下载MySQL-5.7.37软件包并解压 2.配置本地环境变量 打开任务栏 搜索高级系统设置 新建MySQL的环境变量 然后在path中添加%MYSQL_HOME%\bin 3.在MySQL-5.7.37解压的文件夹下新建my.ini文件并输入以下内容 [mysqld]#端口号port 3306#mysql-5.7.27-winx64的路径basedirC:\mysq…

鸿蒙北向应用开发:deveco 5.0 kit化文件相关2

鸿蒙北向应用开发:deveco 5.0 kit化文件相关 在kit化时,有时候会出现这样一种场景即你想把已有的d.ts导出换个名字,这样从名字上更贴合你的kit聚合 什么意思呢?比如现在有 ohos.hilog.d.ts 导出了hilog,现在你想kit化hilog,使得hilog导出名字为usrhilog,这样用户在使用你的k…

《HelloGitHub》第 108 期

兴趣是最好的老师,HelloGitHub 让你对开源感兴趣! 简介 HelloGitHub 分享 GitHub 上有趣、入门级的开源项目。 github.com/521xueweihan/HelloGitHub 这里有实战项目、入门教程、黑科技、开源书籍、大厂开源项目等,涵盖多种编程语言 Python、…

C++可变参数

可变参数C风格的可变参数C风格可变参数的使用 C11可变参数模板递归展开参数包参数列表展开折叠表达式 STL中的emplace插入接口 可变参数 C风格的可变参数 可变参数是一种语言特性,可以在函数声明中使用省略号...来表示函数接受可变数量的参数。 例如典型的printf…

光传输设备现状

随着运营商准备好其基础设施以应对新一代高带宽应用程序和 AI 部署,光传输网络 (OTN) 市场再次有望实现稳健增长。 隧道的尽头有光亮,OTN 市场在 2024 年最后一个季度表现强劲,设备供过于求的时代已经结束。 供应商表示设备订单量有所增加&…

Python 笔记 (二)

Python Note 2 1. Python 慢的原因2. 三个元素3. 标准数据类型4. 字符串5. 比较大小: 富比较方法 rich comparison6. 数据容器 (支持*混装* )一、允许重复类 (list、tuple、str)二、不允许重复类 (set、dict)1、集合(set)2、字典(dict)3、特殊: 双端队列 deque 三、数据容器的共…

d2025329

目录 一、修复表中名字 二、患某种疾病的患者 三、最长连续子序列 四、二叉树的层序遍历 一、修复表中名字 1667. 修复表中的名字 - 力扣(LeetCode) concat(A,B),将字符串A和B拼接left(str,len),从字符串左边开始截取len个字…

cordova android12+升级一些配置注意事项

1.以android13为例 Cordova Android 13.0.0 cordova platform remove android cordova platform add android13.0.0Cordova Android 13.0.0 这里建议将android-studio升级到最新 build时若是需要到gradled安装失败 建议多试几次 或者直接用网页下载 找到 Android Studio 的 G…

批量处理word里面表格的空白行

1,随便打开一个word文档。 2,按下Alt F11 VBA编辑器,在左侧的「工程资源管理器」窗口中找到Normal 项目,右键选择插入->模块。 弹出一下弹窗 3,输入一下代码 代码: Sub RemoveEmptyTableRows()Dim tbl As TableDim row As R…

K8S学习之基础五十七:部署代码扫描工具sonarqube

部署代码扫描工具sonarqube 拉取postgres、sonarqube镜像,在harbor上创建postgres、sonarqube项目,将镜像上传至harbordocker pull postgres docker pull sonarqube docker tat postgres:latest 172.16.80.140/postgres/postgres:latest docker tat sona…

音频知识 参数分析

通道布局 参考 通过pcm音频数据计算分贝 理解FFT和信号加窗原理及意义 dts音效大师教程

小型水库大坝安全及水雨情监测技术方案

一、小型水库监测系统构成 小型水库雨水情测报和大坝安全监测系统由水库监测站点、通信网络和监测平台等组成,系统总体架构如图所示。 水库监测站点设施包括:雨量计、水位计、视频监视设备、渗压计、量水堰计、变形监测仪器、数据采集仪、遥测终端、水准…

scala简介和基础语法

Scala简介 Scala 是一门多范式(multi-paradigm)的编程语言,设计初衷是要集成面向对象编程和函数式编程的各种特性。 Scala 运行在 Java 虚拟机上,并兼容现有的 Java 程序。Scala 源代码被编译成 Java 字节码,所以它可…

‘无法定位程序输入点kernel32.dll’详细的修复方法,一键快速修复kernel32.dll

在 Windows 系统运行过程中,若程序提示“无法定位程序输入点 kernel32.dll”,往往意味着程序调用了 kernel32.dll 中不存在或已变更的函数接口。作为系统的核心动态链接库,kernel32.dll 承担着内存管理、进程控制、文件操作等底层功能&#x…

电源系统的热设计与热管理--以反激式充电器为例

前言 反激电源常用于各种电子设备中,比如充电器、适配器等,它们通过变压器进行能量转换。高温环境可能对电子元件造成影响,特别是像MOSFET、二极管、变压器这样的关键部件,导致效率变低,甚至可能导致功能失效。还有安…

笔记本电脑更换主板后出现2203:System configuration is invalid,以及2201、2202系统错误的解决

笔记本电脑更换主板后启动出现2203:System configuration is invalid,以及2201、2202系统错误的解决 自用的一台ThinkpadT490笔记本电脑 ,由于主板故障,不得不更换主板,通过某宝购置主板后进行了更换。 具体拆卸笔记本可搜索网络视频教程。 注意: 在更换主板时,注意先拍…

项目-苍穹外卖(十七) Apache POI+导出数据

一、介绍 二、入门案例 package com.sky.test;import org.apache.poi.xssf.usermodel.XSSFRow; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook;import java.io.File; import java.io.FileNotFoundException; import jav…

蓝桥杯单片机刷题——E2PROM记录开机次数

设计要求 使用E2PROM完成数据记录功能,单片机复位次数记录到E2PROM的地址0中。每复位一次数值加1,按下按键S4,串口发送复位次数。串口发送格式如下: Number:1 备注: 单片机IRC振荡器频率设置为12MHz。 …

基于盛科CTC7132交换机核心模块

简介 基于盛科CTC7132 SOC方案构建,通过板对板高速连接器引出32路10G SerDes接口、1路PCIex1、2路管理SGMII接口、3路Uart接口(1路调试串口2路功能串口)、4路I2C接口(2路SOC部分2路PPU部分)、5路SMI接口(1路管理口4路业务口&…