小挨踢gril▲网络工程师你真的理解VxLAN技术吗?(原来二层网络可以这么玩)( 三 )


displayvxlanvni5000verbose
BDID:10
State:up
NVE:288
Source:1.1.1.1
UDPPort:4789
BUMMode:head-end
GroupAddress:-
PeerList:2.2.2.22.2.2.3//同一大二层广播域的范围,属于同一个BD10域的范围 。
//当VTEP收到BUM(Broadcast&Unknown-unicast&Multicast , 广播&未知单播&组播)报文时 , 会将报文复制并发送给PeerList中所列的所有对端VTEP(这就好比广播报文在VLAN内广播) 。
//这张表也被称为“头端复制列表” 。 当VTEP收到已知单播报文时 , 会根据VTEP上的MAC表来确定报文要从哪条VXLAN隧道走 。 而此时PeerList中所列的对端 , 则充当了MAC表中“出接口”的角色 。
子网VM互通
小挨踢gril▲网络工程师你真的理解VxLAN技术吗?(原来二层网络可以这么玩)
文章图片
IP_A、IP_B与IP_C属于同一子网需要互通 。
1、同子网VM互通组网图
ARP请求报文转发流程
小挨踢gril▲网络工程师你真的理解VxLAN技术吗?(原来二层网络可以这么玩)
文章图片
ARP广播去获取对端MAC信息
ARP应答报文转发流程
小挨踢gril▲网络工程师你真的理解VxLAN技术吗?(原来二层网络可以这么玩)
文章图片
arp应答
2、不同子网互通(借助三层网关 , 网关不在一个设备还得进行路由)
小挨踢gril▲网络工程师你真的理解VxLAN技术吗?(原来二层网络可以这么玩)
文章图片
这里三层网关在一台设备上 。
不同子网VM互通报文转发流程:
小挨踢gril▲网络工程师你真的理解VxLAN技术吗?(原来二层网络可以这么玩)
文章图片
封装外层MAC及外层IP包头
1、VM_A先将数据报文发送给网关 。 报文的源MAC为MAC_A , 目的MAC为网关BDIF10的MAC_10 , 源IP地址为IP_A , 目的IP为IP_B 。
2、VTEP_1收到数据报文后 , 识别此报文所属的VNI(VNI5000) , 并根据MAC表项对报文进行封装 。 可以看到 , 这里封装的外层源IP地址为本地VTEP的IP地址(IP_1) , 外层目的IP地址为对端VTEP的IP地址(IP_3);外层源MAC地址为本地VTEP的MAC地址(MAC_1) , 而外层目的MAC地址为去往目的IP的网络中下一跳设备的MAC地址 。 封装后的报文 , 根据外层MAC和IP信息 , 在IP网络中进行传输 , 直至到达对端VTEP 。
3、报文进入VTEP_3 , VTEP_3对报文进行解封装 , 得到VM_A发送的原始报文 。
4、VTEP_3发现该报文的目的MAC为本机BDIF10接口的MAC , 而目的IP地址为IP_B(10.1.20.1) , 所以会根据路由表查找到IP_B的下一跳 。
5、发现下一跳为10.1.20.10 , 出接口为BDIF20 。 此时VTEP_3查询ARP表项 , 并将原始报文的源MAC修改为BDIF20接口的MAC(MAC_20) , 将目的MAC修改为VM_B的MAC(MAC_B) 。
6、报文到BDIF20接口时 , 识别到需要进入VXLAN隧道(VNI6000) , 所以根据MAC表对报文进行封装 。 这里封装的外层源IP地址为本地VTEP的IP地址(IP_3) , 外层目的IP地址为对端VTEP的IP地址(IP_2);外层源MAC地址为本地VTEP的MAC地址(MAC_3) , 而外层目的MAC地址为去往目的IP的网络中下一跳设备的MAC地址 。 封装后的报文 , 根据外层MAC和IP信息 , 在IP网络中进行传输 , 直至到达对端VTEP 。
7、报文到达VTEP_2后 , VTEP_2对报文进行解封装 , 得到内层的数据报文 , 并将其发送给VM_B 。
同理VM_B回应VM_A的流程与上述过程类似 。
VXLAN网络与非VXLAN网络之间的互通 , 当然也得借助于三层网关(SVI接口) 。 实现与上图的不同之处在于:报文在VXLAN网络侧会进行封装 , 而在非VXLAN网络侧不需要进行封装 。 报文从VXLAN侧进入网关并解封装后 , 就按照普通的单播报文发送方式进行转发 。


推荐阅读