![VXLAN 格式详细信息](https://linux22.com/image/712142/VXLAN%20%E6%A0%BC%E5%BC%8F%E8%AF%A6%E7%BB%86%E4%BF%A1%E6%81%AF.png)
关于VXLAN的学习我在一篇文档中找到:
...然后,VTEP1 将包含 VNI 的 VXLAN 报头添加到以太网帧,将该帧封装在第 3 层 UDP 数据包中,并通过第 3 层网络将数据包路由到 VTEP2。
然后,关于封装的标头:
外层 MAC 报头– 包含源 VTEP 的 MAC 地址和下一跳路由器的 MAC 地址。数据包路径上的每个路由器都会重写此报头,以便源地址是路由器的 MAC 地址,而目标地址是下一跳路由器的 MAC 地址。
如果数据包通过第 3 层路由,为什么下一跳需要外部 MAC 地址,而不是典型的第 3 层 IP?
关于 VXLAN 隧道节点(非 VTEP),它们是交换机/虚拟交换机(L2)、路由器(L3)还是两者兼而有之?
[编辑]
答案1
VXLAN 是一个第 2 层框架,因此当一个 VTEP 想要向另一个 VTEP 发送数据时,它将创建一个第 2 层 VXLAN 帧(基本上是一个以太网帧)。然后需要将此帧传送到目标 VTEP 的 IP 地址。
当他们谈论“外部 MAC 报头”时,他们似乎在谈论通过物理网络发送的帧。想象一下以下配置 -
VTEP Host A: 1.1.1.1 MAC AA (not going to bother with full MAC addresses)
Local Router Interface 1: 1.1.1.254 MAC BB
Local Router Interface 2: 2.2.2.254 MAC CC
VTEP Host B: 2.2.2.2 MAC DD
(上面的 IP 地址是实际主机地址(VTEP 端点),而不是虚拟 VXLAN 接口本身的地址)。
- VTEP 主机 A 将 VXLAN 帧放入 UDP 数据包中,并将其寻址为 2.2.2.2。
[UDP PACKET 1.1.1.1->2.2.2.2[VXLAN FRAME]]
- 此数据包被传递给操作系统,操作系统希望将其传送到 2.2.2.2。这不在本地网络上,因此数据包被放置在以太网帧中,其源为 AA,目的地为本地路由器 BB。
[ETH FRAME AA->BB[UDP PACKET[VXLAN FRAME]]]
- 本地路由器接收该帧并提取 UDP 数据包。它发现该数据包的目的地是 2.2.2.2,它可以直接访问该地址。它将数据包放入一个目的地为 DD 的新以太网帧中。
[ETH FRAME CC->DD[UDP PACKET[VXLAN FRAME]]]
** - 主机 B 接收发给它的以太网帧,提取 UDP 数据包,然后将其传递给系统处理 VXLAN 数据的部分。
** 如果 VTEP 之间有其他路由器,则此过程将继续。每个路由器都会提取数据包并将其放入新帧中,其中包含其自身的源 MAC 和下一跳的目标 MAC,直到到达目的地。