VXLAN是一種將二層報(bào)文用三層協(xié)議進(jìn)行封裝的技術(shù),可以對(duì)二層網(wǎng)絡(luò)在三層范圍進(jìn)行擴(kuò)展。每個(gè)覆蓋域被稱(chēng)為VXLAN segment,它的ID是由位于VXLAN數(shù)據(jù)包頭中的VNI標(biāo)識(shí)來(lái)區(qū)分的。VNI字段包含24bits,故segments最大數(shù)量為2的24次方,并且只有在相同的VXLAN segments才能通信。
它是一種在UDP中封裝MAC的簡(jiǎn)單機(jī)制,可以創(chuàng)建跨多個(gè)物理IP子網(wǎng)的虛擬2層子網(wǎng)(也就是在三層子網(wǎng)中跑2層)
其實(shí)EtherIP和GRE也可以實(shí)現(xiàn)在IP中封裝MAC,但是它們都無(wú)法做到VLAN邏輯標(biāo)記
根據(jù)VXLAN的封包模式,也可以將它看作一種隧道模式的網(wǎng)絡(luò)覆蓋技術(shù),這種隧道是無(wú)狀態(tài)的。隧道端點(diǎn)VTEP一般位于擁有虛機(jī)的hypervisor宿主機(jī)中,因此VNI和VXLAN隧道只有VTEP可見(jiàn),對(duì)于虛機(jī)來(lái)說(shuō)是透明的。那么不同的VXLAN segments就可以有相同的MAC地址的虛機(jī)。并且VTEP也可以位于物理交換機(jī)或物理主機(jī)中,甚至可以用軟件來(lái)定義
VTEP之間完全是通過(guò)L3協(xié)議交互的,也就意味著VTEP之間可以由Router相連,而非類(lèi)似于GRE封裝模式的固定端到端隧道連接。
實(shí)例:

VM1要向VM2發(fā)送數(shù)據(jù)前,必須要知道VM2的MAC地址,其獲取過(guò)程如下:
1、VM1發(fā)送ARP請(qǐng)求包,請(qǐng)求192.168.0.101[VM2_IP]的MAC地址;
2、ARP請(qǐng)求包被VTEP1封裝成多播包,發(fā)給VNI=864的多播組;
3、所有的VTEP接收此多播包,并添加(VNI–VTEP1–VM1_MAC?Address)映射關(guān)系到自己的VXLAN表中;
4、目的主機(jī)上的VTEP2接收到多播包后將其解開(kāi),并向本主機(jī)上VNI=864的所有虛擬機(jī)發(fā)送廣播包;
5、VM2看到了ARP包后,回應(yīng)了自己的MAC地址;
6、VTEP2再次封裝回應(yīng)的單播包,通過(guò)路由發(fā)給VTEP1;
7、VTEP1解包,并將包傳給VM1,則最終獲取了VM2的MAC地址;
8、VTEP1將(VNI–VTEP2–VM2_MAC?Address)映射關(guān)系添加到自己的VXLAN表中;
VM1獲知VM2的MAC地址后,發(fā)送數(shù)據(jù)包,過(guò)程如下:
1、??VM1發(fā)送IP數(shù)據(jù)包到VM2,即192.168.0.100?到?192.168.0.101;
2、??VTEP1查找自己的VXLAN表知道要發(fā)給VTEP2,然后依次封裝以下數(shù)據(jù)包頭;
????????????a)VXLAN包頭,VNI=864;
????????????b)標(biāo)準(zhǔn)UDP包頭,校驗(yàn)和checksum為0x0000,目標(biāo)端口號(hào)4789;
????????????c)標(biāo)準(zhǔn)IP包頭,目標(biāo)地址為VTEP2的IP地址,協(xié)議號(hào)設(shè)為0x11表面為UDP包。
????????????d)標(biāo)準(zhǔn)MAC數(shù)據(jù)包,目標(biāo)地址為下一跳設(shè)備的MAC地址00:10:11:FE:D8:D2,可路由到目標(biāo)隧道端VTEP2。
3、??VTEP2接收數(shù)據(jù)包,根據(jù)UDP的destination端口找到VXLAN數(shù)據(jù)包。接著查找所有所在VXLAN的VNI為864的端口組,找到VM2的
4、??VM2接收并處理數(shù)據(jù)包,拿到Payload數(shù)據(jù)。