1. 程式人生 > >SDN Overlay 網絡中虛機數據包的轉發(1)

SDN Overlay 網絡中虛機數據包的轉發(1)

虛機 overlay sdn 數據包轉發 mac地址學習

在配置了網絡虛擬化(Overlay)的網絡結構中,處於Overlay網絡中的虛機數據包的封裝和MAC地址學習和傳統物理網絡(Underlay)相似又不盡相同。除了我們了解Overlay網絡需要借助Underlay網絡進行二次封裝之外,其MAC地址學習過程也相對要曲折一些。這些MAC地址學習過程取決於多種因素:
1) 虛機是否在同一虛擬子網?
2) 虛機是否在同一虛機網絡的不同虛擬子網?
3) 虛機是否運行於同一臺物理機?
4) 虛機是否運行在不同的物理機?

不同的場景,虛機之間學習對方的MAC地址,以及在互相學習到對方的MAC地址後何封裝數據包都不盡相同。接下來我們詳細分析以下5種不同場景:

1) 虛機在同一虛擬子網(VSID相同),運行在同一臺主機;
2) 虛機在同一虛機網絡的不同虛擬子網裏(RDID相同,VSID不同),運行在同一臺主機;
3) 虛機在同一虛機網絡的不同虛擬子網裏(RDID相同,VSID不同),運行在不同的主機;
4) 虛機在同一虛擬子網(VSID相同),運行在不同主機,未啟用動態地址學習;
5) 虛機在同一虛擬子網(VSID相同),運行在不同主機,啟用了動態地址學習;

本文我們將先討論1),2)和3),並在接下來的文章繼續討論第4)和第5)個場景,有關於微軟網絡虛擬化HNV的相關概念,如RDID、VSID、虛機網絡、虛擬子網、默認網關等,可以參考http://ichbinleo.blog.51cto.com/11948851/1902265和http://ichbinleo.blog.51cto.com/11948851/1903866 進一步了解 。


我們先看第一個場景,如圖1所示。我們在一個虛擬子網裏創建了兩臺虛機,分配了同一個子網(192.168.188.0/24)的IP地址:
VM1的IP地址為192.168.188.2,MAC地址為MACvm1
VM2的IP地址為192.168.188.3,MAC地址為MACvm2

技術分享

此刻,這兩臺虛機VM1和VM2運行在同一臺物理服務器,那麽VM1和VM2之間如何學習對方的MAC地址以及在互相學習到對方的MAC地址後如何封裝數據包呢?接下來我們詳細地分析這一場景的數據包轉發流。
1. VM1要和VM2通信,需要學習到對方的MAC地址。因此,VM1發送ARP消息查詢 VM2 的MAC地址。
2. Hyper-V虛擬交換機記錄VM1連接的端口和MAC地址,並廣播ARP消息到:
① 所有在本地且VSID為11111的虛機
② HNV Filter(HNV過濾器)
3. 由於VM2的VSID與VM1一樣同為11111,因此VM2在接收到ARP廣播後,返回自己的MAC地址信息給Hyper-V交換機,Hyper-V虛擬交換機記錄下VM2連接的端口和MAC地址,並將ARP響應轉發給VM1。
4. VM1學習到VM2的MAC地址MACvm2 後,封裝數據包(目的IP為VM2的IP, 目的MAC地址為VM2的MAC地址)並發送到Hyper-V虛擬交換機。
5. Hyper-V虛擬交換機接收到數據包後,虛擬交換機獲取到源虛機(VM1)網卡上的VSID(11111),並將VSID信息封裝為帶外(OOB)數據。
6. Hyper-V虛擬交換機基於RDID和VSID進行訪問控制判斷,得知目標VM2的RDID與VSID和VM1的RDID與VSID一致後,再將數據包轉發給虛機VM2。
7. VM2收到數據包,完成此次數據的發送和接收。

