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

在配置了網絡虛擬化(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/1902265http://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
併發

wKiom1lTS6XwoHMdAAGo8R0kLwk908.jpg-wh_50

    此刻,這兩臺虛機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的VSID和VM1的VSID一致後,再將數據包轉發給虛機VM2。
    7. VM2收到數據包,完成這次數據的發送和接收。
分佈式

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

 

        第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
學習

wKiom1lTTISwNX67AAGBau_Yqok934.jpg-wh_50

        此刻,這兩臺虛機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收到數據包,完成這次數據的發送和接收。
spa

   注意:在此場景下,由於虛機處於不一樣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地址 。
3d

 

            第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 
blog

wKioL1lTTJmRKhQHAAMRVNLpn6A595.jpg-wh_50


        此刻,這兩臺虛機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種不一樣的場景下,虛機數據轉發流過程的詳細說明。

相關文章
相關標籤/搜索