在以前的文章裏咱們討論了SDN Overlay 網絡中5個不一樣場景下虛機數據包如何轉發,今天咱們將繼續討論處於Overlay網絡中的虛機如何與物理機進行數據轉發。有關於微軟網絡虛擬化HNV的相關概念,如RDID、VSID、虛機網絡、虛擬子網、默認網關等,能夠參考http://ichbinleo.blog.51cto.com/11948851/1902265和http://ichbinleo.blog.51cto.com/11948851/1903866 進一步瞭解。服務器
在開始今天的討論以前,咱們須要引入一個概——HNV網關,也即轉發網關,轉發網關在SDN Overlay場景中的主要目的有3個:網絡
經過NAT實現Overlay網絡中虛機訪問外部網絡(Internet)ide
經過NAT或直接路由功能實現Overlay網絡中虛機訪問物理網絡上的設備學習
外部網絡到Overlay網絡的S2S ×××。spa
HNV網關可由啓用了RRAS功能的Windows Server (2012及後續版本)虛機實現,也能夠由支持NVGRE/VXLAN的物理網絡設備來支持,如Cisco、F5、Iron Network以及nAppliance等都提供相應的網絡設備。orm
我們此次設定的場景以下圖所示,2臺虛機VM1和VMgwca在不一樣的虛擬子網,分別運行在不一樣的物理機上,VMgwca做爲VM1所在的虛擬子網的轉發網關。VMgwca具有至少2個網卡:一個網卡關聯HNV邏輯網絡,鏈接和VM1相同的虛機網絡(RDID相同),一個網卡鏈接物理網絡(咱們可稱之爲外部網絡)。啓用了HNV網關特性也意味着2塊網卡所在的子網也默認啓用了靜態路由。blog
VM1的IP地址爲172.16.188.2,MAC地址爲MACvm1, VSID爲11111。ci
VMgwca的內部IP地址爲192.168.188.2,MAC地址爲MACgwca,VSID爲22222;外部地址爲10.1.21.16,外部網卡MAC地址爲MAClan。路由
當虛機VM1須要和外部網絡的主機10.1.21.18通訊時,數據流是怎樣的呢,下面咱們對這一場景的數據流進行詳細的描述:get
由於源和目的IP地址不在同一個子網,因此VM1發送ARP消息詢給默認網關,而不是直接發送給目標IP地址。
Hyper-V虛擬交換機廣播ARP到HNV Filter
HNV Filter返回默認網關的MAC地址MACdfgw,MACdfgw就是HNV Filter自身。
VM1學習到默認網關的MAC地址爲MACdfgw,其VSID爲11111 (默認網關的MAC地址MACdfgw包含在OOB數據裏)。
VM1封裝IP數據包,目的IP爲默認網關的IP地址,目的MAC地址爲MACdfgw。
IP數據包發送到Hyper-V虛擬交換機,虛擬交換機獲取到發送虛機的網卡VSID 11111的OOB數據。
HNV Filter 查詢到去往10.1.21.xx子網的客戶路由的下一跳爲192.168.188.2(轉發網關)。
HNV Filter 使用其查找記錄來肯定下一跳虛機(轉發網關)的PA地址。若是沒有找到PA地址記錄,那麼數據包將被丟棄。
接着HNV Filter 重寫數據包,以將目的MAC地址更改成MACgwca(轉發網關的MAC地址)
HNV Filter 在查找記錄裏查詢到gwca的CA地址爲192.168.188.2,MAC地址MACdfgw,VSID爲22222,PA地址爲10.2.41.206,因而HNV Filter將獲取到的這些信息和原始IP數據包使用NVGRE/VXLAN進行二次封裝。外部數據包中,目的IP地址爲gwca的的PA地址10.2.41.206,目的MAC地址爲MACdfgw,VSID爲22222,以下圖綠色部分所示。
二次封裝的數據包經過傳輸網絡棧傳輸到網絡上。
IP地址爲10.2.41.206以及MAC地址爲MACPA2的Hyper-V物理機接收到數據包,而後發送到HNV Filter
HNV Filter拆開封裝的包,獲取到原始數據包,以及包含了VSID 22222的OOB數據。
HNV Filter將原始數據包轉發到具備VSID爲22222的Hyper-V虛擬交換機。
Hyper-V虛擬交換機按照訪問控制策略將原始數據包發送到目標虛機(轉發網關虛機)。在整個過程當中,源和目標虛機都沒能感知封裝的存在。而此時,數據包已經到達轉發網關虛機gwca。
轉發網關虛機將數據包在本身2塊不一樣的網卡之間轉發(鏈接內部網絡的網卡轉發到鏈接外部網絡的網卡)
轉發網關虛機的鏈接到物理Underlay網絡的網卡將當前MAC地址更改成目的物理服務器的MAC地址MACphy
物理服務器接收到數據包,可是並不知道該數據包來自虛擬網絡。