註意: Hyper-V 虛擬交換機應用了基於VSID和RDID的訪問控制策略,VSID ACL在Hyper-V虛擬交換機內部發生,Hyper-V虛擬交換機把VSID信息封裝成OOB數據,然後基於OOB數據所提供的VSID進行訪問控制。因為虛機的虛擬網卡具有指定的VSID信息,源和目的虛機的VSID相同或者在同一個虛機網絡(RDID)時,HNV訪問控制列表才允許互相之間的訪問。目標和源虛機在同一臺物理機上運行時,虛機之間發送數據包並不需要通過NVGRE/VXLAN二次封裝,HNV Filter並不參與數據包的轉發。

第2個場景,如圖2所示。我們在一個虛機網絡裏創建了2個虛擬子網(分別為172.16.188.0/24和192.168.188.0/24),然後在每個虛擬子網中各自創建1臺虛機,分配了各自子網的的IP地址:
VM1的IP地址為192.168.188.2,MAC地址為MACvm1
VM2的IP地址為172.16.188.2,MAC地址為MACvm2

技術分享

此刻,這兩臺虛機VM1和VM2運行在同一臺物理服務器,那麽VM1和VM2之間如何學習對方的MAC地址以及在互相學習到對方的MAC地址後如何封裝數據包呢?接下來我們詳細地分析這一場景的數據包轉發流。
1. VM1要和VM2通信,需要學習到對方的MAC地址。但是VM1和VM2不在同一個子網,所以VM1要學習的是默認網關的MAC地址,而不是VM2的MAC地址。
2. Hyper-V虛擬交換機收到VM1發送ARP數據包後,記錄VM1連接的端口和MAC地址,然後將ARP廣播到HNV Filter。
3. HNV Filter返回默認網關的MAC地址MACDFGW給虛擬交換機, MACDFGW就是HNV Filter自身。
4. VM1學習到默認網關的MAC地址為MACDFGW,其VSID為11111 (默認網關的MAC地址MACDFGW包含在OOB數據裏)。
5. VM1封裝數據包,目的IP為VM2的IP地址,目的MAC地址為默認網關的MAC地址MACDFGW ,數據包先發送到默認網關。
6. 接著數據包被默認網關轉發到Hyper-V虛擬交換機,Hyper-V虛擬交換機獲取到源虛機(VM1)網卡上的VSID(11111),並將VSID信息封裝成帶外(OOB)數據。
7. 在Hyper-V交換機做進一步數據包轉發之前,HNV Filter先檢查源虛機VM1和目的虛機VM2的RDID是否一致,如果2者的RDID不同,那麽數據包將會被丟棄。
8. HNV Filter檢索查找記錄(VirtulizationLookupRecord)來確定目的虛機VM2的PA地址,如果找不到目的虛機的PA地址,數據包將會被丟棄。在這種情況下,目標虛機VM2的PA地址就是本地HNV Filter的PA地址。HNV Filter重寫數據包以將目的MAC地址更改為VM2的MAC地址MACvm2。
9. 同時,HNV Filter更新數據包中的OOB數據,將VSID從11111更改為22222。
10. Hyper-V虛擬交換機基於RDID和VSID進行訪問控制判斷,得知目標VM2的RDID和VM1的RDID一致,然後將數據包轉發給虛機VM2。
11. VM2收到數據包,完成此次數據的發送和接收。

註意:在此場景下,因為虛機處於不同VSID裏,HNV起到分布式路由的作用,需要註意以下幾點:
數據包裏的GRE Key/VNID裏只能容下一個VSID,所以GRE只會將目標虛機的VSID放置在GRE Key/VNID裏進行傳輸。
如果目標和源虛機在同一臺物理機上運行時,虛機之間發送數據包並不需要通過NVGRE/VXLAN二次封裝。
和2臺虛機在相同的VSID的情況不同的是,2臺虛機在不同VSID的情況下,HNV Filter 參與數據包的轉發,因為HNV Filter承擔起默認網關的角色,也即HNV的分布式路由功能。
在承擔默認網關的時候,HNV Filter 更新數據包的VSID和目標MAC地址,將其匹配到目標虛機的VSID和MAC地址 。

