overlay網(wǎng)絡(luò)技術(shù)之VXLAN詳解
作為網(wǎng)絡(luò)虛擬化的重要技術(shù),VXLAN備受關(guān)注,該協(xié)議是如何運(yùn)作的?如何通過數(shù)據(jù)與控制層面的分離實(shí)現(xiàn)SDN網(wǎng)絡(luò)?如何部署?本博文將為您詳細(xì)介紹...
一 . 為什么需要Vxlan
1. vlan的數(shù)量限制
4096個(gè)vlan遠(yuǎn)不能滿足大規(guī)模云計(jì)算數(shù)據(jù)中心的需求
2. 物理網(wǎng)絡(luò)基礎(chǔ)設(shè)施的限制
基于IP子網(wǎng)的區(qū)域劃分限制了需要二層網(wǎng)絡(luò)連通性的應(yīng)用負(fù)載的部署
3. TOR交換機(jī)MAC表耗盡
虛擬化以及東西向流量導(dǎo)致更多的MAC表項(xiàng)
4. 多租戶場(chǎng)景
IP地址重疊?
二. 什么是Vxlan
1. Vxlan報(bào)文
vxlan(virtual Extensible LAN)虛擬可擴(kuò)展局域網(wǎng),是一種overlay的網(wǎng)絡(luò)技術(shù),使用MAC in UDP的方法進(jìn)行封裝,共50字節(jié)的封裝報(bào)文頭。具體的報(bào)文格式如下:
(1) vxlan header
共計(jì)8個(gè)字節(jié),目前使用的是Flags中的一個(gè)8bit的標(biāo)識(shí)位和24bit的VNI(Vxlan Network identifier),其余部分沒有定義,但是在使用的時(shí)候必須設(shè)置為0x0000。
(2) 外層的UDP報(bào)頭
目的端口使用4798,但是可以根據(jù)需要進(jìn)行修改。同事UDP的校驗(yàn)和必須設(shè)置成全0。
(3) IP報(bào)文頭
目的IP地址可以是單播地址,也可以是多播地址。單播情況下,目的IP地址是Vxlan Tunnel End Point(VTEP)的IP地址。在多播情況下引入VXLAN管理層,利用VNI和IP多播組的映射來確定VTEPs。
protocol:設(shè)置值為0x11,顯示說明這是UDP數(shù)據(jù)包
Source ip: 源vTEP_IP;
Destination ip: 目的VTEP IP。
(4) Ethernet Header
Destination Address:目的VTEP的Mac 地址,即為本地下一跳的地址(通常是網(wǎng)關(guān)Mac 地址);
VLAN: VLAN Type被設(shè)置為0x8100, 并可以設(shè)置Vlan Id tag(這就是vxlan的vlan 標(biāo)簽)。
Ethertype:設(shè)置值為0x8000,指明數(shù)據(jù)包為IPv4的。
補(bǔ)充:VTEP的作用?
用于對(duì)VXLAN報(bào)文進(jìn)行封裝/解封裝,包括ARP請(qǐng)求報(bào)文和正常的VXLAN數(shù)據(jù)報(bào)文,在一段封裝報(bào)文后通過隧道向另一端VTEP發(fā)送封裝報(bào)文,另一端VTEP接收到封裝的報(bào)文解封裝后根據(jù)封裝的MAC地址進(jìn)行裝法。VTEP可由支持VXLAN的硬件設(shè)備或軟件來實(shí)現(xiàn)。
從封裝的結(jié)構(gòu)上來看,VXLAN提供了將二層網(wǎng)絡(luò)overlay在三層網(wǎng)絡(luò)上的能力,VXLAN Header中的VNI有24個(gè)bit,數(shù)量遠(yuǎn)遠(yuǎn)大于4096,并且UDP的封裝可以穿越三層網(wǎng)絡(luò),比VLAN有更好的擴(kuò)展性。
2. Vxlan的數(shù)據(jù)和控制平面
(1) 數(shù)據(jù)平面---隧道機(jī)制
已經(jīng)知道,VTEP為虛擬機(jī)的數(shù)據(jù)包加上了層包頭,這些新的報(bào)頭之有在數(shù)據(jù)到達(dá)目的VTEP后才會(huì)被去掉。中間路徑的網(wǎng)絡(luò)設(shè)備只會(huì)根據(jù)外層包頭內(nèi)的目的地址進(jìn)行數(shù)據(jù)轉(zhuǎn)發(fā),對(duì)于轉(zhuǎn)發(fā)路徑上的網(wǎng)絡(luò)來說,一個(gè)Vxlan數(shù)據(jù)包跟一個(gè)普通IP包相比,出了個(gè)頭大一點(diǎn)外沒有區(qū)別。
由于VXLAN的數(shù)據(jù)包在整個(gè)轉(zhuǎn)發(fā)過程中保持了內(nèi)部數(shù)據(jù)的完整,因此VXLAN的數(shù)據(jù)平面是一個(gè)基于隧道的數(shù)據(jù)平面。
(2) 控制平面----改進(jìn)的二層協(xié)議
VXLAN不會(huì)在虛擬機(jī)之間維持一個(gè)長(zhǎng)連接,所以VXLAN需要一個(gè)控制平面來記錄對(duì)端地址可達(dá)情況。控制平面的表為(VNI,內(nèi)層MAC,外層vtep_ip)。Vxlan學(xué)習(xí)地址的時(shí)候仍然保存著二層協(xié)議的特征,節(jié)點(diǎn)之間不會(huì)周期性的交換各自的路由表,對(duì)于不認(rèn)識(shí)的MAC地址,VXLAN依靠組播來獲取路徑信息(如果有SDN Controller,可以向SDN單播獲取)。
另一方面,VXLAN還有自學(xué)習(xí)的功能,當(dāng)VTEP收到一個(gè)UDP數(shù)據(jù)報(bào)后,會(huì)檢查自己是否收到過這個(gè)虛擬機(jī)的數(shù)據(jù),如果沒有,VTEP就會(huì)記錄源vni/源外層ip/源內(nèi)層mac對(duì)應(yīng)關(guān)系,避免組播學(xué)習(xí)。
三. VxlanARP請(qǐng)求
(1) vxlan初始化
VM1和VM2連接到VXLAN網(wǎng)絡(luò)(VNI)100,兩個(gè)VXLAN主機(jī)加入IP多播組239.119.1.1
(2) ARP請(qǐng)求
1) VM1以廣播的形式發(fā)送ARP請(qǐng)求;
2) VTEP1封裝報(bào)文。打上VXLAN標(biāo)識(shí)為100,外層IP頭DA為IP多播組(239.119.1.1),SA為IP_VTEP1.
3) VTEP1在多播組內(nèi)進(jìn)行多播;
4) VTEP2解析接收到多播報(bào)文。填寫流表(VNI, 內(nèi)層mac地址,外層Ip地址),并在本地VXLAN標(biāo)識(shí)為100的范圍內(nèi)
廣播(是VXLAN的用武之地)。
5) VM2對(duì)接收到的ARP請(qǐng)求進(jìn)行響應(yīng);
(3) ARP應(yīng)答
1) VM2準(zhǔn)備ARP響應(yīng)報(bào)文后向VM1發(fā)送響應(yīng)報(bào)文
2)VTEP2接收到VM2的響應(yīng)報(bào)文后把它封裝在ip單播報(bào)文中(VXLAN標(biāo)識(shí)依然為100),然 后向VM1發(fā)送單播
3)VTEP1接收到單播報(bào)文后,學(xué)習(xí)內(nèi)層MAC到外層ip地址的映射,解封裝并根據(jù)被封裝內(nèi)容的目的MAC地址轉(zhuǎn)發(fā)給VM1
4)VM1接收到ARP應(yīng)答報(bào)文,ARP交互結(jié)束
四:數(shù)據(jù)傳輸
(1) ARP請(qǐng)求應(yīng)答之后,VM1知道了VM2的Mac地址,并且要向VM2通信(注意,VM1是以TCP的方法向VM2發(fā)送數(shù)據(jù)的)。
VTEP1 收到VM1發(fā)送數(shù)據(jù)包,用MAC地址從流表中檢查VM1與VM2是否屬于用一個(gè)VNI。兩個(gè)VM不但位于同一個(gè)VNI中(不在同一個(gè)VNI中出網(wǎng)關(guān)),并且VTEP1已經(jīng)知道了VM2的所有地址信息(MAC和VTEP2_IP)。VTEP1封裝新的數(shù)據(jù)包。然后交給上聯(lián)交換機(jī)。
(2) 上聯(lián)交換機(jī)收到服務(wù)器發(fā)來的UDP包,對(duì)比目的IP地址和自己的路由表,然后將數(shù)據(jù)報(bào)轉(zhuǎn)發(fā)給相應(yīng)的端口。
(3) 目的VTEP收到數(shù)據(jù)包后檢查器VNI,如果UDP報(bào)中VNI與VM2的VNI一致,則將數(shù)據(jù)包解封裝后交給VM2進(jìn)一步處理。至此一個(gè)數(shù)據(jù)包傳輸完成。整個(gè)Vxlan相關(guān)的行為(可能穿越多個(gè)網(wǎng)關(guān))對(duì)虛擬機(jī)來說是透明的,虛擬機(jī)不會(huì)感受傳輸?shù)倪^程。雖然VM1與VM2之間啟動(dòng)了TCP來傳輸數(shù)據(jù),但數(shù)據(jù)包一路上實(shí)際是以UDP的形式被轉(zhuǎn)發(fā),兩端的VTEP并不會(huì)檢查數(shù)據(jù)是否正確或者順序是否完整,所有的這些工作都是在VM1和VM2在接收到解封裝的TCP包后完成的。也就是說如果說如果被UDP封裝的是TCP連接,那么UDP和TCP將做為兩個(gè)獨(dú)立的協(xié)議棧各自工作,相互之間沒有交互。
五:Vxlan網(wǎng)關(guān)
如果需要VXLAN網(wǎng)絡(luò)和非VXLAN網(wǎng)絡(luò)連接,必須使用VXLAN網(wǎng)關(guān)才能把VXLAN網(wǎng)絡(luò)和外部網(wǎng)絡(luò)進(jìn)行橋接和完成VXLAN ID和VLAN ID之間的映射和路由,和VLAN一樣,VXLAN網(wǎng)絡(luò)之間的通信也需要三層設(shè)備的支持,即VXLAN路由的支持。同樣VXLAN網(wǎng)關(guān)可由硬件和軟件來實(shí)現(xiàn)。從封裝的結(jié)構(gòu)上來看,VXLAN提供了將二層網(wǎng)絡(luò)overlay在三層網(wǎng)絡(luò)上的能力,VXLAN Header中的VNI有24個(gè)bit,數(shù)量遠(yuǎn)遠(yuǎn)大于4096,并且UDP的封裝可以穿越三層網(wǎng)絡(luò),比VLAN有更好的擴(kuò)展性。
六.部署
(1) 純VXLAN部署場(chǎng)景
對(duì)于連接到VXLAN內(nèi)的虛擬機(jī),由于虛擬機(jī)的VLAN信息不再作為轉(zhuǎn)發(fā)的依據(jù),虛擬機(jī)的遷移也就不再受三層網(wǎng)關(guān)的限制,可以實(shí)現(xiàn)跨越三層網(wǎng)關(guān)的遷移。
(2) VXLAN與VLAN混合部署
為了實(shí)現(xiàn)VLAN和VXLAN之間互通,VXLAN定義了VXLAN網(wǎng)關(guān)。VXLAN網(wǎng)關(guān)上同時(shí)存在兩種類型的端口:VXLAN端口和普通端口。
當(dāng)收到從VXLAN網(wǎng)絡(luò)到普通網(wǎng)絡(luò)的數(shù)據(jù)時(shí),VXLAN網(wǎng)關(guān)去掉外層包頭,根據(jù)內(nèi)層的原始幀頭轉(zhuǎn)發(fā)到普通端口上;當(dāng)有數(shù)據(jù)從普通網(wǎng)絡(luò)進(jìn)入到VXLAN網(wǎng)絡(luò)時(shí),VXLAN網(wǎng)關(guān)負(fù)責(zé)打上外層包頭,并根據(jù)原始VLAN ID對(duì)應(yīng)到一個(gè)VNI,同時(shí)去掉內(nèi)層包頭的VLAN ID信息。相應(yīng)的如果VXLAN網(wǎng)關(guān)發(fā)現(xiàn)一個(gè)VXLAN包的內(nèi)層幀頭上還帶有原始的二層VLAN ID,會(huì)直接將這個(gè)包丟棄。
之所以這樣,是VLAN ID是一個(gè)本地信息,僅僅在一個(gè)地方的二層網(wǎng)絡(luò)上其作用,VXLAN是隧道機(jī)制,并不依賴VLAN ID進(jìn)行轉(zhuǎn)發(fā),也無法檢查VLAN ID正確與否。因此,VXLAN網(wǎng)關(guān)連接傳統(tǒng)網(wǎng)絡(luò)的端口必須配置ACCESS口,不能啟用TRUNK口。
原文鏈接:http://blog.csdn.net/freezgw1985/article/details/16354897