数据链路层
应用层:面向用户,处理具体网络应用。
传输层:端到端通信,确保可靠或高效传输。
网络层:选择路径,实现主机间的逻辑寻址与路由。
数据链路层:同一个子网内,一个主机怎么把数据交给另一个主机。
网络层与数据链路层的关系:主机A为什么要把数据交给主机E,是因为网络层的路由决定。
1. 了解以太网
- 以太⽹不是⼀种具体的⽹络,⽽是⼀种技术标准。既包含了数据链路层的内容,也包含了⼀些物
理层的内容。例如: 规定了⽹络拓扑结构,访问控制⽅式,传输速率等。
-
例如以太⽹中的⽹线必须使⽤双绞线。传输速率有10M,100M,1000M等。
-
以太⽹是当前应⽤最⼴泛的局域⽹技术,和以太⽹并列的还有令牌环⽹,⽆线LAN等。
2. 以太网帧格式

-
源地址和⽬的地址是指⽹卡的硬件地址(也叫MAC地址)。
-
MAC地址⽤来识别数据链路层中相连的节点。
-
⻓度为48位,及6个字节。 ⼀般⽤16进制数字加上冒号的形式来表⽰(例如: 08:00:27:03:fb:19)。
-
在⽹卡出⼚时就确定了,不能修改。mac地址通常是唯⼀的(虚拟机中的mac地址不是真实的mac地
址,可能会冲突。也有些⽹卡⽀持⽤⼾配置mac地址)。
-
-
帧协议类型字段有三种值,分别对应IP、ARP、RARP。
-
帧末尾是CRC校验码。
两个问题:
-
如果分离:固定长度的协议,去掉首部14个字节,尾部4个字节。
-
如何分用:通过帧类型字段。
以太网数据帧会不会黏在一起,因为它没有在帧格式里明确写总长度。答案是不会,它依靠物理层的信号停止和数据链路层的校验和两者结合来判断帧结束。
IP地址是描述路程的原始起点和最终终点,MAC地址描述路程中每一个区间的起点和终点。
数据包在跨网络传输时,每经过一个路由器或主机,其数据链路层帧头(尤其是源MAC和目的MAC地址)都会被重新封装,以匹配当前物理链路的直接通信对象;而网络层的IP地址始终保持不变,用于标识通信的起点和终点。
3. 理解局域网通信和MTU
3.1 理解局域网通信
-
传统的以太网,是一个共享的广播信道,所有设备连在同一根总线上。
-
正因为共享,整个局域网就是一个碰撞域 。任何一台设备发送的电信号(数据帧),会传播给域内所有设备。如果两台设备同时发送,它们的信号就会相互叠加干扰,发生 碰撞。
-
如果发生碰撞,以太网会采用碰撞避免算法。即随机等待一定的时间后再重试。这有效地分散了重发时间,避免了再次碰撞。
在发送数据帧时,数据帧既不能太长(占用资源的时间长),也不能太短(频率高)。因此,数据帧要有上限和下限。
3.2 MUT
MTU(最大传输单元)是数据链路层能承载的上层数据包的最大字节数。
-
以太⽹帧中的数据⻓度规定最⼩46字节,最⼤1500字节,ARP数据包的⻓度不够46字节,要在后⾯补
填充位。
-
最⼤值1500称为以太⽹的最⼤传输单元(MTU),不同的数据链路层技术(以太网、PPPoE、令牌环)有不同的MTU。
-
如果当一个IP数据包从MTU较大的网络(如标准以太网的1500字节)路由到MTU较小的网络(如PPPoE拨号链路的1492字节)时,若其长度超过了出接口的MTU,且其IP头部中的不分片标志位未被置位,那么路由器将在转发前对该数据包执行IP分片。
- 假设如果分片了还超出还会继续分片,而且这正是IP分片机制的精妙之处,它是递归的、迭代的过程。
3.3 MTU对IP的影响
-
由于数据链路层MTU的限制,对于较⼤的IP数据包要进⾏分片。
-
每个分片的IP协议报头的 16位标识(id) 都是相同的。
-
每个分片的IP协议报头的3位标志字段中,第2位置为0,表⽰允许分⽚,第3位来表⽰结束标记(当前是否是最后⼀片,是的话置为1,否则置为0)。
-
到达对端时再将16位标识相同的分片按照顺序重组,拼装到⼀起返回给传输层。但是任意一片丢失,会导致组装失败,而IP不负责重新传输数据。
3.4 MTU对UDP的影响
-
⼀旦UDP携带的数据超过1472(1500 - 20(IP⾸部) - 8(UDP⾸部)),在⽹络层分成多个IP数据报。
-
如果UDP数据报在⽹络层被分⽚,整个数据被丢失的概率就⼤⼤增加了。
3.5 MTU对TCP的影响
-
TCP的⼀个数据报也不能⽆限⼤,同样受制于MTU。TCP的单个数据报的最⼤消息⻓度,称为MSS(Max Segment Size)。
-
最理想的情况下,MSS的值正好是在IP不会被分⽚处理的最⼤⻓度。
-
TCP在建⽴连接的过程中,通信双⽅会进⾏MSS协商。然后双⽅得知对⽅的MSS值之后,选择较⼩的作为最终MSS。
-
MSS的值体现在TCP报头中选项字段当中。
为什么要协调MSS?因为在网络通信的路径中,存在着多种数据链路层技术与标准,它们各有不同的MTU标注。而为了避免分片,因此引入更高层的MSS主动适配。
TCP在三次握手阶段通过SYN包交互MSS值,但此时并未传输实际数据。当真实数据传输时,若路径中存在比双方声明更小的MTU,则会触发路径MTU发现机制:发送方在第一个数据包中设置IP头部DF(禁止分片)标志,若该包被中间节点因MTU不足而丢弃,节点会向发送方返回ICMP错误报文。发送方据此动态下调其实际使用的MSS值,以适应路径最小MTU。
4. ARP协议
上层用IP地址规划全局路由,下层用MAC地址进行实际传输。但是在封装数据链路层报头时,我们只知道对方的IP地址,并不知道对方的MAC地址。因此在通讯前必须获得目的主机的MAC地址。
ARP(地址解析协议)是用于通过IP地址查询对应MAC地址的网络协议。ARP是数据链路层的协议,不会交付给上层。
4.1 ARP协议格式

