VXLAN技術(shù)介紹:三層的網(wǎng)絡(luò)來(lái)搭建虛擬的二層網(wǎng)絡(luò)
一、VXLAN概述
1. 什么是 VXLAN
VXLAN(Virtual Extensible LAN)虛擬可擴(kuò)展局域網(wǎng),是一種 overlay 網(wǎng)絡(luò)技術(shù),將原始2層以太網(wǎng)幀進(jìn)行UDP封裝 (MAC-in-UDP),增加8字節(jié) VXLAN頭部,8字節(jié) UDP頭部, 20字節(jié) IP 頭部和14字節(jié)以太網(wǎng)頭部,共50字節(jié)。
2. VXLAN優(yōu)點(diǎn)
VXLAN與VLAN相比能夠提供更好的擴(kuò)展性和靈活性,主要有以下特點(diǎn):
- 應(yīng)用靈活部署: 通過VXLAN封裝后的2層以太網(wǎng)幀可以跨3層網(wǎng)絡(luò)邊界,讓組網(wǎng)以及應(yīng)用部署變得更加靈活,同時(shí)解決多租戶網(wǎng)絡(luò)環(huán)境中IP地址沖突問題。
- 更好的擴(kuò)展性: 傳統(tǒng) VLANID字段為12-bit,VLAN數(shù)量***為4096;VXLAN使用24-bit VNID (VXLAN network identifier),***支持 16,000,000 邏輯網(wǎng)絡(luò)。
- 提高網(wǎng)絡(luò)利用率: 傳統(tǒng)以太網(wǎng)使用 STP預(yù)防環(huán)路, STP導(dǎo)致網(wǎng)絡(luò)冗余路徑處于阻塞狀態(tài), VXLAN報(bào)文基于 3層 IP報(bào)頭傳輸,能有效利用網(wǎng)絡(luò)路徑,支持 ECMP(equal-cost multipath )和鏈路聚合協(xié)議。
(1) 應(yīng)用靈活部署
如圖 1-1 所示,在 VXLAN環(huán)境中應(yīng)用部署不受物理位置和3層網(wǎng)絡(luò)邊界限制,例如某應(yīng)用的地址段為 192.168.1.0/24,在傳統(tǒng)網(wǎng)絡(luò)中所有該應(yīng)用服務(wù)器或者虛擬機(jī)必須在同一 3層網(wǎng)絡(luò)內(nèi)部署,否則會(huì)產(chǎn)生路由或者地址沖突問題。
(2) 更好的擴(kuò)展性
傳統(tǒng)網(wǎng)絡(luò)通過 VLAN將客戶網(wǎng)絡(luò)邏輯隔離, VLAN ID字段為 12-bit ,VLAN數(shù)量***為 4096;VXLAN使用 24-bit VNID ( VXLAN network identifier ),***支持16,000,000 邏輯網(wǎng)絡(luò),擴(kuò)展性得到極大增強(qiáng)。
(3) 提高網(wǎng)絡(luò)利用率
圖 1-3 使用 VXLAN 后使用三層接口互聯(lián)消除生成樹阻塞端口
傳統(tǒng)以太網(wǎng)幀無(wú)法穿越三層網(wǎng)絡(luò),部署 VXLAN后, VTEP之間數(shù)據(jù)基于三層尋址,網(wǎng)絡(luò)互聯(lián)接口不再是二層接口, 可以將交換機(jī)之間互聯(lián)接口部署為三層模式,消除生成樹阻塞端口,提高網(wǎng)絡(luò)利用率,支持 ECMP(equal-cost multipath )和鏈路聚合協(xié)議。
二、VXLAN術(shù)語(yǔ)
1. VTEP
VXLAN
Tunnel Endpoint (VTEP)。VXLAN使用VTEP設(shè)備對(duì)VXLAN報(bào)文進(jìn)行封裝與解封裝,包括ARP請(qǐng)求報(bào)文和正常的VXLAN數(shù)據(jù)報(bào)文,VTEP將原始以太網(wǎng)幀通過VXLAN封裝后發(fā)送至對(duì)端 VTEP設(shè)備,對(duì)端VTEP接收到 VXLAN報(bào)文后解封裝然后根據(jù)原始 MAC進(jìn)行轉(zhuǎn)發(fā),VTEP可以是物理交換機(jī)、物理服務(wù)器或者其他支持 VXLAN的硬件設(shè)備或軟件來(lái)實(shí)現(xiàn)。
2. VNI
Virtual Network ID ( VNI), VNI封裝在 VXLAN頭部,共 24-bit ,***支持16,000,000 邏輯網(wǎng)絡(luò)。
3. VXLAN 網(wǎng)關(guān)
VXLAN網(wǎng)關(guān)用于連接 VXLAN網(wǎng)絡(luò)和傳統(tǒng) VLAN網(wǎng)絡(luò),VXLAN網(wǎng)關(guān)實(shí)現(xiàn) VNI和VLAN ID 之間的映射, VXLAN 網(wǎng)關(guān)實(shí)際上也是一臺(tái) VTEP設(shè)備。
4. 組播組
VTEP設(shè)備要加入相同的組播組,主要用于控制平面地址學(xué)習(xí)。
三、VXLAN封裝
VXLAN使用 UDP封裝完整的以太網(wǎng)幀 (MAC-in-UDP),共 50 字節(jié)的封裝報(bào)文頭。具體的報(bào)文格式如下:
1. Inner MAC
Inner MAC,內(nèi)層 MAC是原始以太網(wǎng)幀的 MAC地址。
2. VXLAN Header
共 8 個(gè)字節(jié),目前使用的是 Flags 中的一個(gè) 8bit 的標(biāo)識(shí)位和 24bit 的VNI(Vxlan Network identifier) ,其余部分沒有定義,但是在使用的時(shí)候必須設(shè)置為 0x0000。
3. Outer UDP Header
共8個(gè)字節(jié),IANA分配的標(biāo)準(zhǔn)目的端口使用 4798,但是各廠商可以根據(jù)需要進(jìn)行修改,同時(shí)UDP的校驗(yàn)和必須設(shè)置成全 0。
4. Outer IP Header
共20個(gè)字節(jié),目的IP地址可以是單播地址,也可以是多播地址。 單播情況下,目的IP地址是目的VTEP的 IP地址;當(dāng)用于VXLAN控制平面時(shí)會(huì)使用多播地址。
Outer IP: 外層IP地址是經(jīng)過VTEP封裝后的3層IP地址,源IP是本端VTEP設(shè)備IP,用于控制平面時(shí)目的 IP 可以是多播地址,用于轉(zhuǎn)發(fā)平面時(shí)目的 IP是遠(yuǎn)端 VTEP設(shè)備 IP。
5. Outer Ethernet Header
共計(jì)14個(gè)字節(jié),外層以太網(wǎng)幀頭部。Outer MAC,外層 MAC是經(jīng)過 VTEP封裝后的二層 MAC,源 MAC是本端 VTEP設(shè)備MAC,目的 MAC可以是遠(yuǎn)端 VTEP設(shè)備MAC或者傳輸路徑中間 3 層網(wǎng)絡(luò)設(shè)備 MAC。
四、VXLAN數(shù)據(jù)轉(zhuǎn)發(fā)
1. 控制平面
在 VXLAN的實(shí)現(xiàn)中, 當(dāng)通過組播實(shí)現(xiàn)控制平面路徑發(fā)現(xiàn)時(shí), VTEP設(shè)備之間使用無(wú)狀態(tài) tunnel ,VTEP設(shè)備之間不會(huì)維持狀態(tài)化的長(zhǎng)連接。 VXLAN需要通過控制平面學(xué)習(xí)遠(yuǎn)端設(shè)備地址信息, 在本地構(gòu)建控制平面表項(xiàng)。 控制平面表項(xiàng)由 VNI、Inner Source MAC 、Outer Source IP 三元組組成。
2. 轉(zhuǎn)發(fā)平面
控制平面學(xué)習(xí)地址映射信息后, 轉(zhuǎn)發(fā)平面負(fù)責(zé)實(shí)際數(shù)據(jù)的轉(zhuǎn)發(fā)。 VTEP為原始數(shù)據(jù)幀增加 UDP報(bào)頭,新的報(bào)頭到達(dá)目的 VTEP后才會(huì)被去掉,中間路徑的網(wǎng)絡(luò)設(shè)備只會(huì)根據(jù)外層包頭內(nèi)的目的地址進(jìn)行數(shù)據(jù)轉(zhuǎn)發(fā)。
3. VXLAN ARP請(qǐng)求
如上圖所示,終端設(shè)備 A需要和終端設(shè)備 B通信, ARP請(qǐng)求過程如下:
- 終端設(shè)備 A 發(fā)送 ARP請(qǐng)求,請(qǐng)求終端設(shè)備 B 的 MAC地址;
- VTEP-1收到終端設(shè)備 A發(fā)送的 ARP請(qǐng)求,此時(shí) VTEP-1還沒有終端設(shè)備 B對(duì)應(yīng)的地址映射表項(xiàng), VTEP-1將 ARP請(qǐng)求進(jìn)行 VXLAN封裝, VNI 設(shè)置為10,outer-src-ip 是 VTEP-1的 IP ,outer-dst-ip 是加入的組播組地址,封裝完成后轉(zhuǎn)發(fā)至 VXLAN組播組;
- VTEP-2、VTEP3加入相同的組播組,所有組成員都會(huì)收到 VTEP-1發(fā)送的組播報(bào)文,解封裝后檢查 VNI 與本地 VNI 是否匹配,如匹配將 ARP請(qǐng)求發(fā)送至本地網(wǎng)絡(luò),同時(shí)記錄 VNI、inner MAC、outer IP 的對(duì)應(yīng)關(guān)系,構(gòu)建控制平面地址映射表項(xiàng)。如 VNI 不匹配則丟棄數(shù)據(jù)包。
- 終端設(shè)備 B 收到 ARP請(qǐng)求后以單播方式發(fā)送 ARP響應(yīng);
- VTEP-2收到終端設(shè)備 B 的 ARP響應(yīng)后進(jìn)行 VXLAN封裝,此時(shí) VTEP-2已經(jīng)構(gòu)建控制平面地址映射表項(xiàng),通過 VXLAN封裝后以單播方式發(fā)送。Outer-src-ip 是 VTEP-2的 IP 地址,outer-dst-ip 是 VTEP-1的 IP 地址;
- VTEP-1收到封裝后的 ARP響應(yīng)后,解封裝比對(duì) VNI,如匹配將 ARP響應(yīng)發(fā)送至終端設(shè)備 A,同時(shí)記錄 VNI、inner MAC、 outer IP 的對(duì)應(yīng)關(guān)系,構(gòu)建控制平面表項(xiàng);
- 此時(shí) VTEP-1、VTEP-2均已成功構(gòu)建控制平面地址映射信息,后續(xù) VXLAN數(shù)據(jù)使用單播在 VTEP-1和 VTEP-2之間傳輸。
4. VXLAN 數(shù)據(jù)傳輸
- ARP請(qǐng)求完成后,終端設(shè)備 A 向終端設(shè)備 B 發(fā)送數(shù)據(jù), VTEP-1收到數(shù)據(jù)中查找地址映射表項(xiàng),將原始數(shù)據(jù)進(jìn)行 VXLAN封裝后轉(zhuǎn)發(fā)至 VTEP-2;
- VTEP-2收到 VXLAN數(shù)據(jù)包后檢查 VNI 是否與本地 VNI 匹配, 如匹配則解封裝后將原始以太網(wǎng)幀轉(zhuǎn)發(fā)至終端設(shè)備 B。
五、VXLAN部署
六、補(bǔ)充:
- 在進(jìn)行 ARP處理時(shí),為了將廣播通過多播進(jìn)行傳輸,必須要設(shè)置VNI 到多播組的映射,這種映射屬于管理層,用于建立VTEP之間的管理通道。未知的目的 MAC(unknown MAC destination )同樣會(huì)進(jìn)行組播封裝,處理方式和廣播相同。
- VXLAN報(bào)文不能進(jìn)行分片處理,中間的設(shè)備可能會(huì)將 VXLAN報(bào)文分片,但是VTEP會(huì)將分片后的報(bào)文丟棄,為了確保 VXLAN報(bào)文不被分片處理,需要修改沿途所以設(shè)備的 MTU。RFC文檔沒有闡述為什么 VTEP必須丟棄分片后的報(bào)文。
- 在封裝和解封裝時(shí) VLAN TAG信息都會(huì)被剝離,除非另有特殊配置。