静态隧道
Static Tunnel,是通过用户命令配置本端参数和远端参数来完成:VNI、VTEP IP-ADDR、头端复制列表(head-end peer-list);
Static Tunnel,并非有状态的隧道(如 IPsec VPN 等,属于有状态隧道,即隧道的建立需要进行协商),只是数据传输时的隧道封装(类似 GRE VPN 等等,只负责配置及封装,并不保证对端能够成功接收与解封装);
在头端复制列表中,其 ADDR 是进行隧道封装传输时可封装的隧道目的地址;
PC -> BD -> VIN -> Head-end Peer-list
物理地址表
VXLAN 实现的是在 Overlay Network 中进行二层转发,转发 Uncast 数据帧依赖的依旧是 MAC 地址表项;
VTEP 接收到 BD 内来自本地的数据帧,将数据帧的 SRC-MAC-ADDR 添加到该 BD 的 MAC 地址表中,出接口为收到数据帧的接口;
该表项用于指导发往本 VTEP 下连接终端的数据帧的转发;
同子网数据转发
物理地址动态学习
转发属于远端 VTEP 下所连接设备的数据帧,需要先学习到远端设备的 MAC 地址;
该过程与传统 MAC 地址表形成过程类似,依赖于主机之间的报文交互,一般通过 ARP 报文交互形成 MAC 地址表项;
1)PC1 发送 ARP 广播请求
2)SW1 学习到 PC1 的 MAC 地址
3)SW1 将报文进行 VXLAN 封装,并将 ARP 报文进行泛洪(向所有同 VNI 内的 VTEP 节点转发,即 BUM 流量转发)
4)SW2 学习到 PC1 的 MAC 地址
5)SW2 将 ARP 报文广播发送给其下主机,报文到达 PC2;
1)PC2 发送单播 ARP 响应
2)SW2 学习到 PC2 的 MAC 地址
3)SW2 查找 MAC 地址表,依据 MAC 地址表项{0000-0000-000A,10,1.1.1.1},将 ARP 数据帧封装后发送给 1.1.1.1
4)SW1 学习到 PC2 的 MAC 地址
5)SW1 将 ARP 报文转发给 PC1
至此 PC1、PC2 相互学习到对方的 ARP 信息,SW1、SW2 完成 PC1、PC2 的 MAC 地址学习,该过程也叫做 Flood and Learn;
同子网已知目的地址单播报文转发
PC1 发送单播帧给 PC2
SW1 在 MAC 地址表中查询 PC2 的 MAC 地址,找到匹配的表项
SW1 将报文进行 VXLAN 封装,然后增加新的 IP 包头,报文的目的 IP 地址为远端 VTEP SW2 的地址 2.2.2.2
SW2 在 MAC 地址表中查询 PC2 的 MAC 地址,找到匹配的表项
SW2 将报文转发给 PC2
BUM 流量转发
传输 BUM 流量时,VTEP 会将流量复制多份发送到头端复制列表中的对端 VTEP,以在 Overlay Network 中实现泛洪转发的效果;
跨子网数据转发
PC1 希望与 PC2 进行通信,本地计算发现对端与自身不在同一个子网,此时将报文发送给网关;
PC1 发往 PC2 的数据帧,目的 MAC 为:00AB-09FF-1111(网关 MAC 地址),SW1 收到后执行 L2 查表发现出接口为远端 VTEP(即 L3 网关),将报文加上 VXLAN 头部封装(VNI =1000)之后发往 SW3;
SW3 收到报文后,解封 VXLAN 报文,发现内部原始数据帧其 DST-MAC-ADDR=00AB-09FF-1111 为自身接口 VBDIF10 的 MAC-ADDR,此时需要执行 L3 查表转发;
SW3 查找路由表,发现 DST0IP-ADDR=192.168.2.1,与本地接口 VBDIF20 产生的直连路由相匹配,查找 ARP 表项确定报文目的 MAC,再查找 MAC-ADDR-TAB 确定报文的出接口。SW3 中前往 192.168.2.1 所对应 MAC 地址的出接口为远端 VTEP 2.2.2.2,将报文加上 VXLAN 封装,送往 SW2;
SW2 收到报文后,解封 VXLAN 报文,发现 DST-MAC-ADDR 并非自身任何接口的 MAC 地址,执行 L2 查表转发,依据 MAC 地址表将报文从本地接口转发出去;