从 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_LIST的 NetBufferListInfo 成员通常称为数据包的“带外(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。 (请参阅 克隆数据包流量。
相关主题
向数据包 添加可扩展交换机目标端口数据