2、网络基础回顾:以太网帧结构、IP路由原理、TCP与UDP的区别、交换机转发原理

各位同学好,我是你们的网络工程师老张。今天咱们要聊的这几个概念,是理解RoCE的基石。说实话,我见过不少搞RDMA的人,一上来就扎进RoCEv2的细节里,结果连最基本的以太网帧长啥样都说不清楚。嗯,这不行。

咱们今天就把这些基础夯实了。你想想看,RoCE说白了就是把RDMA搬到以太网上跑。如果连以太网怎么转发、IP怎么路由、TCP和UDP有啥区别都搞不明白,那后面学RoCE肯定会一头雾水。

2.1 以太网帧结构

先看最底层的东西——以太网帧。我习惯把它想象成一个快递包裹。你寄快递,得有收件人地址、寄件人地址,还得有个包裹内容说明。以太网帧也一样。

一个标准的以太网帧长这样:

| 前导码(7B) | 帧起始定界符(1B) | 目的MAC(6B) | 源MAC(6B) | 类型/长度(2B) | 数据(46-1500B) | FCS(4B) |

这里面有几个关键字段:

  • 目的MAC地址:6个字节,就是收件人的物理地址。交换机就靠这个转发数据。
  • 源MAC地址:6个字节,寄件人的地址。
  • 类型/长度字段:2个字节。如果值大于1536,表示上层协议类型,比如0x0800代表IP协议。如果值小于1500,表示数据字段的长度。
  • 数据字段:46到1500字节。这里装的就是上层传下来的数据包。
  • FCS:4个字节的校验码,用来检查帧在传输过程中有没有出错。

重要提醒:以太网帧的最小长度是64字节(从目的MAC到FCS)。如果数据字段不够46字节,会填充到46字节。为什么?这是为了确保冲突检测机制正常工作。我在一次数据中心改造项目中,就因为某个交换机配置了巨帧(Jumbo Frame),结果和标准帧混跑,出了不少诡异的问题。

说到巨帧,我得提一句。标准以太网帧的数据部分最大1500字节,但很多数据中心设备支持9000字节的巨帧。RoCEv2通常建议开启巨帧,因为可以减少CPU中断次数,提升吞吐量。不过,你得确保整条链路上的所有设备都支持才行。

2.2 IP路由原理

以太网帧只能在同一个二层网络里跑。跨网络通信,就得靠IP路由了。

IP路由的核心,说白了就是「查表转发」。每个路由器(或者三层交换机)都维护着一张路由表。收到一个IP包后,它会这样做:

  1. 提取目的IP地址
  2. 查路由表,找到最匹配的路由条目
  3. 如果匹配到直连网段,直接通过ARP获取目的MAC,封装成帧发出去
  4. 如果匹配到非直连网段,找到下一跳IP,再通过ARP获取下一跳的MAC,封装成帧发出去
  5. 如果没匹配到,丢弃包,并给源端发一个ICMP不可达消息

举个例子。我在一个跨国企业的数据中心里,曾经遇到过一个问题:两个机房之间的流量总是走了一条很慢的链路。查了半天,发现是路由表里有一条静态路由的优先级配错了。你看,路由这东西,一个数字不对,整个网络的行为就变了。

路由表长什么样?我给你们看个简化版:

目标网络          下一跳          接口
192.168.1.0/24    直连            eth0
10.0.0.0/8        192.168.1.1    eth0
0.0.0.0/0         192.168.1.254  eth0

最后一条是默认路由,匹配所有没明确指定的目标。没有它,很多流量就出不去了。

个人经验:调试路由问题时,我习惯先用traceroute看路径,再用show ip route看路由表。两个工具配合使用,大部分问题都能定位。

2.3 TCP与UDP的区别

这个问题,面试的时候几乎必问。但很多人背了概念,实际用起来还是分不清。

我直接给你们画个对比表:

特性 TCP UDP
连接 面向连接(三次握手) 无连接
可靠性 可靠传输(确认重传) 不可靠(尽力而为)
顺序 保证数据按序到达 不保证顺序
流量控制 有(滑动窗口)
拥塞控制 有(慢启动、拥塞避免)
头部开销 20-60字节 8字节
典型应用 Web、邮件、文件传输 DNS、视频流、VoIP

