VxLAN基礎

轉自:http://blog.csdn.net/freezgw1985/article/details/16354897

一 . 為什么需要Vxlan
?
1. vlan的數量限制
? ?4096個vlan遠不能滿足大規模云計算數據中心的需求
?
2. 物理網絡基礎設施的限制
? ?基于IP子網的區域劃分限制了需要二層網絡連通性的應用負載的部署
?
3. TOR交換機MAC表耗盡
? ? 虛擬化以及東西向流量導致更多的MAC表項
?
4. 多租戶場景
? ? IP地址重疊?
二. 什么是Vxlan
?
1. Vxlan報文
? ? vxlan(virtual Extensible LAN)虛擬可擴展局域網,是一種overlay的網絡技術,使用MAC in UDP的方法進
行封裝,共50字節的封裝報文頭。具體的報文格式如下:
?
(1) vxlan header
? ? 共計8個字節,目前使用的是Flags中的一個8bit的標識位和24bit的VNI(Vxlan Network identifier),
其余部分沒有定義,但是在使用的時候必須設置為0x0000。
?
(2) 外層的UDP報頭
? ? ?目的端口使用4798,但是可以根據需要進行修改。同事UDP的校驗和必須設置成全0。
?
(3) IP報文頭
? ? ?目的IP地址可以是單播地址,也可以是多播地址。單播情況下,目的IP地址是Vxlan?Tunnel End Point
(VTEP)的IP地址。在多播情況下引入VXLAN管理層,利用VNI和IP多播組的映射來確定VTEPs。???
  • protocol:設置值為0x11,顯示說明這是UDP數據包
  • Source ip: 源vTEP_IP;
  • Destination ip: 目的VTEP IP。
(4) Ethernet Header
  • Destination Address:目的VTEP的Mac 地址,即為本地下一跳的地址(通常是網關Mac 地址);
  • VLAN: VLAN Type被設置為0x8100, 并可以設置Vlan Id tag(這就是vxlan的vlan 標簽)。
  • Ethertype:設置值為0x8000,指明數據包為IPv4的。
補充:VTEP的作用? ? ?
? ? ?用于對VXLAN報文進行封裝/解封裝,包括ARP請求報文和正常的VXLAN數據報文,在一段封裝報文
后通過隧道向另一端VTEP發送封裝報文,另一端VTEP接收到封裝的報文解封裝后根據封裝的MAC地址
進行裝法。VTEP可由支持VXLAN的硬件設備或軟件來實現。
?
? ?從封裝的結構上來看,VXLAN提供了將二層網絡overlay在三層網絡上的能力,VXLAN Header中的VNI有
24個bit,數量遠遠大于4096,并且UDP的封裝可以穿越三層網絡,比VLAN有更好的擴展性。
?
2. Vxlan的數據和控制平面
? (1) 數據平面---隧道機制
? ? ?已經知道,VTEP為虛擬機的數據包加上了層包頭,這些新的報頭之有在數據到達目的VTEP后才會被去掉。
中間路徑的網絡設備只會根據外層包頭內的目的地址進行數據轉發,對于轉發路徑上的網絡來說,一個Vxlan
數據包跟一個普通IP包相比,出了個頭大一點外沒有區別。
? ? ?由于VXLAN的數據包在整個轉發過程中保持了內部數據的完整,因此VXLAN的數據平面是一個基于隧道
的數據平面。
?
(2) 控制平面----改進的二層協議
? ? ?VXLAN不會在虛擬機之間維持一個長連接,所以VXLAN需要一個控制平面來記錄對端地址可達情況。控制
平面的表為(VNI,內層MAC,外層vtep_ip)。Vxlan學習地址的時候仍然保存著二層協議的特征,節點之間不會
周期性的交換各自的路由表,對于不認識的MAC地址,VXLAN依靠組播來獲取路徑信息(如果有SDN Controller,
可以向SDN單播獲取)。
? ? 另一方面,VXLAN還有自學習的功能,當VTEP收到一個UDP數據報后,會檢查自己是否收到過這個虛擬機的
數據,如果沒有,VTEP就會記錄源vni/源外層ip/源內層mac對應關系,避免組播學習。
?
?
3. VxlanARP請求
?
(1) vxlan初始化
?
?VM1和VM2連接到VXLAN網絡(VNI)100,兩個VXLAN主機加入IP多播組239.119.1.1
?
(2) ARP請求
?
? ?1) VM1以廣播的形式發送ARP請求;
? ?2) VTEP1封裝報文。打上VXLAN標識為100,外層IP頭DA為IP多播組(239.119.1.1),SA為IP_VTEP1.
? ?3) VTEP1在多播組內進行多播;
? ?4) VTEP2解析接收到多播報文。填寫流表(VNI, 內層mac地址,外層Ip地址),并在本地VXLAN標識為100的范圍內
? ? ? ?廣播(是VXLAN的用武之地)。
? ?5) VM2對接收到的ARP請求進行響應;
?
(3) ARP應答

