资讯动态

Linux网络(二十七):从网络层交棒到数据链路层:以太网帧结构、MTU/MSS协商、共享碰撞域与ARP全流程解析

发布时间:2026/10/20 2:17:42 来源:尧图企业网站定制
◆ 博主名称 小此方-CSDN博客大家好欢迎来到小此方的博客。⭐️网络系列个人专栏 【主题曲】计算机网络⭐️此方的GitHub github_此方⭐️我们思考 (Rethink) · 我们重建 (Rebuild) · 我们记录 (Record)文章目录概要序論一、通信的终极目的与各层职责共识1.1 传递数据不是目的完成应用才是目的1.2 各层协议如何合力解决通信细节二、从网络层到数据链路层子网通信的底层逻辑2.1 跨越子网的本质2.2 局域网通信问题与数据链路层的登场三、以太网帧格式与协议的分用机制3.1 以太网帧的基本结构3.2 数据链路层要解决的两个普遍问题3.3 类型字段与协议分用3.4 中间链路分片与MSS协商机制四、以太网通信本质共享碰撞域与数据帧长度限制4.1 问题1为什么主机A要把数据交给主机E4.2 问题2共享资源的碰撞与数据帧长度限制4.3 问题3MAC地址解析与ARP协议4.4 逻辑自洽的最终结论五、ARP协议深度解析局域网通信的地址翻译官5.1 ARP协议的层级定位5.2 ARP的请求与应答机制5.3 ARP报文的内部结构5.4 以太网最短帧长与PAD填充5.5 ARP请求与应答的完整链路六、模拟ARP协议运行全流程概要序論Hello大家好我是此方。网络层完结也到了我们的计算机网络理论讲解的最后一层——数据链路层。数据链路层真的是非常简单并且量也不是很大。但是值得我们详细的讲解一下。一、通信的终极目的与各层职责共识在正式讲解数据链路层之前我们先谋求一个共识。1.1 传递数据不是目的完成应用才是目的传递数据是目的吗不是目的是手段交换应用层报文完成应用才是真正的目的当我们说“两台主机在通信”我们往往想到的是数据在网线里跑。但站在网络分层模型的角度看所有的传递动作最终都是为了把数据交给两端的应用层。1.2 各层协议如何合力解决通信细节为了完成这个终极目的TCP/IP协议栈的各层分工明确三者合力解决通信细节一个解决为什么一个解决怎么办。传输层解决传输相关的问题核心是可靠性。网络层解决长距离传输、路径选择的问题也就是为什么数据要从节点B发往节点F核心在于路由寻址。数据链路层解决子网通信的问题也就是节点B到节点F具体怎么办核心在于局域网内的可靠传输。这三者层层配合才最终支撑起应用层可靠的通信。二、从网络层到数据链路层子网通信的底层逻辑网络的转发本质是在子网和子网之间进行转发。2.1 跨越子网的本质我们在学习IP网络层时本质上已经回答了主机B到主机C为什么要先到路由器F的问题。因为在复杂的网络拓扑中跨越不同的子网必须借助路由器的路径选择能力。要实现从主机B到主机C的通信网络层告诉我们必须先把数据从主机B交给路由器F。但是网络层的任务到这里就结束了它只负责指明方向下一跳并不负责把数据真正送到。2.2 局域网通信问题与数据链路层的登场于是一个新问题就诞生了在同一个子网中一个主机怎么把数据交给另一台主机或者交给路由器这个问题就变成了局域网通信的问题谁来负责解决数据链路层数据链路层就是用来处理这“最后一公里”的它负责将网络层交下来的IP数据报组装成帧在相邻节点同一个局域网内之间进行点对点的可靠传输。没有它网络层的报文就只能在起点徘徊无法真正踏上跨越子网的物理链路。三、以太网帧格式与协议的分用机制数据链路层是如何把网络层交下来的数据封装成能在物理链路上传输的“帧”的呢我们以最常见的以太网为例来看看以太网的帧格式。3.1 以太网帧的基本结构以太网的帧格式RFC 894主要由以下几个部分依次组成目的地址占6个字节。源地址占6个字节。类型占2个字节。数据占46~1500字节。CRC校验码占4个字节。位于中间的数据部分就是有效载荷。有效载荷一般是绝大部分的IP报文除此之外也可能是ARP或RARP报文。这段数据之所以规定最短46字节、最长1500字节正是为了配合底层的物理特性和上一层的MTU限制。3.2 数据链路层要解决的两个普遍问题无论是哪种数据链路层协议都必须解决任何协议的普遍问题如何分离(封装)如何分用对于“如何分离”这个问题以太网采用的是固定长度的协议因为目的地址、源地址、类型和CRC都是固定长度的接收端很容易就能按固定的偏移量把各个字段剥离出来。3.3 类型字段与协议分用对于“如何分用”的问题答案就藏在帧头那2个字节的“类型”字段里。类型字段表示你要传递给哪一个协议向上传递的时候。以太网利用类型字段来区分有效载荷到底是什么。如图所示当类型字段值为0800时表示后面的数据是IP数据报。当类型字段值为0806时表示后面的数据是ARP请求/应答由于ARP数据不够46字节后面会加上18字节的PAD填充。当类型字段值为8035时表示后面的数据是RARP请求/应答同样带有18字节的PAD填充。数据链路层在接收数据后只要读取到对应的类型字段就能知道该把剥离掉帧头帧尾后的有效载荷向上交给网络层的哪一个具体协议去处理了。3.4 中间链路分片与MSS协商机制分片这件事情不是一定在两端主机之间进行如果我们中间经过的链路MTU比较小数据包会在半路上被分片。不过没关系我们有IP层兜底我们不怕。看图体会一下这个场景发送主机所在的网络是FDDIMTU4352但中间经过的以太网MTU只有1500。发送主机把一个4324字节的UDP数据包发出去到了路由器这里因为超载了路由器被迫负责分片。你可以看到切出来的三个分片它们IP首部里的标识码ID都是一样的接收主机就靠这个ID把它们重新拼起来。但是这种情况的可能性其实不大为什么因为TCP在建立连接的时候双方早就通过MSS协商把这个问题规避掉了。为什么要协商因为底层数据链路层的MTU最大就是1500这意味着物理链路上一次最多只能吞吐1500字节。这个限制是双向的为了确保我发过去的报文你能处理你发过来的报文我也能处理双方就必须在通信前对好口径。什么时候协商就在三次握手的时候双方各自报出自己的MSS然后取得两者中的最小数值。所以我们就彻底明白了为什么数据包分片不是主流因为分片在我们的三次握手阶段就已经被提前规避掉了最后补充一点不同厂商设计的网卡MTU可能不同但主流的MTU默认都是1500。如果你特立独行非要设置一个2000那实际传输时一样只能用1500多出来的还是会分片。四、以太网通信本质共享碰撞域与数据帧长度限制理解了帧格式我们来看在真实的以太网局域网中主机究竟是如何把数据交到另一台主机手上的。真正在网络物理层上流动的数据其实是数据帧真正在网上跑的不是IP报文如图中所示主机A想发数据给主机E。当这个数据帧被发送到以太网总线上时局域网内所有的主机都能收到。但是主机B和主机C看了报文发现目标MAC不是自己的直接丢弃只有主机E一看地址是自己才接收处理并以同样的方式返回。4.1 问题1为什么主机A要把数据交给主机E这是由路由决定的主机A查询路由表发现下一跳要去主机E网关于是就把数据交了出去。4.2 问题2共享资源的碰撞与数据帧长度限制局域网就是一个碰撞域一个时刻只能发送一个数据帧。以太网就是一个共享资源临界资源我们在网络基础的时候讲过为了解决碰撞需要碰撞避免算法。既然以太网是共享的那我们使用以太网的时候使用时间越长越好还是越短越好当然是越短越好这意味着主机A发送数据帧越长越好还是越短越好发送数据帧越短占用的以太网时间比重越小。数据帧越多越好还是越少越好越少越好。单个数据帧既不能太长也不能太短所以数据帧要有上限和下限这就是为什么我们规定MAC帧必须在这个范围限制46-1500字节。为什么是这个数字因为这是我们经过了大量的实验得出的结论。4.3 问题3MAC地址解析与ARP协议如果只知道目标主机的IP地址不知道对方的MAC地址就无法给对方发送数据帧怎么办所以需要一种局域网协议把IP转换成对应的MAC地址 — ARP协议地址解析协议我们知道C主机的IP地址但是不知道C主机的MAC地址我们的内网IP在这个局域网中是唯一的于是我们可以用一种算法把IP转化成MAC地址。4.4 逻辑自洽的最终结论我们来梳理一下这个逻辑主机A给主机E发送报文主机A怎么知道主机E的IP地址是用户告诉客户端主机A的。主机A查询路由表找到主机E要发送报文走路由获取发现两者在同一个局域网的时候直接内网转发。那么怎么知道主机E的MAC地址以便我们内网转发呢使用ARP协议通过ARP广播请求拿到对方的MAC地址后数据帧才能真正封装并发送出去。五、ARP协议深度解析局域网通信的地址翻译官5.1 ARP协议的层级定位在 TCP/IP 的分层模型中ARP协议处于一个特殊的跨界位置它属于数据链路层部分的位置。在封装上ARP直接封装在mac帧中。它作为网络层和mac帧之间的桥梁专门负责局域网通信的地址解析。5.2 ARP的请求与应答机制ARAddress Resolution Protocol协议就是一个先广播然后一对一的过程。当路由器R要发送数据给主机E时如果只知道目标主机的IP地址比如IP_E不知道它的MAC地址就没法发送mac帧。此时具体的ARP过程如下发送ARP请求主机A拿着目标主机的IP地址在群里广播。局域网中任何主机都可能收到ARP请求也可能是收到ARP应答。广播帧中的目的MAC地址在不知道的情况下填全F即FFFF…。接收与比对局域网内所有主机都会收到这个请求但只有IP地址匹配的主机E会接收。ARP应答目标主机E收到后进行应答将自身的MAC地址以单播的形式回复给主机A。这时候原本在ARP缓存表中记录的都是对方的IP但不知道对应的MAC地址通过这个一问一答ARP就帮我们通过IP得到了它对应的MAC地址。5.3 ARP报文的内部结构我们来看看ARP报文到底长什么样。ARP是定长报文在ARP上面没有别的协议所以只有报头没有报文。ARP报文主要包含以下核心字段硬件类型表示你将来要在何种网络中何种协议通信。一般是1以太网。协议类型指要转换的地址类型一般是0x0800IP地址。硬件地址长度对于以太网地址为6字节。协议地址长度对于IP地址为4字节。op字段op为1表示ARP请求op为2表示ARP应答。5.4 以太网最短帧长与PAD填充这里有一个必须注意的细节我们的数据链路层报文的有效载荷除了IP报文还可以是ARP报文那么ARP报文只有28字节怎么办以太网规定最小帧数据长度为46字节。为了保证报文长度我们一般会在这个报文后面填充一些垃圾数据比如全0让他凑到46字节的阈值发送。这就是之前我们看到的PAD填充字段的由来。5.5 ARP请求与应答的完整链路我们完整走一遍流程主机A需要发送数据给主机E但是只通过路由得知下一跳是IP_E不知道对方的MAC地址。于是主机A在局域网内发送ARP请求此时目的MAC全F表示广播。主机E收到了这个请求发现目标IP是自己于是单独返回了一个ARP应答给主机A告诉A自己的MAC地址。主机A拿到MAC地址后成功封装mac帧并发送。而在局域网中任何主机可能收到ARP请求也可能收到ARP应答所以防范ARP欺骗也是网络安全中重要的一环。六、模拟ARP协议运行全流程为了彻底吃透ARP协议我们通过一张详细的流程图模拟一次ARP协议运行的完整生命周期。至此所有网络通信原理完我们终于明白了网络通信的基本流程。好的本期内容就到这里如果对你有帮助还不要忘记点赞三联支持。我是此方我们下期再见。bye!

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