作者简介:张磊,思科原厂8年多technical consulting engineer,精通思科数据中心/园区网产品及技术;精通SAN网络架构及产品;熟悉广域网产品及技术。
本文转载自公众号 “网技杂谈”
在如今的网络世界,如果你还不知道VXLAN那么你就真的是out了。。。不管是各个厂商,还是各个论坛,都会或多或少的有一些VXLAN的文章,谈主也赶个时髦整理一些以前学习过的VXLAN知识。Ok,第一篇开始~
一、什么是VXLAN
传统的802.1Q VLAN 标识符只有12 Bits,12 Bits表示最大可以有4096个唯一的二层网络分段。VXLAN扩展至了24 Bits,24 Bits表示最大可以有1600万个唯一的二层网络分段。
在虚拟化大量应用的今天,如果仍然使用802.1Q VLAN,那么VM 移动会被限制在本VLAN。使用VXLAN 封装,原始数据帧会被封装成MAC in UDP,这样,就允许二层网络连接跨越三层路由网络。
同时,保证VM迁移前后的IP地址、MAC地址不变。PS:本篇还讲不到,敬请期待后续~
二、VXLAN 帧格式
从上图可知,
1、除原始数据帧外,外层头部需要消耗额外Bytes(上图几个header相加即可)。PS:如果有需要,我们就需要修改交换机接口MTU以适应VXLAN数据包,看具体业务包大小。
2、UDP 源端口:VTEP设备动态分配的。通过内层头部的L2/L3/L4信息做Hash计算得出。
3、UDP目的端口:固定的使用4789。
4、Outer IP:IP首部的源IP地址为源端VTEP的IP地址,目的IP地址为目的端VTEP的IP地址。
5、Outer MAC:以太帧首部的源MAC地址为源端VTEP的MAC地址,目的MAC地址为到达目的端VTEP的下一跳设备的MAC地址。
来,看一个真实的VXLAN封装的Ping包:
三、Underlay 和 Overlay
1、Underlay如下图:
Underlay:可路由的IP网络;灵活的拓扑;推荐使用具备冗余路径的网络,利用ECMP实现负载均衡;支持任何路由协议—-OSFP, EIGRP, IS-IS, BGP等;
2、Overlay如下图:
Overlay,简言之就是一个VTEP to VTEP的隧道。
四、什么是VTEP
顾名思义,VTEP (Vlan Tunnel EndPoint),即Vlan隧道终结点。VTEP用于VXLAN的封装、解封装。同时,每一个VTEP都用两个接口,一个是用于本地Lan网络桥接转发;另一个是一个IP接口,用于连接transit网络。
举个例子,当VLAN100数据包通过本地Lan接口发送至VTEP,首先会映射VXLAN ID 1001。在这之后,VTEP根据原始数据包的目的MAC地址和刚刚转换获得的VXLAN ID,在VTEP L2 Table中查找对应的Remote VTEP,如果能找到,就原始的Ethernet Frame封装成VXLAN数据包,再通过IP接口发送出去。对端VTEP的IP接口收到了VXLAN数据包,解封装获得原始的Ethernet Frame,再将VXLAN ID于VLAN ID做映射,加入VLAN 100的信息,最后数据包再通过本地Lan发送出去。这样,两个VTEP下的VLAN 100网络相当于是连通的。(注:虽然这里都是VLAN 100,但是实际上两个VTEP下对同一个VXLAN ID对应的VLAN ID可以不一样)原始的Ethernet Frame被封装成了一个MAC in UDP包,数据的传输变成了VTEP之间的传输,VTEP之间可以是二层网络,三层网络,甚至更复杂,但是这对VLAN 100是透明的。
五、Flood and Learn机制
1、终端A要请求终端B的ARP
2、该ARP包到达VTEP-1,VTEP-1对其进行封装:依次为VXLAN头,UDP头,外层IP头(源IP为VTEP-1,目的IP为Underlay组播组IP),外层MAC头(源MAC为VTEP-1,目的MAC为组播组MAC)。
3、该包被送至所有其他VTEP节点,这些VTEP节点收到后进行解封装,从而得到最原始的ARP request包。
4、紧接着,这些VTEP将ARP request发送至本地Lan网络。如果被请求的终端B不在本地Lan网络,则该包被本地终端设备丢弃(如VTEP-3所连接的终端设备);如果被请求的终端B在本地Lan网络,则终端B收到该ARP request并回应ARP reply至本地VTEP-2节点。
5、连接终端B的VTEP-2节点收到该ARP reply后,进行封装:依次为VXLAN头,UDP头,外层IP头(源IP为VTEP-2,目的IP为VTEP-1),外层MAC头(源MAC为VTEP-2,目的MAC为VTEP-1)。
6、VTEP-1收到该包后,进行解封装后,得到原始的ARP reply,将该ARP reply发送给终端A;同时,通过外层头信息,VTEP-1也学习到了VTEP-2的IP以及终端B的MAC,从而构建了VXLAN ID Remote VTEP IP Remote MAC的映射表。
7、基于VTEP-1和VTEP-2上的映射信息,以及利用VXLAN隧道,实现终端A和B的后续单播转发。
8、VTEP-1可以选择性地为IP-B的后续ARP请求执行代理ARP,以减少传输网络上的泛洪。
上边啰嗦的说了这么多Flood and Learn的过程,燃鹅,这种方式已经甚少被使用了,因为该机制有其自身的不可避免的缺点。当然,我们还是要感谢Flood and Learn,该机制为最早的VXLAN转发提供了可能。
那么,现在都是用的什么呢?—- BGP EV**!
关于BGP EV**我们下篇再谈~先剧透一下EV** Types:
EV** Type 2:MAC/IP路由。通过Type-2路由将主机MAC/IP信息传递至远端VTEP。
EV** Type 3:Inclusive Multicast路由。该类路由在VXLAN控制平面中用于VTEP的自动发现和VXLAN隧道的动态建立。作为BGP EV**的对等体的VTEP,通过Inclusive Multicast路由互相传递二层VNI和VTEP IP地址信息。其中,【Originating Router IP Address】字段为本端VTEP IP。如果对端VTEP IP是三层路由可达,则建立一条VXLAN隧道。
EV** Type 5:IP prefix。有一种场景会用到Type-5,即Underlay与Overlay互通的场景。通过Type-5来传递IP前缀路由。当外部路由进入Border后,Border会通过Type-5类路由同步到VXLAN网络里面,从而实现VXLAN网络中的主机可以访问外部网络。