第3個場景,如圖3所示。我們在一個虛機網絡裏創建了2個虛擬子網(分別為172.16.188.0/24和192.168.188.0/24),然後在每個虛擬子網中各自創建1臺虛機,分配了各自子網的的IP地址:
VM1的IP地址為192.168.188.2,MAC地址為MACvm1
VM2的IP地址為172.16.188.2,MAC地址為MACvm2

技術分享


此刻,這兩臺虛機VM1和VM2運行在不同的物理服務器,那麽VM1和VM2之間如何學習對方的MAC地址以及在互相學習到對方的MAC地址後如何封裝數據包呢?接下來我們詳細地分析這一場景的數據流。
1. VM1要和VM2通信,需要學習到對方的MAC地址。但是VM1和VM2不在同一個子網,所以VM1要學習的是自己連接的虛擬交換機的默認網關的MAC地址,而不是VM2的MAC地址。
2. Hyper-V虛擬交換機收到VM1發送ARP數據包後,記錄VM1連接的端口和MAC地址,然後將ARP廣播到HNV Filter。
3. HNV Filter返回默認網關的MAC地址MACDFGW , MACDFGW就是HNV Filter自身。
4. VM1學習到默認網關的MAC地址為MACDFGW ,其VSID為11111 (默認網關的MAC地址MACDFGW包含在OOB數據裏)
5. VM1封裝數據包目的IP為VM2的IP地址,目的MAC地址為默認網關的MAC地址MACDFGW,數據包先發送到默認網關。
6. 接著數據包被發送到Hyper-V虛擬交換機,Hyper-V虛擬交換機獲取到源虛機(VM1)網卡上的VSID(11111),並將VSID信息封裝為帶外(OOB)數據。
7. HNV Filter檢查VM1和VM2的網絡是否具有同樣的RDID,如果2者的RDID不同,那麽數據包將會被丟棄
8. HNV Filter使用查找記錄來確定目的虛機VM2的PA地址,如果找不到目的虛機的PA地址,數據包將會被丟棄。
9. HNV Filter重寫數據包以將目標MAC地址更改為VM2的MAC地址MACvm2。
10. HNV Filter檢索查找記錄發現目的虛機的VSID(22222)和源虛機的VSID(11111)所屬RDID一樣。這時,NVGRE/VXLAN將目的虛機VM2的VSID(22222)、HNV Filter查找到的PA地址(10.2.41.206)連同原始數據包和其他信息做二次封裝。二次封裝的外部源IP地址是源虛機所對應的PA地址,外部目的IP地址是目的虛機所對應的PA地址。
11. 二次封裝的數據包通過傳輸網絡傳輸到目的虛機所運行的物理機。
12. 在傳輸網絡上,IP地址為10.2.41.206以及MAC地址為MACPA2的Hyper-V物理機接收到數據包,然後將數據發送到該物理機的HNV Filter。
13. HNV Filter拆開封裝的數據包,獲取到內部數據包(也即原始數據包)以及包含了VSID為22222的OOB數據。
14. HNV Filter將原始數據包(在上一步獲取的內部數據包)發送到具有VSID為22222的Hyper-V虛擬交換機。
15. Hyper-V虛擬交換機按照訪問控制規則將數據包發送到目標虛機VM2。

註意: 在這個情況下,數據包通過NVGRE/VXLAN進行二次封裝,但是封裝對於源虛機和目標虛機來說完全是透明的,意味著虛機不能感知到數據的二次封裝和拆封。

到此,我們詳細討論了3種不同的場景下,虛機數據轉發流過程的詳細說明。


本文出自 “黃利軍的博客” 博客,謝絕轉載!

SDN Overlay 網絡中虛機數據包的轉發(1)