一、如何理解
overlay(又叫疊加網絡、覆蓋網絡)簡單理解就是把一個邏輯網絡建立在一個實體網絡之上。就好比C/S架構是overlay internet、最開始網絡overlay 電話網絡、現在語音通信overlay ip 網絡。我們現在說的overlay是將二層數據包重新封裝在UDP中。比如IPsec over GRE就是一種嵌入式封裝。
Overlay是vmware NSX主要運用的技術,已經被IETF收錄。
二、overlay種類:
網絡overlay:主要針對物理服務器,物理交換機作為邊緣設備。(物理交換機為VTEP節點)
主機overlay:針對虛擬化,vSwitch作為網絡邊緣設備。(vSwitch為VTEP節點)
混合overlay:上面兩種的結合。(軟件VTEP和硬件VTEP之間需要標准協議互通)
三、現在主要的幾個overlay技術:
VXLAN:由cisco和vmware支持,L2 over UDP ,會增加50個字節的IP包頭。
NVGRE:由微軟支持,L2 over GRE ,會增加42字節的包頭長度。(缺點是需要網絡設備支持GRE)
STT:由VMware(Nicira)支持,L2 over TCP,會增加58+76字節。(需要修改TCP)
四、VxLAN主要解決的問題:
1、服務器虛擬化技術,允許在物理機上運行多個MAC地址各不相同的虛擬機,隨着數量的增加,交換機上的MAC地址表將劇烈膨脹,甚至需要MAC覆蓋。
2、數據中心多以VLAN為虛擬機划分網絡,但是VLAN數量受制於VLAN(802.1Q)協議4096,這遠遠滿足不了現實的需求。
3、多租戶環境的要求,其每個租戶都有自己隔離的網絡環境,導致物理網絡中每個租戶所分配的MAC地址和VLAN ID會存在重疊的可能。
4、Spanning Tree Protocol (STP)算法會產生大量多路路徑冗余。
5、支持遠距離虛擬機遷移,避免處理復雜的L2 (VLAN)網絡環境。
6、ToR(Top of Rack) Switch鏈接着物理server,它記錄着各個server/VM相連的MAC地址映射表。當地址映射表滿時,ToR就會停止學習新的地址,這樣就會導致網絡泛洪,直到有記錄過期被換出,騰出空閑表項。
五、VxLAN術語介紹:
VTEP:用於建立VxLAN隧道的端點設備成為VTEP,封裝和解封裝在VTEP節點上進行。
VTEPs:表示一個VXLAN網絡內的所有VTEP。
VNI:VXLAN網絡標識符,占用VXLAN報頭的24位
六、overlay轉發機制介紹:
1、報文封裝格式:
UDP端口使用目的4798
2、組播協議轉播MAC地址:
VXLAN網絡(表示一個VXLAN VNI,比如VLAN10、VLAN20屬於兩個VLAN網絡,這里一個VXLAN網絡指比如VXALN10)和MAC地址表有綁定關系,VNI和IP組播地址有映射。在一個VXLAN網絡中,每個VTEP成員都需要知道自己下連所有終端的MAC地址,同時需要知道其他所有VTEP成員下所有終端的MAC地址表,其他終端MAC地址表是通過底層物理網絡組播進行傳播,一個VXLAN網絡一個組播地址。由於VXLAN最多可以有16M個網絡,這就意為着對傳統網絡的組播條目數不斷增加有一定挑戰。不過已經有一些網絡廠商比如H3C,在SDN架構下有一個控制器,所有的VTEP把MAC地址都轉發給他,他再進行分發給需要的VTEP成員,所以在請求時只需要單播發送報文給控制器。
同樣,VXLAN也有學習的功能,收到一個報文時,會檢查自己有沒有相關信息,如果沒有就會記錄源VNI、源外層VTEP的IP、源內層MAC地址。
3、VXLAN三層互通:
在VXLAN網絡下的終端和其他VXLAN進行通信或者和遠端訪問時,VXLAN網關會對VXLAN報文剝離,重新封裝為傳統的IP數據包送入網絡。同樣,當遠端或者其他VXLAN成員訪問本VXLAN成員時,VXLAN根據目的IP查找所屬VXLAN和所屬的VTEP。重新封裝成VXLAN報文送入目的地。
4、VXLAN二層互通:
在一些特定情況下,需要VXLAN網絡和傳統網絡在同一個二層網絡中時,VXLAN網絡用二層網關和傳統二層互通。當數據包到達VXLAN二層網關時,剝離VXLAN報文,重新打上目的網絡對應的VLAN 802.1Q 標記后送入目的網絡。反之,VXLAN通過VLAN編號獲取VXLAN編號,再根據MAC地址確定目的VTEP的IP。然后進行轉發。
注意:如果VTEP收到的來自VXLAN報文中帶有VLAN ID的會給予丟棄,因為VLAN ID只是一個本地信息,轉發了沒有意義。所以連接VTEP的交換機端口需要設置成access模式,而不是TRUNK模式。
七、ARP請求流程:
VM1——VTEP1——物理交換機——VTEP2——VM2
1、VM1使用廣播發送ARP請求查找VM2的MAC地址。
2、VTEP1收到VM1的廣播后,查找自己的MAC地址表,如果下聯終端沒有將封裝報文為VXLAN,內層VNI為100,外層目的地址為VXLAN組播地址,外層源IP為VTEP1地址。
3、通過多播組VTEP2接受到VTEP1的報文,解封裝后。記錄報文的內層VNI、外層源VTEP1的IP、內層MAC地址。
4、VTEP2通過廣播將數據包廣播到自己連接的終端下面。
5、VM2接受到ARP請求后,做出回應。
6、VTEP2接受到VM2的回應后,查找流表,發現需要發送給VTEP1,重新把數據包進行封裝為VXLAN並以單播的形式發送給VTEP1.
7、VTEP1收到回應后,記錄內層VNI、外層源VTEP2的IP、內層VM2的MAC地址。
8、VTEP1解封裝后轉發給VM1。至此VM1收到了VM2的MAC地址。
八、數據傳輸流程:
VM1——VTEP1——物理交換機——VTEP2——VM2
1、VM1給VM2發送了一個TCP報文。
2、VTEP1收到報文后檢查VM1和VM2是否屬於一個VNI,(如果不屬於將轉發給VXLAN網關)檢查后屬於一個VNI,需要轉發給VTEP2。
3、VTEP1封裝VXLAN報文以單播的形式發送給VTEP2。
4、VTEP2收到報文后解封裝,查找流表。VM2是自己下聯終端。
5、VTEP2單播的形式發送給VM2,至此一個報文發送完畢。