共用方式為


透過可延伸交換器資料路徑的封包流程

本主題描述封包如何透過 Hyper-V 可延伸交換器資料路徑來回移動或移出可延伸交換器埠。

注意 在可延伸交換器介面中,NDIS 篩選驅動程式稱為 可延伸交換器延伸模組 ,而驅動程式堆疊稱為 可延伸交換器驅動程式堆疊。 如需擴充功能的詳細資訊,請參閱 Hyper-V 可延伸交換器擴充功能

注意此頁面假設您已熟悉Hyper-V 可延伸交換器和混合式轉送概觀中的資訊。

從其埠抵達可延伸交換器的所有封包流量都會遵循透過可延伸交換器驅動程式堆疊的相同路徑。 例如,從外部網路介面卡連線接收的封包流量,或從虛擬機器 (VM) 網路介面卡連線傳送的封包流量會透過相同的資料路徑移動。

下圖顯示 NDIS 6.40 (Windows Server 2012 R2) 和更新版本的可延伸交換器資料路徑。

此圖顯示 NDIS 6.40 和更新版本的 Hyper-V 可延伸交換器架構。

下圖顯示 NDIS 6.30 (Windows Server 2012) 的可延伸交換器資料路徑。

此圖顯示 NDIS 6.30 的 Hyper-V 可延伸交換器架構。

如需可延伸交換器介面元件的詳細資訊,請參閱 Hyper-V 可延伸交換器架構

可延伸交換器資料路徑有下列部分,列在封包流經它們的順序中:

過度配置通訊協定邊緣

  1. 封包會從連線到交換器埠的網路介面卡抵達可延伸交換器。 這些封包會先從可延伸交換器輸入資料路徑的通訊協定邊緣發出要求。

    可延伸交換器的通訊協定邊緣會準備輸入資料路徑的封包。 通訊協定邊緣會為這些封包配置內容區域,其中包含頻外 (OOB) 可延伸交換器轉送內容。 它會填入 OOB 資料,其中包含封包傳遞至可延伸交換器的來源埠和網路介面卡連線相關資訊。

    如需轉送內容的詳細資訊,請參閱 Hyper-V 可延伸交換器轉送內容

  2. 在 NDIS 6.40 (Windows Server 2012 R2) 和更新版本中,如果封包是來自外部網路介面卡的 NVGRE 封包,則可延伸交換器會在封包的頻外 (OOB) 資訊中設定 NativeForwardingRequired 旗標。 如需詳細資訊,請參閱 混合式轉送

  3. 如果封包到達流量具有虛擬子網的埠,可延伸的交換器會設定封包之NDIS_NET_BUFFER_LIST_VIRTUAL_SUBNET_INFO結構的VirtualSubnetId成員。

    注意 虛擬子網可以是 HNV 子網或協力廠商虛擬子網。

輸入資料路徑

  1. 當呼叫其 FilterSendNetBufferLists 函式時,擴充功能會從輸入資料路徑取得封包。 延伸模組會呼叫 NdisFSendNetBufferLists,將封包轉送至輸入資料路徑上的基礎延伸模組。 篩選和轉送延伸模組也可以呼叫 NdisFSendNetBufferListsComplete,從輸入資料路徑卸載封包。

  2. 擷取延伸模組會在輸入資料路徑上取得封包時,他們可以檢查封包資料。 不過,擷取延伸模組不得完成輸入資料路徑上封包的傳送要求。 這些延伸模組一律必須將封包轉送至可延伸交換器驅動程式堆疊中的基礎延伸模組。

    擷取延伸模組也可以源自輸入資料路徑上的封包。 例如,延伸模組可能會產生封包,以便向遠端監視應用程式報告流量狀況。

    如需延伸模組所產生封包的詳細資訊,請參閱 原始封包流量

  3. 篩選延伸模組在輸入資料路徑上取得封包時,可以執行下列動作:

    • 根據自訂可延伸交換器或埠原則卸載封包。

      如需這些原則的詳細資訊,請參閱 Hyper-V 可延伸交換器原則

      注意 在輸入資料路徑上取得的封包沒有在封包 OOB 資料中定義的目的地埠。 因此,篩選延伸模組只能根據封包資料或封包的來源埠或網路介面卡連線強制執行自訂原則。

  • 複製或修改從輸入資料路徑取得的封包。

  • 將新的封包插入輸入資料路徑。

  1. 在 NDIS 6.40 和更新版本中,擷取和篩選延伸模組之後,但在輸入資料路徑的轉送延伸模組之前,可延伸參數會執行下列動作:

    • 如果封包是來自外部網路介面卡的 NVGRE 封包,封包標頭中的位址是提供者位址 (PA) 空間位址。 可延伸的交換器會藉由在封包的頻外 (OOB) 資訊中設定 NativeForwardingRequired 旗標來指出這一點。 如需詳細資訊,請參閱 混合式轉送

    • 可延伸的交換器會將內建的輸入原則套用至封包。 這些原則可能包括輸入存取控制清單, (ACL) 、DHCP 防護和路由器防護。

  2. 如果未在可延伸交換器驅動程式堆疊中啟用轉送延伸模組,封包的目的地埠陣列是由可延伸交換器決定。

  3. 如果啟用轉送延伸模組,在輸入資料路徑上取得封包時,它必須執行下列動作:

    • 在 NDIS 6.40 和更新版本中,如果封包是 NVGRE 封包 (請參閱 混合式 轉送) ,轉送延伸模組就無法修改輸入資料路徑中封包的 OOB 資料中的目的地埠陣列。 不過,它可以卸載封包。

    • 如果封包不是 NVGRE 封包,轉送延伸模組必須將目的地埠新增至封包 OOB 資料中的目的地埠陣列。

    • 轉送延伸模組必須根據標準或自訂可延伸交換器或埠原則卸載封包。 標準交換器或埠原則包括安全性和虛擬 LAN (VLAN) 屬性。 如果未在可延伸交換器驅動程式堆疊中啟用轉送延伸模組,則可延伸交換器會強制執行這些原則。

      注意 當轉送延伸模組篩選輸入資料路徑中的封包時,它會根據來源埠以及延伸模組指派給封包的目的地埠套用篩選規則。