??1) VM2準備ARP響應報文后向VM1發送響應報文

? ? ? ?2)VTEP2接收到VM2的響應報文后把它封裝在ip單播報文中(VXLAN標識依然為100),然 后向VM1發送單播

? ? ? ?3)VTEP1接收到單播報文后,學習內層MAC到外層ip地址的映射,解封裝并根據被封裝內容的目的MAC地址轉發給VM1

? ? ? ?4)VM1接收到ARP應答報文,ARP交互結束
?
4 ?數據傳輸
? ? (1) ?ARP請求應答之后,VM1知道了VM2的Mac地址,并且要向VM2通信(注意,VM1是以TCP的方法向VM2發送數據的)。
VTEP1 收到VM1發送數據包,用MAC地址從流表中檢查VM1與VM2是否屬于用一個VNI。兩個VM不但位于同一個VNI中
(不在同一個VNI中出網關),并且VTEP1已經知道了VM2的所有地址信息(MAC和VTEP2_IP)。VTEP1封裝新的數據包。然后
交給上聯交換機。
? ?(2) 上聯交換機收到服務器發來的UDP包,對比目的IP地址和自己的路由表,然后將數據報轉發給相應的端口。
? ?(3) 目的VTEP收到數據包后檢查器VNI,如果UDP報中VNI與VM2的VNI一致,則將數據包解封裝后交給VM2進一步處理。至此
一個數據包傳輸完成。整個Vxlan相關的行為(可能穿越多個網關)對虛擬機來說是透明的,虛擬機不會感受傳輸的過程。
?
? ? 雖然VM1與VM2之間啟動了TCP來傳輸數據,但數據包一路上實際是以UDP的形式被轉發,兩端的VTEP并不會檢查數據是否
正確或者順序是否完整,所有的這些工作都是在VM1和VM2在接收到解封裝的TCP包后完成的。也就是說如果說如果被UDP封裝
的是TCP連接,那么UDP和TCP將做為兩個獨立的協議棧各自工作,相互之間沒有交互。
? ??
5?Vxlan網關
?如果需要VXLAN網絡和非VXLAN網絡連接,必須使用VXLAN網關才能把VXLAN網絡和外部網絡進行橋接和
完成VXLAN ID和VLAN ID之間的映射和路由,和VLAN一樣,VXLAN網絡之間的通信也需要三層設備的支持,
即VXLAN路由的支持。同樣VXLAN網關可由硬件和軟件來實現。
?
?從封裝的結構上來看,VXLAN提供了將二層網絡overlay在三層網絡上的能力,VXLAN Header中的VNI有
24個bit,數量遠遠大于4096,并且UDP的封裝可以穿越三層網絡,比VLAN有更好的擴展性。
?
6.部署
(1) 純VXLAN部署場景
? 對于連接到VXLAN內的虛擬機,由于虛擬機的VLAN信息不再作為轉發的依據,虛擬機的遷移也就
不再受三層網關的限制,可以實現跨越三層網關的遷移。
?
?
(2) VXLAN與VLAN混合部署
?
? ?為了實現VLAN和VXLAN之間互通,VXLAN定義了VXLAN網關。VXLAN網關上同時存在兩種類型的端口:VXLAN端口
和普通端口。
? ?當收到從VXLAN網絡到普通網絡的數據時,VXLAN網關去掉外層包頭,根據內層的原始幀頭轉發到普通端口上;當有數據
從普通網絡進入到VXLAN網絡時,VXLAN網關負責打上外層包頭,并根據原始VLAN ID對應到一個VNI,同時去掉內層包頭
的VLAN ID信息。相應的如果VXLAN網關發現一個VXLAN包的內層幀頭上還帶有原始的二層VLAN ID,會直接將這個包丟棄。
之所以這樣,是VLAN ID是一個本地信息,僅僅在一個地方的二層網絡上其作用,VXLAN是隧道機制,并不依賴VLAN ID進行
轉發,也無法檢查VLAN ID正確與否。因此,VXLAN網關連接傳統網絡的端口必須配置ACCESS口,不能啟用TRUNK口。

