马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
写在前面
搞懂了网络层的 IP 协议之后,该往网络底层走了——数据链路层。这一层要先搞清楚四件事:以太网帧长什么样、MAC 地址是什么、MTU 为什么是 1500、ARP 怎么把 IP 换成 MAC。这四块构成了局域网通信的全部地基。
一、先认识以太网
以太网(Ethernet)是一种局域网技术,它定义了物理层和数据链路层的一套标准,负责在设备之间传数据。几个关键点:
- 帧格式:以太网用"帧"作为数据传输的基本单位。
- MAC 地址:每个以太网设备都有唯一标识,局域网内的寻址靠它。
- MTU:默认 1500 字节,是单帧能携带的最大数据量,超了要分片。
- 交换机 / 集线器:集线器把帧广播到所有端口,交换机则能智能地只发给正确的目标端口。
- 速率与双工:10M / 100M(Fast Ethernet)/ 1G(Gigabit)/ 10G 不等,支持全双工或半双工。
- 物理介质:双绞线(UTP 非屏蔽、STP 屏蔽)、光纤、同轴电缆。
二、以太网帧格式
帧是数据链路层传输的基本单位,结构比较固定:
| 字段 | 长度 | 作用 |
| 前同步码(Preamble) | 7 字节 | 1010 交替,让接收端适配器同步时钟频率 |
| 帧开始定界符(SFD) | 1 字节 | 前 6 位 01 交替,末两位连续 1,表示帧马上开始 |
| 目的地址 | 6 字节(48 bit) | 接收网卡的物理地址,即 MAC 地址 |
| 源地址 | 6 字节(48 bit) | 发送网卡的 MAC 地址 |
| 类型(Length/Type) | 2 字节 | 标识上层协议类型,如 0x0800 表示 IP 协议 |
| 数据(Payload) | 46 ~ 1500 字节 | 交给上层的数据;上限 1500 就是 MTU |
| FCS | 4 字节 | 循环冗余校验(CRC),检测传输过程中是否出错 |
注意前面两个字段(前同步码 + 定界符)共 8 字节,只在物理层线路上出现,不会进 MAC 帧本身——所以一般说的以太网帧最小 64 字节、最大 1518 字节,指的就是去掉前导码之后的部分。
三、MAC 地址
定义与结构
MAC 地址是网络设备硬件的一部分,通常烧在网卡(NIC)的 ROM 里。标准长度 48 位,即 6 字节,写成 12 个十六进制数,形如 00:1A:2B:3C:4D:5E。
结构上分两段:
- 前 24 位(3 字节):OUI(组织唯一标识符),由 IEEE 分配给不同制造商。
- 后 24 位(3 字节):制造商自行分配,保证同厂设备之间不撞。
三种地址类型
- 单播:最低位为 0,指向某一个具体设备。
- 组播:最低位为 1,指向一组设备。
- 广播:全 1,形如
FF:FF:FF:FF:FF:FF,指向同一网络内的所有设备。
几个实战要点
- 查自己机器的 MAC:
ip link 或 cat /sys/class/net/eth0/address,Linux 下最常用的就是 ip link show。
- 隐私:因为 MAC 唯一,理论上可被用于跟踪设备,所以现在手机和部分系统支持"随机化 MAC"来对抗指纹追踪。
- 虚拟化:虚拟机也有自己的虚拟 MAC,由虚拟化平台分配管理;容器则通常共用宿主机网卡。
- 地址冲突:两台设备 MAC 相同会导致通信异常,不过 IEEE 管控严格,实际很少见。
- 不止有线:MAC 寻址这套机制也延伸至 Wi-Fi 等无线网络。
四、MTU:为什么是 1500
MTU(Maximum Transmission Unit,最大传输单元)指特定网络层上能传输的最大数据包大小,是"不做分片"情况下的上限,包含头部和载荷。
关键规则
- 以太网标准 MTU = 1500 字节,也就是帧的数据部分最大 1500。
- 包超过 MTU,就要在网络层分片,接收端负责重新组装。
- 分片会消耗 CPU、增加丢包概率,所以网络设计都尽量避免分片。
路径 MTU 发现(PMTUD)
发送方并不事先知道整条路径上最小的 MTU 是多少,PMTUD 就是干这个的:IPv4 通过发 ICMP 不可达报文(Type 3, Code 4)探测,逐步降低自己的发送尺寸,直到不再需要分片。
运维上最典型的症状:一条跨境或经过 VPN / 隧道的链路,MTU 往往因为封装开销被压到 1400 左右;不调小的结果是大文件卡住、小请求却正常——TCP 握手能过,大包一发就超时。常用探测:
ping -M do -s 1472 目标IP # 1472 + 28 字节 IP/ICMP 头 = 1500,能通说明路径 MTU 够
ping -M do -s 1442 目标IP # 再往下压 30,找临界点
-M do 表示不分片,配合 -s 改载荷长度,就能量出链路真实 MTU。
其他补充
- 与性能:更大的 MTU 能减少分片,提升吞吐量,即"巨帧"(jumbo frame,常配 9000)的思路;但要求整条链路的设备都支持,配一头不配另一头反而会丢包。
- 与协议:IPv6 的最小 MTU 是 1280 字节(IPv4 没有这个硬性下限),所以 IPv6 默认不会轻易分片,宁可让 ICMPv6 报"包太大"。
- 与无线:无线链路错误率高,MTU 常设小一些,减少出错重传的概率。
- 与安全:异常大的分片常被用来做分片攻击,所以边界设备对分片包一般都有策略限制。
五、ARP:把 IP 翻译成 MAC
ARP(Address Resolution Protocol,地址解析协议)把网络层的 IP 地址解析成数据链路层的 MAC 地址,是 IPv4 局域网通信的必备环节。
ARP 报文字段
| 字段 | 说明 |
| 硬件类型 | 网络接口类型,以太网为 1 |
| 协议类型 | 上层协议地址类型,IPv4 为 0x0800 |
| 硬件地址长度 | MAC 长度,以太网为 6 字节 |
| 协议地址长度 | IP 地址长度,IPv4 为 4 字节 |
| 操作码 | 1 = 请求,2 = 应答 |
| 发送方 MAC | 发 ARP 报文的设备的 MAC |
| 发送方 IP | 发 ARP 报文的设备的 IP |
| 目标 MAC | 请求时为全 0(未知),应答时为被请求设备的 MAC |
| 目标 IP | 要解析的那个 IP |
工作流程
- 主机知道自己要访问的目标 IP,但不知道它的 MAC;
- 广播一个 ARP 请求到整个局域网(目的 MAC 全 FF);
- 局域网内每台主机都收到并比对自己的 IP,只有目标主机会回一个 ARP 应答,带上自己的 MAC;
- 请求方拿到 MAC,把 IP→MAC 的映射存进 ARP 缓存,之后单播通信。
arp -n # 看本机 ARP 缓存
ip neigh # 更现代的写法(Linux)
arp -d 192.168.1.1 # 删掉某条缓存
ip neigh flush proxy # 清代理邻居表
ARP 缓存有老化时间(通常几分钟),过期会重新发请求。注意 ARP 是没有认证的——任何人往网段里发一个伪造的 ARP 应答,就能把流量引到自己的 MAC 上,这就是 ARP 欺骗的原理;所以在交换机 Access 端口必要时开 DHCP snooping + DAI 来防。
小结
数据链路层这块的四件套可以这么记:
- 以太网帧:前导码 + 定界符(物理层)+ 目的 MAC / 源 MAC / 类型 / 数据 / FCS;类型字段 0x0800 指向上层 IP。
- MAC 地址:48 位 6 字节,前 3 字节是 IEEE 分配的 OUI,最低位区分单播/组播,全 1 是广播。
- MTU:以太网默认 1500,超了走分片;跨隧道/VPN 场景要实测并把 ping 的包长压小,否则大包必挂;IPv6 最小 1280。
- ARP:广播请求、单播应答,把 IP 解析成 MAC;缓存有老化,且没有认证机制,存在 ARP 欺骗风险。
实际排查时,这三样几乎贯穿所有"局域网不通"的问题:能 ping 通 IP 但服务连不上,先查 ARP 缓存是不是指错了 MAC;大包超时小包通,先想 MTU;整网段时通时不通,再看交换机 MAC 表是不是炸了。
(本文由 qidao123.com企服评测-应用市场 编辑提示整理:内容基于 IEEE 802.3 与 RFC 826 标准定义,命令适用于 Linux 2.6+ 内核环境。) |