网络基础回顾:TCP/IP模型、以太网帧结构与交换机工作原理
在深入链路丢包定位与RDMA重传优化之前,必须先夯实网络基础。RDMA(远程直接内存访问)报文虽然绕过了内核协议栈,但最终仍要封装为以太网帧在物理链路上传输。理解TCP/IP模型的分层职责、以太网帧的字节级结构以及交换机内部的转发决策过程,是判断丢包发生在哪一层、由哪个设备丢弃、以及为何RDMA重传机制会触发的前提。
2.1 TCP/IP模型:分层职责与丢包定位边界
TCP/IP模型将网络通信划分为四层,每一层都有独立的协议数据单元(PDU)名称和封装关系。RDMA over Converged Ethernet(RoCE)v2的报文结构恰好横跨了传输层(UDP)、网络层(IP)和链路层(Ethernet),因此任何一层的异常都会表现为链路丢包。
| 层次 | PDU名称 | 典型协议/设备 | 丢包常见原因 |
|---|---|---|---|
| 应用层 | 消息(Message) | RDMA应用、Socket | 缓冲区溢出、应用未及时消费 |
| 传输层 | 段(Segment)/数据报(Datagram) | TCP、UDP、RoCE v2(UDP封装) | 端口不可达、校验和错误、接收队列满 |
| 网络层 | 包(Packet) | IP、路由器、三层交换机 | TTL超时、路由黑洞、MTU分片失败 |
| 链路层 | 帧(Frame) | 以太网、交换机、网卡 | FCS错误、CRC校验失败、端口拥塞、缓冲区不足 |
丢包定位的第一原则是:先确定丢包发生在哪一层,再针对该层的计数器与日志排查。例如,若交换机入方向CRC错误计数持续增长,则问题大概率在物理层或链路层,而非IP层路由策略。
2.2 以太网帧结构:逐字节拆解丢包现场
以太网帧是链路层传输的最小单位。标准IEEE 802.3以太网帧结构如下(不含前导码和SFD):
| 目的MAC (6B) | 源MAC (6B) | EtherType (2B) | 载荷 (46~1500B) | FCS (4B) |
关键字段与丢包关联如下:
- 目的MAC地址:交换机依据它做转发决策。若目的MAC为广播地址(FF:FF:FF:FF:FF:FF),则帧被泛洪到所有端口。
- EtherType:0x0800表示IPv4,0x86DD表示IPv6,0x8915表示RoCE v2(基于UDP的RDMA)。若交换机不支持该EtherType,可能直接丢弃。
- 载荷长度:最小46字节,最大1500字节(标准MTU)。若启用Jumbo Frame,可达9000字节。RDMA流量常使用大MTU提升吞吐,但若链路中某设备MTU不一致,会导致分片或静默丢弃。
- FCS(帧校验序列):使用CRC32算法。接收端计算校验值若不匹配,则丢弃该帧并增加CRC错误计数。这是物理层信号质量差、网卡故障或线缆过长导致丢包的最直接证据。
rx_crc_errors 与 rx_undersize 计数器。若CRC错误持续增加,说明物理层存在信号完整性问题,此时调整RDMA重传参数毫无意义,必须更换光模块或线缆。
2.3 交换机工作原理:MAC地址表与转发决策
交换机是链路层的核心设备,其工作基础是MAC地址表(又称CAM表)。转发决策流程如下:
- 学习:收到帧后,将源MAC地址与入端口绑定,记录到MAC地址表。
- 查找:读取目的MAC地址,在MAC地址表中查找匹配条目。
- 决策:
- 命中单播条目 → 仅从对应端口转发(单播转发)。
- 未命中 → 向除入端口外的所有端口泛洪(未知单播泛洪)。
- 目的MAC为广播/组播地址 → 泛洪或按组播组转发。
- 老化:MAC地址表条目默认老化时间300秒。若设备静默,条目被删除,后续流量将重新泛洪。
交换机内部的丢包点主要集中在出端口队列。当多个入端口同时向同一出端口发送流量时,若瞬时速率超过出端口带宽,帧将进入缓冲区队列。缓冲区满后,新到达的帧被丢弃,即尾丢弃(Tail Drop)。对于RDMA这类对丢包极其敏感的流量,尾丢弃会导致TCP-like RoCE的吞吐量断崖式下降,因此数据中心交换机普遍启用显式拥塞通知(ECN)或优先级流控(PFC)来缓解。
2.4 案例:一次RDMA流量被交换机丢弃的排查
某分布式存储集群使用RoCE v2网络,业务反馈存储延迟从200μs飙升至5ms。检查接收端网卡统计,发现rx_dropped计数持续增长,但物理层无CRC错误。进一步在接入交换机上执行:
show interface ethernet 1/0/1
rx_bytes: 1,234,567,890
rx_crc_errors: 0
rx_undersize: 0
rx_oversize: 0
tx_queue_depth: 1200/1280 <-- 队列深度接近上限
tx_dropped: 8,765 <-- 出方向丢包计数
定位过程:
- CRC错误为0,排除物理层问题。
- 出端口队列深度接近上限,且
tx_dropped非零,判断为出端口拥塞导致尾丢弃。 - 检查该端口连接的接收端网卡速率——发现接收端协商为25Gbps,而发送端为100Gbps,导致流量在出端口处拥塞。
tx_dropped 与队列深度,确认是否存在带宽不匹配或微突发拥塞。
2.5 核心要点清单
- TCP/IP分层决定了丢包排查的边界:链路层看FCS与队列,网络层看TTL与路由,传输层看端口与队列。
- 以太网帧的FCS是物理层健康的“晴雨表”,CRC错误增加时优先排查光模块、线缆和网卡。
- 交换机丢包主要发生在入端口(校验失败)和出端口(队列满),两者计数器不同,需区分对待。
- MAC地址表老化会导致未知单播泛洪,可能引发临时性广播风暴,但通常不会造成持续丢包。
- RDMA流量应优先使用PFC或ECN机制,避免尾丢弃对吞吐量的毁灭性影响。