轉載于:https://www.cnblogs.com/danbo/p/4989072.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/458651.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/458651.shtml
英文地址,請注明出處:http://en.pswp.cn/news/458651.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

find_first_of()和 find_last_of() 【獲取路徑、文件名】

string 類提供字符串處理函數,利用這些函數,程序員可以在字符串內查找字符,提取連續字符序列(稱為子串),以及在字符串中刪除和添加。我們將介紹一些主要函數。 1.函數find_first_of()和 find_last_of() 執行簡單的模式匹配&#x…

支付寶集成

memo Error Domain系統繁忙,請稍后再試 Code1000 "(null)" reslut {memo "Error Domain\U7cfb\U7edf\U7e41\U5fd9\Uff0c\U8bf7\U7a0d\U540e\U518d\U8bd5 Code1000 \"(null)\"";result "";resultStatus 4000;} 請問安裝…

servlet中實現頁面跳轉return “r:”和return “f:

servlet中實現頁面跳轉return “r:”和return “f:”的區別和作用 分享| 2015-07-28 14:22741830480 | 瀏覽 48 次Pascal2015-07-28 14:26 #知道行家專業創造價值,火熱招募中!#提問者采納熱心網友r是redirect重定向,參…

多線程編程 RW_LOCK 讀寫鎖

RW鎖 讀寫鎖,也叫共享獨占鎖 互斥量 要么是鎖住狀態,要么是不加鎖狀態,而且一次只有一個線程可以對其加鎖。 讀寫鎖可以有三種狀態,讀模式下加鎖狀態,寫模式下加鎖狀態,不加鎖狀態。一次只有一個線程可以占…

Error Domain=NSCocoaErrorDomain Code=3840 JSON text did not start with array or object and option

