Hyper-V 可扩展交换机端口和网络适配器状态
Hyper-V 可扩展交换机接口管理以下组件的生存期:
Hyper-V 可扩展交换机端口
与可扩展交换机的每个网络适配器连接都由一个端口表示。 当 Hyper-V 子分区配置为连接到可扩展交换机的实例时,会创建端口。 根据交换机类型,还会为外部和内部网络适配器连接创建端口。 有关交换机类型的详细信息,请参阅 Hyper-V 可扩展交换机概述。
每个端口用于保存网络接口连接的配置。 如果删除了网络接口连接的配置或停止了子分区,则会关闭并删除端口。
有关此组件的详细信息,请参阅 Hyper-V 可扩展交换机端口。
Hyper-V 可扩展交换机网络适配器
这些是连接到可扩展交换机端口的虚拟网络适配器。 这些虚拟网络适配器在 Hyper-V 子分区和父分区中公开。 这包括在子分区中公开的虚拟机 (VM) 网络适配器,以及与基础物理网络适配器组合的外部网络适配器。
每个网络适配器连接都需要相应的可扩展交换机端口。 在启动网络适配器连接之前,必须已创建端口。 同样,必须先删除网络适配器连接,然后才能拆掉和删除端口。
注意 在某些情况下,可以在不建立网络适配器连接的情况下创建和删除可扩展交换机端口。
例如,启动 Hyper-V 子分区时,可扩展交换机接口会在来宾操作系统中公开 VM 网络适配器之前创建一个端口。 公开并枚举 VM 网络适配器后,可扩展交换机接口会在 VM 网络适配器和可扩展交换机端口之间创建网络连接。 如果停止子分区,可扩展交换机接口首先删除网络连接,然后删除可扩展交换机端口。
有关此组件的详细信息,请参阅 Hyper-V 可扩展交换机网络适配器。
当可扩展交换机接口创建、删除或更改这些组件的配置时,它会发出对象标识符 (OID) 设置可扩展交换机驱动程序堆栈中的请求。 执行此操作后,基础可扩展交换机扩展可以收到有关组件状态及其配置的通知。 每个 OID 集请求都会导致这些组件的状态转换。
在可扩展交换机实例上绑定并启用扩展时,它可以发出 OID 来发现交换机的现有端口和网络适配器连接配置。
下图显示了可扩展交换机端口和网络适配器连接组件的各种状态。 此图还显示了导致组件状态转换的 OID 集请求。
以下列表描述了可扩展交换机端口和网络适配器连接组件的各种状态:
未创建端口
在此状态下,可扩展交换机上不存在可扩展交换机端口。 在端口进入此状态后,无法发出面向以前创建的端口的 OID 请求。
已创建端口
当可扩展交换机接口发出 OID_SWITCH_PORT_CREATE的 OID 集请求时,在可扩展交换机上创建端口。 在此状态下,可扩展交换机接口和扩展可以发出面向端口的 OID 请求。
有关通过可扩展交换机驱动程序堆栈的 OID 流量的详细信息,请参阅 Hyper-V 可扩展交换机控制路径。
注意 基础扩展可能会使 OID 集请求失败,并否决端口创建。 扩展通过STATUS_DATA_NOT_ACCEPTED完成 OID 请求来执行此操作。 如果完成此操作,则不会在可扩展交换机上创建端口。 有关此过程的详细信息,请参阅 Hyper-V 可扩展交换机端口。
已创建网络适配器连接
当可扩展交换机接口发出 OID_SWITCH_NIC_CREATE 的 OID 集请求时,在可扩展交换机上创建与端口的网络适配器连接。 在此状态下,可扩展交换机接口可以执行以下操作:
发出面向网络适配器连接的 OID 请求。
将数据包流量转发到网络适配器连接或从网络适配器连接转发。
新适配器还可以连接到现有端口,而无需通过端口拆解和创建序列。
在此状态下,扩展必须通过可扩展的交换机扩展堆栈转发这些数据包和 OID 请求。 但是,扩展无法将数据包或 OID 请求发起或重定向到可扩展交换机上的其他网络适配器连接。
注意 在此状态下,扩展不得向网络适配器连接发出 OID 请求或源自数据包流量。
有关通过可扩展交换机驱动程序堆栈的 OID 流量的详细信息,请参阅 Hyper-V 可扩展交换机控制路径。
有关通过可扩展交换机驱动程序堆栈的数据包流量的详细信息,请参阅 Hyper-V 可扩展交换机数据路径。
注意 基础扩展可能会使 OID 集请求失败,并否决网络适配器连接的创建。 如果是这样,则不会在可扩展交换机端口上创建连接。 有关此过程的详细信息,请参阅 Hyper-V 可扩展交换机网络适配器。
已连接的网络适配器
当可扩展交换机接口发出 OID_SWITCH_NIC_CONNECT的 OID 集请求时,网络适配器将完全连接到可扩展交换机端口。 在此状态下,扩展现在可以执行以下操作:
发出面向网络适配器连接的 OID 请求。
发源到网络适配器连接的数据包流量。
将数据包流量重定向到网络适配器连接。 例如,扩展可以将数据包从一个网络适配器连接重定向到可扩展交换机上的另一个连接。
注意 只有转发扩展才能执行此操作。 有关详细信息,请参阅 转发扩展。
网络适配器断开连接
当可扩展交换机接口发出 OID_SWITCH_NIC_DISCONNECT 的 OID 集请求时,网络适配器将从可扩展交换机端口断开连接。 例如,当停止公开 VM 网络适配器的子分区或禁用外部网络适配器时,将发出此 OID 请求。
在此状态下,可扩展交换机扩展不能再产生面向连接的数据包或 OID 请求。 此外,转发扩展无法再将数据包重定向到连接。
注意 在连接断开连接之前,可扩展交换机接口发出的挂起数据包和 OID 请求仍可能传递到扩展。 但是,扩展必须转发数据包和 OID 请求,而无需进行任何修改。
已删除网络适配器连接
完成所有以网络适配器连接为目标的数据包流量和 OID 请求后,可扩展交换机接口会发出 OID_SWITCH_NIC_DELETE 的 OID 集请求,以从可扩展交换机中删除连接。
在此状态下,可扩展交换机接口将不再发出面向连接的数据包或 OID 请求。
端口拆解
当可扩展交换机接口发出 OID_SWITCH_PORT_TEARDOWN的 OID 集请求时,可扩展交换机端口将被删除,准备删除。
在此状态下,可扩展交换机扩展不能再发出面向端口的 OID 请求。
注意 在端口启动其拆解过程之前由可扩展交换机接口发出的挂起的 OID 请求仍可能传递到扩展。 但是,该扩展必须在不进行任何修改的情况下转发 OID 请求。
完成针对该端口的所有挂起的 OID 请求后,可扩展交换机接口会发出 OID_SWITCH_PORT_DELETE的 OID 集请求。 这会导致端口转换为 “未创建端口” 状态。
扩展可以调用可扩展的交换机处理程序函数来递增或递减端口或网络适配器连接组件上的引用计数器。 虽然组件的引用计数器为非零值,但可扩展交换机接口无法删除该组件。
扩展可以调用 ReferenceSwitchPort 或 DereferenceSwitchPort 来递增或递减可扩展交换机端口的引用计数器。 可以在端口达到“ 端口创建 ”状态后进行这些调用。 在端口已到达 “端口断开 ”或“端口 未创建 ”状态后,不得进行这些调用。
该扩展可以调用 ReferenceSwitchNic 或 DereferenceSwitchNic 来递增或递减可扩展交换机网络适配器连接的引用计数器。 在连接达到 网络适配器已连接 状态后,可以进行这些调用。 在连接达到网络适配器断开连接或网络适配器已删除状态后,不得进行这些调用。
下表描述了基于可扩展交换机端口或网络适配器连接组件的状态允许的操作。
组件状态 | 是否允许调用 ReferenceSwitchPort 或 DereferenceSwitchPort ? | 是否允许调用 ReferenceSwitchNic 或 DereferenceSwitchNic ? |
---|---|---|
未创建端口 |
否 |
否 |
已创建端口 |
是 |
否 |
已创建网络适配器连接 |
是 |
否 |
网络适配器已连接 |
是 |
是 |
网络适配器断开连接 |
是 |
否 |
已删除网络适配器连接 |
是 |
否 |
端口拆解 |
否 |
否 |
组件状态 | 端口是否允许来自可扩展交换机的 OID 请求? | 端口允许来自扩展的 OID 请求? | 网络适配器连接是否允许来自可扩展交换机的 OID 请求? | 网络适配器连接是否允许来自扩展的 OID 请求? | 允许通过网络适配器连接来自可扩展交换机的数据包流量? | 允许通过网络适配器连接发送来自扩展的数据包流量? |
---|---|---|---|---|---|---|
未创建端口 |
否 |
否 |
否 |
否 |
否 |
否 |
已创建端口 |
是 |
是 |
否 |
否 |
否 |
否 |
已创建网络适配器连接 |
是 |
是 |
是 |
否 |
是 |
否 |
网络适配器已连接 |
是 |
是 |
是 |
是 |
是 |
是 |
网络适配器断开连接 |
是 |
是 |
是 |
否 |
是 |
否 |
已删除网络适配器连接 |
是 |
是 |
否 |
否 |
否 |
否 |
端口拆解 |
是 |
否 |
否 |
否 |
否 |
否 |