你想想看,TCP为了保证可靠,做了多少额外工作?三次握手、序列号、确认应答、重传计时器、滑动窗口……这些机制保证了数据不丢、不乱、不错。但代价就是延迟高、吞吐量受限。

UDP就简单粗暴多了。发出去就不管了,收没收到、顺序对不对,一概不问。所以它延迟低、效率高。

那RoCE用的是什么?答案是UDP。具体来说,RoCEv2把RDMA的传输层封装在UDP里。为什么不用TCP?因为RDMA需要极低的延迟和极高的吞吐量,TCP的拥塞控制和重传机制会引入不可控的延迟。UDP虽然不可靠,但RDMA协议自己在应用层实现了可靠传输和流量控制。

避坑指南:我曾经在一个项目中,看到有人试图用TCP跑RDMA流量,结果性能惨不忍睹。记住,RoCEv2用的是UDP端口4791。别搞混了。

2.4 交换机转发原理

交换机是数据中心网络的核心设备。它的转发原理,我总结成一句话:学习源MAC,转发查目的MAC

具体过程是这样的:

  1. 交换机从某个端口收到一个帧,先看源MAC地址,把这个MAC和端口号的对应关系记录到MAC地址表里。
  2. 然后看目的MAC地址,去MAC地址表里查。
  3. 如果查到了,就从对应的端口转发出去(单播)。
  4. 如果没查到,就从除了接收端口以外的所有端口转发出去(泛洪)。
  5. 如果目的MAC是广播地址(FF-FF-FF-FF-FF-FF),也泛洪。

MAC地址表长这样:

MAC地址             端口
00:1A:2B:3C:4D:5E   Gi1/0/1
00:1A:2B:3C:4D:5F   Gi1/0/2
00:1A:2B:3C:4D:60   Gi1/0/3

这里有个关键点:MAC地址表是有老化时间的。默认一般是300秒。如果一个MAC地址在300秒内没有新帧进来,交换机就会把它从表里删掉。下次再收到发往这个MAC的帧,就得重新泛洪学习。

我在一次数据中心搬迁中,就遇到过因为MAC地址表老化时间设置太短,导致大量流量被泛洪,网络性能急剧下降的问题。后来把老化时间调长了,问题就解决了。

对于RoCE网络来说,交换机的转发延迟非常关键。因为RDMA对延迟极其敏感。我建议你们在实际部署时,选择支持低延迟转发、有足够大缓冲区、并且支持PFC(优先级流控制)和ECN(显式拥塞通知)的交换机。这些特性后面会详细讲。

核心要点:以太网帧是数据在链路上传输的「容器」,IP路由是跨网络通信的「导航」,TCP/UDP是传输层的两种「运输方式」,交换机转发是数据在局域网内「分发」的机制。这四个概念,是理解RoCE网络协议的基础中的基础。

好了,这一章的内容就到这里。记住我今天讲的这些,后面学RoCE的时候,你会发现自己能更快地抓住重点。

网络基础核心知识体系 以太网帧结构 • 前导码 + 帧起始定界符 • 目的MAC + 源MAC • 类型/长度 + 数据 + FCS • 最小64字节,最大1518字节 IP路由原理 • 查路由表 → 匹配目标网络 • 直连网段:ARP获取目的MAC • 非直连:找下一跳 → ARP • 无匹配:丢弃 + ICMP不可达 TCP vs UDP • TCP:可靠、有序、有连接 • UDP:不可靠、无序、无连接 • TCP头部20-60B,UDP仅8B • RoCEv2使用UDP端口4791 交换机转发原理 • 学习源MAC → 建立MAC表 • 查目的MAC → 精确转发 • 未命中 → 泛洪 • MAC表老化时间默认300秒 RoCE协议基础

学习建议:如果你对这四个概念还有不清楚的地方,我建议你先停下来,用Wireshark抓几个包看看。亲眼看到以太网帧的各个字段、TCP的三次握手、UDP的无连接通信,比看十遍书都管用。

专注资料整理