C05 · 第 2 章 · 链路与时延

以太网与交换

分析以太网帧、MAC 地址学习和广播范围,结合 ARP 与 VLAN 说明链路转发,并计算帧开销和有效数据速率。

预备知识网络分层与时延

本章目标

  1. 识别常见以太网帧字段并计算填充长度。
  2. 逐帧更新交换机的 MAC 转发表。
  3. 区分广播域、VLAN 和 IP 子网。
  4. 解释跨网段发送时 ARP 查询对象并计算载荷速率。
页面阅读位置0%
章节未开始
本册完成进度0/6 章 · 0%
本页目录

以太网帧与链路地址

以太网把一段上层数据封装成帧,在同一个二层网络中传送。一个常见的无标签以太网帧包含目的地址、源地址、类型字段、载荷和帧校验序列。源地址说明发送接口,目的地址说明当前二层网络中的接收对象,类型字段用于识别上层协议。本文使用六字节 MAC 地址,并把交换机端口编号与主机名称分开表示,防止把物理接线位置当成永久主机身份。

按无 VLAN 标签的常见格式,目的地址和源地址各占六字节,类型字段占两字节,帧校验序列占四字节。从目的地址到帧校验序列,最短帧长为 64 B64\,\mathrm{B},因此载荷不足 46 B46\,\mathrm{B} 时需要填充。发送到介质时还涉及前导码、帧起始定界符和帧间间隔,计算线路占用时间时应明确是否计入这些开销。

RFC 894: A Standard for the Transmission of IP Datagrams over Ethernet Networks

Charles Hornig · 1984 · RFC Editor

打开官方来源

RFC 894 规定 IPv4 数据报在以太网中的封装方式,其中类型值为十六进制 0800,填充字节不计入 IP 数据报长度。接收端先依据链路格式识别载荷,再依据 IP 首部的长度字段解释数据,因此协议中不同层的长度可能同时出现。下面的计算统一使用帧字节长度,并在计算线速时单列物理发送开销。

源地址学习与目的地址查找

交换机维护 MAC 地址到出口端口的映射。在一个简化的学习交换机中,每收到一帧,交换机先用源地址和入口端口更新表项,再查询目的地址。已知单播目的地址对应另一个端口时,帧只从该端口转发;若目的端口与入口相同,交换机过滤该帧。未知单播和广播则在所属广播域内向其他允许转发的端口发送,称为泛洪。

学习依据是帧的源地址,因为源地址直接表明该发送者当前从哪个方向出现。只观察目的地址无法知道目的主机连在哪里。表项通常设置老化时间;当主机移动到其他端口,后续源地址学习会更新位置。多个终端位于同一下游端口时,不同 MAC 地址可以映射到同一端口。

这种算法没有对每个接收者确认交付的步骤。交换机可能因队列满、端口策略或帧错误而丢弃数据,端到端可靠性需要由适当的上层机制处理。在分析转发时,我们还应区分控制平面建立的状态与当前帧触发的转发动作,避免把转发表中存在某一条记录解释成业务已经成功通信。

四端口交换机的学习过程

交换机端口一、二、三分别连接主机 A、B、C,端口四连接另一台交换机,其下游暂未发送数据;转发表初始为空,所有端口处于转发状态且属于同一广播域。先由 A 向 B 发送一帧,再由 B 回复 A,最后由 C 向 B 发送一帧。

第一帧从端口一进入,交换机记录 A 对应端口一。由于尚无 B 的位置记录,该帧向端口二、三、四泛洪;B 接收数据,C 按目的地址丢弃不属于自己的单播帧。第二帧从端口二进入,交换机记录 B 对应端口二,并把回复只送到端口一。第三帧从端口三进入时,C 的位置得到记录,B 的表项已经存在,因此只从端口二发送。

最终表项为 A 到一、B 到二、C 到三,总共发生三次、一次、一次出口发送。我们检查学习顺序可知,第一帧的目的地址不会自动建立 B 的位置记录;B 的回复才提供了该信息。端口四没有收到回复,也不会仅因参与过泛洪就产生主机表项。

广播域、环路与 VLAN

广播帧面向同一广播域中的终端。若交换机之间存在环路,广播和未知单播可能不断循环,产生重复帧并占用链路;以太网帧中没有与 IP 生存时间完全对应的逐跳计数字段。因此,存在冗余链路的二层拓扑需要通过生成树等机制限制活动转发路径,或采用明确处理环路的交换方案。

虚拟局域网 VLAN 把一套交换设备划分成多个逻辑二层网络。交换机学习和查找时需要考虑所属 VLAN,同一个目的地址在不同 VLAN 中具有不同的转发上下文。接入口通常服务某一个 VLAN,承载多个 VLAN 的链路则需要携带相应标记。两个 VLAN 之间的通信通常经过三层转发,在两个子网之间配置同一网关地址并不能代替正确的路由与接口设置。

