在虚拟机 1 中的流量到达虚拟机 2 之前,DLR 需要获悉虚拟机 2 的 MAC 地址。在获悉虚拟机 2 的 MAC 地址后,DLR 可以为出站数据包创建正确的 L2 标头。
DLR ARP 过程 显示了 DLR 的 ARP 解析过程。
要获悉 MAC 地址,DLR 将执行以下步骤:
- 主机 A 上的 DLR 实例生成一个 ARP 请求数据包(源 MAC = vMAC,目标 MAC = 广播)。主机 A 上的 VXLAN 模块在输出 VXLAN 5001 上查找所有 VTEP,然后为每个 VTEP 发送该广播帧的一个副本。
- 在该帧通过 VXLAN 封装过程离开主机时,源 MAC 将从 vMAC 更改为 pMAC A,以便返回流量可以在主机 A 上找到源 DLR 实例。该帧现在为源 MAC = pMAC A,目标 MAC = 广播。
- 在主机 B 上收到并解封该帧时,将检查该帧并发现它来自于与 VXLAN 5001 上的本地 DLR 实例的 LIF 匹配的 IP 地址。这会将该帧标记为 abrequest 以执行代理 ARP 功能。目标 MAC 将从广播更改为 vMAC,以便该帧可以到达本地 DLR 实例。
- 主机 B 上的本地 DLR 实例收到 ARP 请求帧(源 MAC = pMAC A,目标 MAC = vMAC),然后查看自己的 LIF IP 地址以请求该信息。它保存源 MAC 并生成新的 ARP 请求数据包(源 MAC = vMAC,目标 MAC = 广播)。该帧将标记为“DVS 本地”,以防止它通过 dvUplink 发生泛洪。DVS 将该帧传送到虚拟机 2。
- 虚拟机 2 发送一个 ARP 回复(源 MAC = MAC2,目标 MAC = vMAC)。DVS 将其传送到本地 DLR 实例。
- 主机 B 上的 DLR 实例将目标 MAC 替换为在步骤 4 中保存的 pMAC A,然后将数据包发送回 DVS 以传送回主机 A。
- 在 ARP 回复到达主机 A 后,目标 MAC 将更改为 vMAC,并且 ARP 回复帧(源 MAC = MAC2,目标 MAC = vMAC)到达主机 A 上的 DLR 实例。
ARP 解析过程已完成,主机 A 上的 DLR 实例现在可以开始将流量发送到虚拟机 2。