在配置了網絡虛擬化(Overlay)的網絡結構中,處於Overlay網絡中的虛機數據包的封裝和MAC地址學習和傳統物理網絡(Underlay)類似又不盡相同。除了咱們瞭解Overlay網絡須要藉助Underlay網絡進行二次封裝以外,其MAC地址學習過程也相對要曲折一些。這些MAC地址學習過程取決於多種因素:服務器
虛機是否在同一虛擬子網?網絡
虛機是否在同一虛機網絡的不一樣虛擬子網?ide
虛機是否運行於同一臺物理機?學習
虛機是否運行在不一樣的物理機?spa
不一樣的場景,虛機之間學習對方的MAC地址,以及在互相學習到對方的MAC地址後何封裝數據包都不盡相同?接下來咱們詳細分析如下5種不一樣場景:3d
虛機在同一虛擬子網(VSID相同),運行在同一臺主機;orm
虛機在同一虛機網絡的不一樣虛擬子網裏(RDID相同,VSID不一樣),運行在同一臺主機;blog
虛機在同一虛機網絡的不一樣虛擬子網裏(RDID相同,VSID不一樣),運行在不一樣的主機;ci
虛機在同一虛擬子網(VSID相同),運行在不一樣主機,未啓用動態地址學習;get
虛機在同一虛擬子網(VSID相同),運行在不一樣主機,啓用了動態地址學習;
在上文(http://ichbinleo.blog.51cto.com/11948851/1942694)中討論了SDN Overlay 網絡中虛機數據包的轉發的三個場景1),2)和3),今天咱們將繼續討論第4)和第5)個場景。有關於微軟網絡虛擬化HNV的相關概念,如RDID、VSID、虛機網絡、虛擬子網、默認網關等,能夠參考http://ichbinleo.blog.51cto.com/11948851/1902265 和http://ichbinleo.blog.51cto.com/11948851/1903866 進一步瞭解 。
本文咱們接着第4)個場景,如圖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運行在不一樣的物理服務器,未啓用動態IP地址學習,那麼VM1和VM2之間如何學習對方的MAC地址以及在互相學習到對方的MAC地址後如何封裝數據包呢?接下來咱們詳細地分析這一場景的數據包轉發流。
VM1要和VM2通訊,須要學習到對方的MAC地址。所以,VM1發送ARP消息查詢 VM2 的MAC地址。
Hyper-V虛擬交換機廣播ARP到:
全部在本地且VSID爲11111的虛機
HNVFilter
HNV Filter將ARP響應轉發給VM1,VM1學習到VM2的MAC地址是MACVM2
VM1封裝原始數據包,目的IP是VM2的IP地址,目的MAC地址爲MACvm2。
原始數據包發送到VM1所在的物理機的Hyper-V虛擬交換機,虛擬交換機獲取到VM1所包含的VSID爲11111。
Hyper-V虛擬交換機看到MACVM2並不在本地Hyper-V虛擬交換機的記錄中,因而將數據包發送給HNV Filter。
HNV Filter檢索查找記錄,得到目標虛機的VSID是11111,CA地址爲192.168.188.3,目標MAC地址爲MACVM2,以及對應的PA地址。而後將這些獲取到的信息和原始數據包使用NVGRE/VXLAN進行二次封裝。
二次封裝的數據包經過傳輸網絡發送到目標虛機所在的Hyper-V物理機。
IP地址爲10.2.41.206以及MAC地址爲MACPA2的Hyper-V物理機接收到數據包,而後發送到本身虛擬交換機的HNV Filter。
HNV Filter拆開封裝的包,獲取到內原始數據包以及包含了VSID爲11111的OOB數據。
HNV Filter將原始數據包發送到具備VSID爲11111的Hyper-V虛擬交換機。
Hyper-V虛擬交換機按照訪問控制策略將IP數據包發送到目標虛機VM2。
注意:這種場景描述了NVGRE/VXLAN二次封裝的過程和較爲完整的HNV工做流程,咱們須要強調幾點:
若是沒有啓用動態IP地址學習,即便目標虛機不在本地Hyper-V主機上,ARP也是由HNVFilter處理而不會廣播到虛擬交換機之外的網絡。
在物理鏈路(也即傳輸網絡)上,物理網絡基於外部數據包(PA地址和物理機MAC地址)轉發數據包,物理鏈路對內部原始數據包(CA IP地址和MAC地址)沒有察覺。
數據包經過NVGRE/VXLAN進行二次封裝,可是封裝對於源虛機和目標虛機來講徹底是透明的,意味着虛機不能感知到數據的二次封裝和拆封。
咱們接着第5)個場景,如圖2所示。咱們在一個虛擬子網裏建立了兩臺虛機,分配了同一個子網(192.168.188.0/24)的IP地址:
VM1的IP地址爲192.168.188.2,MAC地址爲MACvm1
VM2的IP地址爲192.168.188.3,MAC地址爲MACvm2
此刻,這兩臺虛機VM1和VM2運行在不一樣的物理服務器,和第4個場景不一樣的是,在VM之間首次通訊時,須要啓用動態IP地址學習以補充CA和PA以及MAC地址查詢表,在有了該查詢表之後,虛機之間的通訊就和場景4)同樣了。
那麼,這種場景下VM1和VM2之間如何學習對方的MAC地址以及在互相學習到對方的MAC地址後如何封裝數據包呢?接下來咱們詳細地分析這一場景的數據包轉發流。
VM1要和VM2通訊,須要學習到對方的MAC地址。所以,VM1發送ARP消息查詢 VM2 的MAC地址。
Hyper-V虛擬交換機廣播ARP到:
全部在本地且VSID爲11111的虛機
HNVFilter
可是,HNV Filter在查詢表裏並未找到 VM2的MAC地址
因而,HNV 封裝一個ARP請求數據包,而後單播到每一個PA地址,數據包裏包含 VSID=111111的OOB數據和相關的L2記錄。
HNV Filter將ARP請求數據包經過NVGRE/VXLAN進行二次封裝。
二次封裝的數據包經過傳輸網絡傳輸到目的Hyper-V物理機。
IP地址爲10.2.41.206以及MAC地址爲MACPA2的Hyper-V物理機接收到數據包,而後將其發送到本身的HNV Filter。
目的物理機的HNV Filter拆開二次封裝的數據包,獲取到即原始數據包以及包含了VSID爲11111的OOB數據。
HNV Filter將原始數據包發送到具備VSID爲11111的Hyper-V虛擬交換機。
Hyper-V虛擬交換機按照訪問控制策略將原始數據包(也即ARP請求數據包)發送到目標虛機。
若是目的虛機網卡和ARP所請求的MAC地址匹配,那麼虛擬將將ARP應答發送給Hyper-V虛擬交換機。
Hyper-V虛擬交換機同時附加上VSID爲11111的OOB數據
由於該ARP響應數據包不是發送給本地虛機,因此Hyper-V虛擬交換機將ARP請求直接傳遞給HNV Filter。
HNV Filter看到該ARP數據包後若是發現CA的MAC/IP地址和PA的MAC/IP地址對動態IP記錄不存在,便會加上這條CA-PA配對記錄。接着發送一條新動態記錄的通知給VMM,以便VMM將更新的記錄發送給其餘Hyper-V主機。
HNV Filter在查找記錄裏找到目標虛機VM1的MAC地址(MACVM1),而後將ARP應答數據包經過NVGRE/VXLAN進行二次封裝。
二次封裝的數據包經過傳輸網發送到源虛機所在的Hyper-V物理機。
IP地址爲10.2.41.204以及MAC地址爲MACPA1的Hyper-V物理機接收到數據包,而後發送到HNV Filter
HNV Filter拆開二次封裝的數據包,得到原始數據包(也即ARP應答數據包),而後添加CA MAC/IP和PA MAC/IP動態地址對記錄。接着發送一條新動態記錄的通知給VMM,以便VMM將更新的記錄發給其餘Hyper-V主機。Hyper-V虛擬交換機接着將ARP應答數據包發送給VM1。
至此,VM1已經學習到VM2的MAC地址爲MACVM2。
VM1封裝原始數據包,目的IP地址爲VM2的IP地址,目的MAC地址爲MACvm2。
該數據包發送到Hyper-V虛擬交換機,虛擬交換機獲取到源虛機(VM1)網卡上的VSID(11111),並將VSID信息組織爲帶外(OOB)數據。
Hyper-V虛擬交換機看到MACVM2 並不在本地Hyper-V虛擬交換機上,所以將數據包傳遞給HNV Filter。
HNV Filter檢索查找記錄,得到目標虛機的VSID是11111,CA地址爲192.168.188.3,目標MAC地址爲MACVM2,以及對應的PA地址爲10.2.41.206。而後將這些獲取到的信息和原始數據包使用NVGRE/VXLAN進行二次封裝。
二次封裝的數據包經過傳輸網絡發送到目的虛機(VM2)所在的Hyper-V物理機。
IP地址爲10.2.41.206以及MAC地址爲MACPA2的Hyper-V物理機接收到數據包,而後發送到HNV Filter。
HNV Filter拆開二次封裝的包,獲取到原始數據包,以及包含了VSID 爲11111的OOB數據。
HNV Filter將原始數據包轉發到具備VSID爲11111的Hyper-V虛擬交換機。
Hyper-V虛擬交換機按照訪問控制策略將原始數據包發送到目標虛機VM2。
注意:以上這個場景就是虛機在從未通訊時,藉助啓用動態IP地址學習的特性進行MAC地址學習和轉發數據包,咱們須要強調如下幾點:
在啓用了動態IP地址學習後,HNV封裝ARP請求數據包,ARP請求數據包經過單播進行傳輸,而且也須要經過NVGRE/VXLAN進行二次封裝。
目的虛機在數據包流中生成實際ARP應答。
源和目的Hyper-V主機都沒有CAMAC/IP和PA MAC/IP地址對,因此在數據包流發生過程當中這些地址對動態查詢將被添加,並通知VMM建立了新的查找記錄。