VXLAN格式的详细信息

学习VXLAN我在文档中发现:

… … VTEP1然后将包含VNI的VXLAN头添加到以太网帧,将帧封装在第3层UDP数据包中,并通过第3层networking将数据包路由到VTEP2。

然后,关于封装的头文件:

外部MAC头 – 包含源VTEP的MAC地址和下一跳路由器的MAC地址。 分组path上的每个路由器都会重写此报头,以便源地址是路由器的MAC地址,目标地址是下一跳路由器的MAC地址。

如果数据包通过第3层路由,为什么要求下一跳的外部MAC地址,而不是第三层IP?
而关于VXLAN隧道节点(非VTEP),它们是交换机/虚拟交换机(L2),路由器(L3)还是可以兼得?

[编辑]

VXLAN分组报头

VXLAN是第二层框架,所以当一个VTEP想要发送数据到另一个VTEP时,它将创build一个二层VXLAN帧(基本上是一个以太网帧)。 这个帧然后需要被传送到目的地VTEP的IP地址。

当他们谈论“外MAC标头”时,他们似乎在谈论通过物理networking发送的帧。 想象下面的configuration –

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接口本身的地址)。

  1. VTEP主机A将VXLAN帧放入UDP数据包中,并将其定位到2.2.2.2。 [UDP PACKET 1.1.1.1->2.2.2.2[VXLAN FRAME]]
  2. 这个数据包被传递给想要传送给2.2.2.2的操作系统。 这不在本地networking上,因此数据包被放置在具有AA源和本地路由器BB的目的地的以太网帧中。 [ETH FRAME AA->BB[UDP PACKET[VXLAN FRAME]]]
  3. 本地路由器收到帧并提取UDP数据包。 它看到数据包的目的地是2.2.2.2,它可以直接访问。 它把数据包放在一个新的以太网帧中去。 [ETH FRAME CC->DD[UDP PACKET[VXLAN FRAME]]] 。 **
  4. 主机B收到寻址到它的以太网帧,提取UDP数据包,然后将其传递到系统处理VXLAN数据的任何部分。

**如果VTEP之间有其他路由器,则此过程将继续。 每个路由器将提取数据包并将其置于一个新的帧中,使用自身的src MAC和下一个跃点的dst MAC,直到到达目的地。