posted

0 Comments

作者: Colin Jao 饒康立 – VMware資深技術顧問,主要負責VMware NSX產品線,目前致力於網路虛擬化、分散式安全防護技術與SD-WAN方案的介紹與推廣。

接續上一篇,本篇網誌內我們進一步討論Geneve封裝以及在一個基於Geneve-Overlay的邏輯交換器上,虛機間互相溝通的Packet Walk。首先熟悉NSX for vSphere的夥伴們可能有一個問題:以前不是都用VXLAN的嗎?VXLAN到哪裡去了?

NSX-T裡面沒有用VXLAN的喔寶貝,掰~

 

NSX-T裡面的標準Overlay封裝協定是Geneve。Geneve是VMware / Intel / Red Hat / Microsoft 於2014年正式提出,用來作為VXLAN下一代的封裝協定,目前是IETF Draft,大家有興趣的話可以直接參考原始文件: https://datatracker.ietf.org/doc/draft-ietf-nvo3-geneve/

 

或是我們直接把Geneve的整個封裝表頭從文件內擷取出來給大家看一下。在下圖內,
  • 原來虛機丟出來的整個Ethernet Frame (包含原始的Inner Ethernet Header與Payload,也就是虛機送出的IP封包),除了最後的FCS檢查值外,都被封裝起來作為新的Geneve封包的Payload
  • 在這個原始的Ethernet Frame前面,加上了一個可變長度的Geneve Header。Header內的值我們後面解釋
  • 再前面,加上了8個Byte的UDP Header。裡面指明Geneve協定的目的地埠號碼為6081
  • 再往前是封裝後的新IP Header 20個Bytes,裡面包含了新的底層實體網路 (Underlay) 上,來源與目的地端TEP的IP地址
  • 最前面則是在底層Underlay實體網路上的新Ethernet表頭 ,如果有打vlan tag的話是18個Byte。而最後面則是重新計算過的FCS值 (4個Byte)

 

 

 

所以在使用Geneve封裝協定的時候,與原來使用VXLAN的比較是
  • VXLAN協定的表頭大小是固定的8個Byte,其實主要就是紀錄邏輯交換器的號碼 (VNI, Virtual Network Identifier)。而Geneve最主要的差異則是在原始的8個Byte外,另外加入了可變長度的選項值。這些選項值主要由TLV – Type, Length, Value的型態組成,各個廠商可以依照自己的需求,把需要傳送的資訊比如說路徑繞送、服務品質等等不同的訊息,由後面的選項值部分來進行傳遞。因此,採用Geneve協定時,所有原本VXLAN具備的功能都存在,但可以攜帶更多的資訊。在目前NSX-T的實作內,後面的TLV選項值有用來作為邏輯交換器內Replication Mode的來源資料處理。
  • VXLAN使用的是UDP 4789 Port,Geneve用的是UDP 6081
  • 在VXLAN RFC 7348內是載明VXLAN封包『不准』被切割,Don’t Fragment bit一定要啟用。而在Geneve內是『強烈建議』封包不要被切割,但可能可以允許一些例外。目前在NSX-T的實作內仍然是會把Don’t Fragment bit打開的
  • 之前我們在NSX for vSphere使用VXLAN時,底層環境要求是必須讓Jumbo Frame至少1600可以通過。而在NSX-T內,由於Geneve封包更大,且有不同架構的應用,我們請大家在底層實體環境要把Jumbo Frame開到1700。

 

好的,那實際環境內的封包傳遞會是如何呢?我們再用前一篇網誌的環境來做舉例。現在在邏輯交換器71005上面的虛機C,要傳送一個封包給同樣交換器上的虛機B,如下圖:
前篇內我們已經看到在邏輯交換器71005的NSX-T Mac Table會是這樣子
VM C發出了往VM B傳送的Ethernet封包
這個封包應該是長這樣的
VM C所在的Transport Node (KVM Host 3) 知道VM C是在邏輯交換器71005上,且目的地與來源同網段。因此KVM Host 3要知道的是,VM B在哪裡?藉由這個Ethernet Frame內的目的地Mac Address,KVM Host 3與NSX Controller詢問(或是自己已經有Cache),藉由Mac Table內查詢,Mac B所在的位置之目的地是TEP 2: 10.10.10.2
查到了目的地,KVM Host 3就來進行Geneve封裝。封裝出來的新Ethernet Frame是這樣:
Geneve封包內記載VNI值是71005號邏輯交換器,而目的地與來源則是Transport Node在實體網路上的TEP IP。透過底層實體網路的三層繞送,這個封包就能夠送到目的地 (10.10.10.2) 的vSphere Host 2上,而在把封裝解開還原到原始的Ethernet Frame,然後送往71005號邏輯交換器上的Mac B。
如果要囉唆,還有很多可以講,像是BUM (Broadcast / Unknown / Multicast) 封包如何處理這些,但原則上這幾篇的說明應該已經交代NSX-T邏輯交換器的基本運作方式了。那下一篇開始我們要進入NSX-T基礎運作內最謎團的部分:邏輯路由器。