混合转发
从 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。 (请参阅 克隆数据包流量。)