一、理解数据链路层
网络层交付给链路层之前,会先做决策再行动(查路由表,判断目标网络是否在当前子网)。如果在当前子网,封装目标主机的 MAC 帧报头直接发送;如果不在,发送给下一跳路由器,封装路由器的 MAC 帧报头。
IP 层解决的是跨网络问题,数据链路层解决的是同一个子网内跨主机的问题。
二、以太网
2.1 认识以太网
'以太网'是一种技术标准,包含数据链路层和物理层内容。规定了网络拓扑结构、访问控制方式、传输速率等。
数据链路层解决的是直接相连的主机(电脑、路由器、手机等)之间进行数据交付的问题。例如以太网中的网线必须使用双绞线;传输速率有 10M, 100M, 1000M 等。
以太网是当前应用最广泛的局域网技术;和以太网并列的还有令牌环网、无线 LAN 等。
2.2 以太网帧格式
类型字段用于标识上层协议:
- 0x0800:正常 IP 报文
- 0x0806:ARP 请求(用 IP 询问 MAC 地址)
- 0x0835:RARP 请求(用 MAC 询问 IP 地址)
MAC 帧如何解包和封装? 通过定长报文(长度由 MTU 决定)。
如何实现分用? 局域网通信过程中,所有主机都能收到报文,但只有目的 MAC 地址匹配的主机会将报文向上交付,否则丢弃。
2.3 局域网通信原理
当信息从上层交付到网络层时,检查路由表:
- 若目标网络在当前子网,直接封装目标主机的 MAC 帧地址发送到局域网。
- 若不在,找到默认下一跳路由器,封装该路由器的 MAC 帧地址前往下一个网络。
每当到达一个子网的入口路由器时,都会先解开 MAC 报头向上交付给网络层,搜索路由表判断当前报文是否在该网络,根据决策继续封装新的 MAC 报头。
当确认报文要发给某网络的主机时,封装目标主机的 MAC 帧直接发到局域网中,其他主机收到后丢弃。
2.4 理解 MAC 地址和 IP 地址
MAC 地址:
- 识别数据链路层中相连的节点。
- 长度 48 位(6 字节),通常用 16 进制数字加冒号表示(如 08:00:27:03:fb:19)。
- 网卡出厂时确定,一般不可修改(虚拟机可能冲突)。
在局域网通信过程中,源 IP 和目标 IP 一致不变,但源 MAC 地址和目的 MAC 地址一直在变。
- IP 地址描述路途总体的起点和终点。
- MAC 地址描述路途上每一个区间的起点和终点。
2.5 认识 MTU 和 MSS
MTU 相当于发快递时对包裹尺寸的限制,由不同的数据链路对应的物理层产生。 以太网帧数据长度规定最小 46 字节,最大 1500 字节。最大值 1500 称为以太网的最大传输单元 (MTU)。
2.5.1 MTU 对 IP 协议的影响(分片)
由于数据链路层 MTU 限制,较大的 IP 数据包要进行分包。
- 将大 IP 包分成多个小包,每个小包打上标签。
- 每个小包的 IP 协议头的 16 位标识 (id) 相同。
- 标志字段第 2 位置为 0 表示允许分片,第 3 位表示结束标记(最后一片置 1)。
- 到达对端按顺序重组,返回给传输层。
- 任意一个小包丢失,接收端重组失败,IP 层不负责重传(由 TCP 负责)。
为什么分片在 IP 层做?
- 若在数据链路层做,需面对不同物理网络驱动程序更改,属于硬件范畴。
- 若在传输层或应用层做,需关心具体协议,增加路由器复杂度且效率低。
- IP 层是适配层,只读取 IP 头信息,不关心内部协议,成本最低。
IP 层如何组装? 前置条件:片偏移 != 0 || 更多分片 == 1。
- 丢第一片:检查是否有片偏移为 0 的分片。
- 丢中间:按片偏移排序,检查
片偏移 * 8 + 有效载荷大小是否等于下一片的片偏移。 - 丢最后一片:检查是否存在 MF 为 0 的分片。