-
硬件类型指的是链路层不同技术的类型。
- 1表示以太网
-
协议类型指要转换的地址类型。
- 0x0800为IP地址
-
硬件地址⻓度对于以太⽹地址为6字节。
-
协议地址⻓度对于和IP地址为4字节。
-
op字段为1表⽰ARP请求,op字段为2表⽰ARP应答。
注意到源MAC地址、⽬的MAC地址在以太⽹⾸部和ARP请求中各出现⼀次,对于链路层为以太⽹的
情况是多余的,但如果链路层是其它类型的协议则有可能是必要的。
4.2 ARP的流程
-
ARP请求:
-
以太网帧头部:
- 目的MAC地址 :
FF:FF:FF:FF:FF:FF广播地址(局域网内所有主机都会收到并处理) - 源MAC地址 :发送方的MAC地址(如
11:22:33:44:55:66) - 类型字段 :
0x0806(表示ARP协议)
- 目的MAC地址 :
-
ARP报文内部:
-
硬件类型 :
0x0001(以太网) -
协议类型 :
0x0800(IPv4) -
硬件地址长度 :
6 -
协议地址长度 :
4 -
操作码 :
1(ARP请求) -
发送方MAC地址
-
发送方IP地址
-
目的MAC地址:
00:00:00:00:00:00(全零表示为止) -
目标IP地址
-
-
处理ARP请求时需要先分离数据帧报头,在ARP层 检查操作码(op)是否为 1(表示请求),并判断其中的目标 IP 地址是否与本机 IP 地址一致。若两者均满足,则本机需要回复 ARP 应答。
-
-
ARP应答:应答与请求唯一不同的就是 操作码为2 目的MAC地址为对方的MAC地址。
- 其他主机在收到ARP应答时,会直接丢弃,因为这次数据链路层报头中的MAC地址是具体的。
ARP之后,主机或路由器会建立一张IP与MAC的内存级映射表,避免重复发送ARP广播请求,提升局域网通信的效率。
在网络通信中,每一跳(即主机 / 路由器到下一跳设备的链路层传输),都可能触发ARP协议。