數據請求失敗 報錯 Error DomainNSCocoaErrorDomain Code3840 "JSON text did not start with array or object and option to allow fragments not set." UserInfo{NSDebugDescriptionJSON text did not start with array or object and option to allow fragm…

vim學習筆記(4)幫助與配置

使用幫助 在Vim中輸入命令:help,即可進入幫助界面,默認是英文,可以通過以下方式安裝中文幫助(以vimcdoc-1.9.0為例): 1、下載中文幫助的文件壓縮包 2、解壓 tar -xzvf vimcdoc-1.9.0.tar.gz 3、…

C語言程序代碼優化

我認為一個好的用于科學計算的程序代碼應該:算法漂亮精妙,程序簡潔易懂,運算快速,節省內存。這里有的地方是矛盾的,比如簡潔vs易懂,時間vs空間,找個平衡吧。目前來看時間要比空間寶貴一些。寫程…

微信支付不回調支付成功的方法,這是為什么

如果你是Xcode7.2,或者IOS9.2的話,可能會遇見在微信客戶端操作返回程序之后不能執行微信的onResp回調方法的問題,就是因為一下這兩個方法被廢棄掉了,所以我的新demo替換了一個新的方法在下面。就完美解決這個問題了(并…

如何在蘋果官網下載舊版本的Xcode 方法

1 在百度里輸入“蘋果開發者中心“,進入以下頁面。點擊頁面中的“Member Center" 2 出現登錄界面。這是需要蘋果開發者帳號的,沒有帳號的可以選擇“Create Apple ID”進行注冊。已經注冊的選擇“Sign In"登錄 3 頁面跳轉后,選擇…

屏幕尺寸 分辨率

1、分辨率 分辨率又稱顯示分辨率、屏幕分辨率 確定手機屏幕上顯示多少信息的設置,以水平和垂直像素來衡量 6 750 *1334 像素 5s 640 * 1136 像素 2、屏幕尺寸 屏幕大小的物理尺寸,以屏幕對角線長度衡量 單位:英寸 1英寸2.54厘米 6 4.7英…

程序代碼優化2

程序進行優化,通常是指優化程序代碼或程序執行速度。優化代碼和優化速度實際上是一個予盾的統一,一般是優化了代碼的尺寸,就會帶來執行時間的增加,如果優化了程序的執行速度,通常會帶來代碼增加的副作用,很…

【轉】android多分辨率適配

前一階段開發android項目,由于客戶要求進行多分辨率適配,能夠支持國內主流的分辨率手機。因此經過了幾次開發走了很多彎路,目前剛剛領略了android多分辨率適配的一些方法。 先介紹一下所走的彎路,由于android的布局文件存放在res的…

TCP/IP SOCKET HTTP及HTTPS之間的關系

GET跟POST的區別: get只能傳送128K的數據 而post是無限制的 post提交是不在會IE上帶上參數 就算你加密了別人也會解密 一般比較重要的數據通過post 傳,因為get是別人可以改參數值的 別人亂寫參數,你的異常報個不停 網絡七層由下往上分別為物理…

靜態鏈接與動態鏈接的區別

動態鏈接庫、靜態庫、import庫區別 動態鏈接庫(Dynamic Linked Library): Windows為應用程序提供了豐富的函數調用,這些函數調用都包含在動態鏈接庫中。其中有3個最重要的DLL,Kernel32.dll,它包含用于管理內存、進程和線程的各個函…

Java線程池介紹

根據摩爾定律(Moore’s law),集成電路晶體管的數量差不多每兩年就會翻一倍。但是晶體管數量指數級的增長不一定會導致 CPU 性能的指數級增長。處理器制造商花了很多年來提高時鐘頻率和指令并行。在新一代的處理器上,單線程程序的執…

curl -L get.rvm.io | bash -s stable報錯:連接不上服務器

1、安裝cocoa pods時, ERROR: Error installing cocoa: activesupport requires Ruby version > 2.2.2. 這個錯誤是說:rvm的版本過低,需要升級一下版本 2、升級rvm版本的時候,報標題的錯誤解決辦法如下 將上面的命令行改成&a…

C語言中#define的用法(轉)

轉自&#xff1a;http://www.dingge.com/main/article.asp?id10 今天整理了一些#define的用法&#xff0c;與大家共享&#xff01; 1.簡單的define定義 #define MAXTIME 1000 一個簡單的MAXTIME就定義好了&#xff0c;它代表1000&#xff0c;如果在程序里面寫 if(i<MAXTIM…

cocoa pods的安裝與我遇到的問題

1.打開終端 終端輸入 ruby -v 查看ruby的版本 打印代碼&#xff1a; ruby 2.0.0p648 (2015-12-16 revision 53162) [universal.x86_64-darwin15] 2. 更換ruby鏡像 終端輸入如下命令&#xff08;把Ruby鏡像指向taobao&#xff0c;避免被墻&#xff0c;你懂得&#xff09; a.移…

Node 連接Mysql并進行增刪改查

NPM: NPM的全稱是Node Package Manager&#xff0c;類似于ruby的gem&#xff0c;Python的PyPL、setuptools&#xff0c;PHP的pear&#xff0c;是Nodejs中的包管理器。Nodejs自身提供了基本的模塊。但是在這些基本模塊上開發實際應用需要較多的工作。NPM上已經有近萬個Nodejs庫或…

C++/C 宏定義(define)中# ## 的含義(轉)

參考&#xff1a;http://www.cnblogs.com/little-ant/p/3463080.html http://hi.baidu.com/kiraversace/item/1148ee057147981a4ac4a3e9 C/C 宏定義&#xff08;define&#xff09;中# ## 的含義 define 中的# ## 一般是用來拼接字符串的&#xff0c;但是實際使用過程中&#x…