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

本主题介绍在 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)的可扩展交换机数据路径。

Hyper-V 可扩展交换机体系结构的示意图,展示 NDIS 6.30。

有关可扩展交换机接口的组件的详细信息,请参阅 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 函数时,扩展将从入口数据路径获取数据包。 该扩展通过调用 NdisFSendNetBufferList 将数据包转发到入口数据路径的基础扩展。 筛选和转发扩展还可以通过调用 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 函数,以完成在入口数据路径上转发的数据包。

    当数据包同时在出口和入口数据路径上完成时,扩展将执行可能需要的任何必要的数据包清理和后期处理。