NVGRE協議服務器
NVGRE(Network Virtualization Generic RoutingEncapsulation)是經常使用的隧道封裝協議之一,NVGRE是使用通用的封裝格式將二層網絡數據包封裝到三層網絡數據包。NVGRE在Hyper-V網絡虛擬化中扮演虛擬化IP的角色,HNV使用NVGRE做爲隧道報頭,源虛機發送數據包過程當中先被啓用了HNV的交換機從新封裝到另一個數據包裏。新的數據包報頭包含源和目標新的IP地址(IP虛擬化)及其對應的MAC地址和VSID信息,VSID存儲在GRE的報頭的Key區域,如圖1所示。數據發送到目標物理機交換機後,目標HNV交換機將數據包拆開,而後將數據發送到目標虛機。網絡
圖1 NVGRE封裝隧道架構
在同一個物理網絡體系中,能夠不借助VLAN技術,讓環境裏存在多個重複但不衝突的IP地址,取而代之的是Overlay技術實現網絡虛擬化,在HNV裏,每塊虛擬網卡可關聯兩個IP地址—也就是CA和PA地址。ide
Customer Address(CA)。也稱之爲客戶地址,由於這個IP地址是從租戶本身建立的虛擬子網的IP地址池裏獲取的地址,CA地址就是分配給虛機操做系統的IP地址,可使用ipconfig或者ifconfig等命令查看。客戶的虛機部署在多租戶的數據中內心使用CA IP地址時,並沒有感知虛機使用了網絡虛擬化技術,從虛機自身的角度來看,和傳統的網絡並沒有差異。spa
Provider Address(PA)。也稱之爲服務商地址,由於這個地址是在網絡虛擬化架構裏定義而且不是分配給虛機而是分配給物理主機的,PA地址的做用是NVGRE用於從新封裝數據的IP地址,起到IP地址虛擬化的功能。PA地址沒法在虛機操做系統裏面使用ipconfig或者ifconfig等命令查看。PA地址空間用於運行虛機的物理機之間通訊,只能在物理網絡中查看。操作系統
若是客戶將虛機從本身數據中心遷移到多租戶公有數據中心,那麼CA地址幫助客戶維持着已有的網絡拓撲,在遷移到公有數據中心後,CA地址經過IP地址虛擬化公有數據中心基礎網絡結構保持着鬆耦合關係,這個IP虛擬化的過程由PA地址完成。所以HNV的本質實際上是經過IP地址虛擬化的方式實現的。blog
PA地址不是固定分配給物理機,物理機在PA地址空間裏動態獲取和釋放PA地址。物理機要能分配PA地址,首先要將包含HNV邏輯網絡的邏輯交換機分配給物理機,一旦有關聯HNV邏輯網絡的虛機建立在物理機上,這臺物理機就會從PA IP地址池裏獲取一個PA IP地址。可以使用Get-NetVirtualizationProviderAddress命令查看物理機所分配的PA地址,結果以下示例所示。索引
PS C:\>Get-NetVirtualizationProviderAddress ProviderAddress : 10.2.22.14 InterfaceIndex : 31 PrefixLength : 24 VlanID : 222 AddressState : Preferred MACAddress : 001dd8b71c6f ManagedByCluster : False
PA IP地址不是固定分配給物理機的而是動態變化的,只要有使用HNV邏輯網絡的虛機運行,那麼該虛機所在的物理機就會從地址池裏拿一個PA地址,若是羣集裏的其餘節點沒有使用HNV的虛機網絡則暫時不會分配PA地址。只有把虛機實時遷移到某臺物理機節點後,這臺物理機纔會分配PA地址。失效的PA地址還會被回收,若是虛機發生遷移到其餘節點,那麼以前分配給物理機分配的PA地址可能會被回收,當虛機回遷到這臺物理機時,則會從新分配一個新的PA地址。ip
接下來咱們經過實際案例來驗證PA的動態分配。在羣集中有兩臺物理服務器,分別是HYP06,HYP07。建立子網爲10.2.22.0/24的PA邏輯網絡並建立IP地址池,將該邏輯網絡關聯上邏輯交換機,並將邏輯交換機分配給這兩臺物理機。接着建立兩臺虛機,所有運行在HYP06物理機上,虛機必定要使用HNV邏輯網絡,如圖2所示。部署
圖2 兩臺虛機最初運行在同一臺物理機HYP06
先使用Get-NetAdapter命令查看邏輯網絡的索引編號,而後使用Get-NetVirtualizationProviderAddress命令查詢分配給物理機的PA地址,可見這個PA地址是分配給網卡編號爲29的邏輯交換機(啓用了HNV)而非其餘網卡。在返回的結果中,能夠看到HYP06的網卡編號爲29的邏輯交換機已經分配了兩個PA地址,分別是10.2.22.18和10.2.22.19,以下示例所示。
PS C:\> Get-NetAdapter Name InterfaceDescription IfIndex Status ---- -------------------- ------- ------ LogicalSwitch Microsoft Network Adapter Multiplex.. 29 Up
PS C:\>Get-NetVirtualizationProviderAddress ProviderAddress :10.2.22.19 InterfaceIndex :29 PrefixLength :24 VlanID :222 AddressState :Preferred MACAddress :001dd8b71c77 ManagedByCluster :False ProviderAddress :10.2.22.18 InterfaceIndex :29 PrefixLength :24 VlanID :222 AddressState :Preferred MACAddress :001dd8b71c76 ManagedByCluster :False
由於在HYP07上沒有任何使用HNV的虛機,使用Get-NetAdapter命令檢索到邏輯交換機的索引編號爲31,以及使用Get-NetVirtualizationProviderAddress檢索這個索引編號的邏輯交換機是否分配PA地址時,返回的結果爲空,以下示例所示,意味着HYP07的邏輯交換機並未分配PA地址。
PS C:\> Get-NetVirtualizationProviderAddress PS C:\> Get-NetAdapter Name InterfaceDescription IfIndex Status ---- -------------------- ------- ------ LogicalSwitch Microsoft Network Adapter Multiplex.. 31 Up
使用實時遷移將虛機從HYP06遷移到HYP07,遷移結束,虛機運行在新的主機HYP07之上,如圖3所示。
圖3 虛機從HYP06遷移到HYP07
等待遷移結束後,登陸HYP07上運行命令查看PA地址分配狀況,返回的結果中,能夠看到HYP07已經分配了兩個PA地址,分別是10.2.22.20和10.2.22.21,以下示例所示。
PS C:\>Get-NetVirtualizationProviderAddress ProviderAddress :10.2.22.21 InterfaceIndex :31 PrefixLength :24 VlanID :222 AddressState :Preferred MACAddress :001dd8b71c79 ManagedByCluster :False ProviderAddress :10.2.22.20 InterfaceIndex :31 PrefixLength :24 VlanID :222 AddressState :Preferred MACAddress :001dd8b71c78 ManagedByCluster :False
再將虛機實時回遷到HYP06上,虛機從新運行在HYP06上,如圖4所示。
圖4 虛機從新運行在HYP06上
這時候,再次登陸HYP06主機,運行命令查看PA地址時,會發現分配的PA地址已經發生了變化,新的分別是10.2.22.22和10.2.22.23,以下示例所示。以前分配給HYP06的PA地址也會在稍後被回收到IP地址池裏。
PS C:\>Get-NetVirtualizationProviderAddress ProviderAddress :10.2.22.19 InterfaceIndex :29 …… …… MACAddress :001dd8b71c77 …… …… ProviderAddress :10.2.22.18 InterfaceIndex :29 …… …… MACAddress :001dd8b71c76 …… …… PS C:\>Get-NetVirtualizationProviderAddress ProviderAddress :10.2.22.23 InterfaceIndex :29 …… …… MACAddress :001dd8b71c7b …… :…… ProviderAddress :10.2.22.22 InterfaceIndex :29 …… …… MACAddress :001dd8b71c7a …… ……
虛機通過屢次在物理機之間實時遷移,致使物理機的PA屢次從新分配和回收,在SCVMM裏面運行Get-SCIPAddress命令查看時會發現PA地址逐漸被SCVMM回收到PA IP地址池。