混合转发

从 NDIS 6.40 (Windows Server 2012 R2 开始,Hyper-V 可扩展交换机体系结构支持通过可扩展交换机的 Hyper-V 网络虚拟化 (HNV) 组件和转发扩展进行混合转发。

注意 本页假定你熟悉 使用通用路由封装的网络虚拟化 (NVGRE) 任务卸载Hyper-V 可扩展交换机概述

NVGRE 和非 NVGRE 数据包

在混合转发环境中,有两种类型的数据包进入和离开 Hyper-V 可扩展交换机:NVGRE 数据包和非 NVGRE 数据包:

  • NVGRE 数据包采用 NVGRE:使用通用路由封装的网络虚拟化 Internet 草稿中指定的封装格式。 NVGRE 数据包由 Hyper-V 可扩展交换机的 HNV 组件转发。
  • 非 NVGRE 数据包只是正常的网络数据包。 非 NVGRE 数据包由转发扩展 (转发,如果没有转发扩展,可扩展交换机本身) 。

NVGRE 和非 NVGRE 数据包流通过交换机

在入口数据路径中,在捕获和筛选扩展之后、转发扩展之前,如果数据包是 NVGRE 数据包,则可扩展交换机在数据包NDIS_SWITCH_FORWARDING_DETAIL_NET_BUFFER_LIST_INFO结构中设置 NativeForwardingRequired 标志。 此结构包含在数据包NET_BUFFER_LIST结构的 NetBufferListInfo 成员中。

注意NET_BUFFER_LISTNetBufferListInfo 成员通常称为数据包的“带外 (OOB) 数据”。

如果在数据包的 OOB 数据中设置了 NativeForwardingRequired 标志,则数据包是 NVGRE 数据包。 如果未设置,则数据包是非 NVGRE 数据包。

扩展应使用 NET_BUFFER_LIST_SWITCH_FORWARDING_DETAIL 宏检查 NativeForwardingRequired 标志的值。

NVGRE 和非 NVGRE 数据包的处理方式如下:

  • Hyper-V 可扩展交换机的 HNV 组件 (确定) 所有 NVGRE 数据包的目标表
  • HNV 组件根据需要执行 NVGRE 封装和解包。
  • 转发扩展转发所有非 NVGRE 数据包。
  • 转发扩展无法转发 NVGRE 数据包,但它可以执行与筛选扩展相同的筛选操作,包括添加或排除目标端口,甚至删除数据包。
  • 如果没有转发扩展,Hyper-V 可扩展交换机将转发所有数据包。

有关详细信息,请参阅 通过可扩展交换机数据路径的数据包流

支持第三方网络虚拟化

可以在 VM 网络适配器端口上将 VirtualSubnetId 配置为外部虚拟子网。 添加此功能旨在启用转发扩展以提供第三方网络虚拟化解决方案。 在入口时,Hyper-V 可扩展交换机不会在这些数据包的NET_BUFFER_LIST结构中设置 NativeForwardingRequired 标志。 然后,转发扩展可以在转发期间根据需要修改数据包标头。 必须克隆正在修改的数据包,并将其 ParentNetBufferList 指针设置为原始 NET_BUFFER_LIST。 (请参阅 克隆数据包流量。)

将可扩展交换机目标端口数据添加到数据包

克隆数据包流量

转发扩展

通过可扩展交换机数据路径传输的数据包流

NET_BUFFER_LIST_SWITCH_FORWARDING_DETAIL

NDIS_SWITCH_FORWARDING_DETAIL_NET_BUFFER_LIST_INFO