广播域、IP 子网与物理接线在工程中经常相关,但仍是不同概念。一个交换端口可以连接另一台交换机,从而承载许多终端;多个 IP 子网也可能被配置在同一二层范围内。排查问题时,应分别记录端口所属 VLAN、终端的地址掩码和下一跳,逐项验证,不能只根据交换机外观或网线连接判断网络边界。

IPv4 地址解析

主机发送 IPv4 数据报前,先根据路由表选择下一跳。目的主机位于同一子网时,下一跳通常就是目的主机;跨子网时,下一跳通常为网关。随后主机使用地址解析协议(ARP)查询下一跳 IPv4 地址对应的链路地址,构造以太网帧。跨网段发送时,IP 目的地址仍指向远端终端,以太网目的地址指向当前链路上的网关接口。

RFC 826: An Ethernet Address Resolution Protocol: Or Converting Network Protocol Addresses to 48.bit Ethernet Address for Transmission on Ethernet Hardware

David C. Plummer · 1982 · RFC Editor

打开官方来源

ARP 请求通常广播发送,拥有被查询 IPv4 地址的终端回复其 MAC 地址,双方缓存结果以减少后续查询。RFC 826 给出了请求、响应及缓存更新的报文字段和处理过程。传统 ARP 不提供密码学身份认证,因此缓存中的映射需要结合网络接入和安全策略解释;收到一条映射记录不能单独证明对端身份。

帧长与有效数据速率

连续发送最大常规帧的有效速率

考虑 1 Gbit/s1\,\mathrm{Gbit/s} 全双工以太网,连续发送载荷为 1500 B1500\,\mathrm{B} 的无标签帧。将前导码和帧起始定界符合计为八字节,将帧间间隔按十二字节发送时间计入,并忽略其他暂停和编码差异。

帧本身长 1500+14+4=1518 B1500+14+4=1518\,\mathrm{B},一帧与后续间隔合计占用 15381538 字节时间。于是每周期为 1538×8/109=12.304 μs1538\times8/10^9=12.304\,\mathrm{\mu s},链路载荷对应的有效速率为

109 bit/s×15001538≈975.29 Mbit/s.10^9\,\mathrm{bit/s}\times\frac{1500}{1538}\approx975.29\,\mathrm{Mbit/s}.

这个结果统计的是以太网载荷,其中仍包括 IP 和传输层首部。若载荷为 1500 B1500\,\mathrm{B} 的 IPv4 数据报,且 IPv4 与 TCP 首部均没有选项,则应用数据为 1460 B1460\,\mathrm{B},对应约 949.28 Mbit/s949.28\,\mathrm{Mbit/s}。检查两个分子说明,同一条链路的有效速率随计数层次而变化。

短帧所占的首部比例更高。即便应用只发送少量字节,帧仍需满足最小长度,线路还要留出帧间间隔。链路利用率高也可能伴随较大的排队时延,选择发送策略时应同时观察延迟和有效吞吐量。全双工点对点链路分别承担两个方向的发送,课堂上讨论的共享介质碰撞机制只适用于相应的半双工模型。

交换与地址解析练习

以下题目分别检查查表、封装和计时。解答时先固定二层拓扑及表项状态,再处理当前帧;如果把前一帧刚学到的位置遗漏,后续泛洪次数就会改变。涉及线路时间的题目沿用前一道例题的八字节前导部分和十二字节间隔约定。

练习

A 从端口一移到端口四后,向表中已知的 B 发送一帧。交换机如何更新 A 的表项,又会从哪个端口转发?

查看解答

交换机更新 A 到端口四,随后按已有 B 表项向端口二单播。新的源地址位置替换旧位置,不能继续把 A 的后续回复送往端口一。

练习

一个 40 B40\,\mathrm{B} 的上层数据包装入无标签以太网帧,需要填充多少字节?在 1 Gbit/s1\,\mathrm{Gbit/s} 链路上连同前导部分和间隔占用多久?

查看解答

载荷至少为 46 B,所以补 6 B。帧长为 (14+46+4) B=64 B(14+46+4)\,\mathrm{B}=64\,\mathrm{B};加入八字节前导部分和十二字节间隔,共占 84 字节时间,即 0.672 微秒。

练习

主机通过默认网关访问远端服务器。它应查询服务器还是网关的 MAC 地址?请分别说明以太网首部与 IP 首部的目的地址。

查看解答

ARP 查询本地网关的 IPv4 地址;以太网目的地址填网关接口的 MAC 地址,IP 目的地址仍填写远端服务器地址。每次跨越链路边界时,路由器重新封装链路首部。

练习

一个未知单播帧从 VLAN 10 的接入口进入交换机。设备还接有只属于 VLAN 20 的终端,未知目的地址是否使该帧转发给 VLAN 20?说明查表失败后的范围限制。

查看解答

帧只向 VLAN 10 内除入口外且允许转发的端口泛洪,不应发往只属于 VLAN 20 的接入口。尚未学习目的地址不会解除 VLAN 边界。