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包后,它会这样做:
- 提取目的IP地址
- 查路由表,找到最匹配的路由条目
- 如果匹配到直连网段,直接通过ARP获取目的MAC,封装成帧发出去
- 如果匹配到非直连网段,找到下一跳IP,再通过ARP获取下一跳的MAC,封装成帧发出去
- 如果没匹配到,丢弃包,并给源端发一个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。
具体过程是这样的:
- 交换机从某个端口收到一个帧,先看源MAC地址,把这个MAC和端口号的对应关系记录到MAC地址表里。
- 然后看目的MAC地址,去MAC地址表里查。
- 如果查到了,就从对应的端口转发出去(单播)。
- 如果没查到,就从除了接收端口以外的所有端口转发出去(泛洪)。
- 如果目的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的时候,你会发现自己能更快地抓住重点。
学习建议:如果你对这四个概念还有不清楚的地方,我建议你先停下来,用Wireshark抓几个包看看。亲眼看到以太网帧的各个字段、TCP的三次握手、UDP的无连接通信,比看十遍书都管用。