此外,轉送延伸模組可以執行下列動作:

  • 複製或修改從輸入資料路徑取得的封包。

  • 將新的封包插入輸入資料路徑。

基礎迷你埠邊緣

  1. 當封包到達可延伸交換器的基礎迷你埠邊緣時,可延伸交換器會將其內建原則套用至封包。 這些原則包括存取控制清單 (ACL) 和服務品質 (QoS) 屬性。 如果因為這些原則而未卸載封包,可延伸交換器會產生封包的接收指示,並將封包轉送至輸出資料路徑。

    注意 如果在要傳遞封包的埠上啟用埠鏡像,迷你埠邊緣會將目的地埠新增至鏡像埠的封包 OOB 資料。 迷你埠邊緣會執行這項操作,不論是否已在可延伸交換器驅動程式堆疊中安裝並啟用轉送延伸模組。 迷你埠邊緣只會在封包的目的地埠陣列中未指定鏡像埠時新增。

  2. 如果未啟用轉送延伸模組,可延伸交換器會決定封包的目的地埠,並將這些目的地埠新增至封包的 OOB 資料,再將封包轉送至輸出資料路徑。

  3. 在 NDIS 6.40 和更新版本中,HNV 元件會在輸入和輸出之前執行任何所需的 NVGRE 封裝或解壓縮,讓轉送延伸模組可以在封裝和解壓縮的形式中看到封包。 例如,如果封包從外部網路介面卡抵達,且目的地為內部 VM,轉送延伸模組會在輸入上取得封裝的封包,並在輸出上取得已解碼的封包。

    注意 在封裝的封包中,封包標頭中的位址是提供者位址, (PA) 空間位址。 在壓縮封包中,它是 CA) 空間位址 (客戶位址。

    1. 如果封包是從外部網路介面卡抵達的 NVGRE 封包,Hyper-V 網路虛擬化 (HNV) 元件會在封包上執行 NVGRE 解碼。 HNV 元件會根據 HNV 原則決定封包的目的地,然後可延伸的交換器會將封包轉送到輸出資料路徑。

    2. 如果封包從內部 VM 抵達,如果已為封包設定 HNV 原則,HNV 元件會在封包上執行 NVGRE 封裝。 HNV 元件會根據 HNV 原則決定封包的目的地,然後可延伸的交換器會將封包轉送到輸出資料路徑。

    3. 否則,轉送延伸模組會將封包轉送至輸出資料路徑。

  4. 在 NDIS 6.30 中,如果已啟用轉送延伸模組,則必須將封包轉送至輸出資料路徑。

輸出資料路徑

  1. 當呼叫 其 FilterReceiveNetBufferLists 函式時,延伸模組會從輸出資料路徑取得封包。 延伸模組會呼叫 NdisFIndicateReceiveNetBufferLists,將封包轉送至輸出資料路徑上的過度延伸。 篩選和轉送延伸模組也可以呼叫 NdisFReturnNetBufferLists,從輸出資料路徑卸載封包。

  2. 當轉送延伸模組取得輸出資料路徑上的封包時,它可以檢查 OOB 資料中的封包目的地埠資訊。

    注意 延伸模組會呼叫 GetNetBufferListDestinations,從 OOB 資料取得這項資訊。

根據標準或自訂交換器或埠原則,延伸模組可以排除封包傳遞至 OOB 資料中包含的一或多個目的地埠。

  1. 在 NDIS 6.40 (Windows Server 2012 R2) 和更新版本中,在轉送延伸模組之後,但在輸出資料路徑上的篩選和擷取延伸模組之前,可延伸的交換器會將內建輸出原則套用至封包。 這些原則可能包括主幹模式、監視模式、輸出 ACL,以及服務品質 (QoS) 屬性。

  2. 篩選延伸模組在輸出資料路徑上取得封包時,他們可以檢查 OOB 資料中的封包目的地埠資訊。 根據自訂交換器或埠原則,延伸模組可以排除封包傳遞至 OOB 資料中包含的一或多個目的地埠。

    如果篩選延伸模組需要修改封包中的資料,則必須先複製封包而不保留埠目的地。 然後,延伸模組必須將修改過的封包插入輸入資料路徑。 這可讓基礎延伸模組在修改的封包上強制執行原則,而轉送延伸模組可以新增埠目的地。

    如需詳細資訊,請參閱 複製或封包流量

  3. 擷取延伸模組會在輸出資料路徑上取得封包時,他們可以檢查封包資料。 不過,如果擷取延伸模組需要產生封包,才能向遠端監視應用程式報告流量狀況,則必須呼叫 NdisFSendNetBufferLists 來起始輸入資料路徑上的傳送作業來產生此封包流量。

  4. 當封包抵達可延伸交換器的過度通訊協定邊緣時,可延伸交換器介面會將封包轉送至所有指定的目的地埠。

  5. 轉送封包之後,介面會透過相同路徑反向完成封包。 首先,介面會呼叫延伸模組的 FilterReturnNetBufferLists 函式,以完成輸出資料路徑上轉送的封包。 然後,介面會呼叫延伸模組的 FilterSendNetBufferListsComplete 函式,以完成在輸入資料路徑上轉送的封包。

    在輸出和輸入資料路徑上完成封包時,延伸模組會執行任何必要的封包清除和可能需要的後續處理。