我注意到在 Windows (10) 中,在管理上禁用网络接口与在物理上拔下连接之间存在明显差异。我不太清楚如何描述这种差异,但我可以用两个连续的 ping 来说明:
首先,通过管理方式禁用该接口,然后启用它:
>ping -t 8.8.8.8
Pinging 8.8.8.8 with 32 bytes of data:
Reply from 8.8.8.8: bytes=32 time=12ms TTL=112
Reply from 8.8.8.8: bytes=32 time=12ms TTL=112
No resources.
PING: transmit failed. General failure.
PING: transmit failed. General failure.
Reply from 8.8.8.8: bytes=32 time=11ms TTL=112
Reply from 8.8.8.8: bytes=32 time=11ms TTL=112
物理拔下连接然后重新插入:
>ping -t 8.8.8.8
Pinging 8.8.8.8 with 32 bytes of data:
Reply from 8.8.8.8: bytes=32 time=12ms TTL=112
Reply from 8.8.8.8: bytes=32 time=12ms TTL=112
Request timed out.
General failure.
General failure.
Request timed out.
Reply from 8.8.8.8: bytes=32 time=11ms TTL=112
Reply from 8.8.8.8: bytes=32 time=11ms TTL=112
我的具体问题是,我是否可以在 Windows 中执行某些操作,其效果与物理拔出连接相同(最好通过命令行)。其次,我实际上想知道在 Windows 网络堆栈实现方面这里有什么区别。
在网络工程领域,我们有物理上启动但管理上关闭的概念,我认为这里也是一样,但我想知道 Windows 内部的网络堆栈如何传播这种情况,以便软件实际上表现不同,并且可以真正分辨出所描述的两种情况之间的区别。
答案1
网络适配器 + 连接的不同状态包括:
- 适配器被操作系统禁用。在此状态下,适配器上不会执行任何网络功能。就好像适配器不存在于网络中,只是系统中一个不起作用的设备。
- 适配器已启用,但电缆已移除。系统(网络堆栈)等待插入电缆。
- 电缆已插入。系统尝试通过检测物理连接的速度和双工设置来启用与另一端的物理连接。(另请参阅这个问题)
- 完成此操作后,操作系统会知道已插入电缆,并开始为网络接口分配地址(该接口绑定到该适配器,可能不止一个)。这可以通过静态分配、DHCP(IPv4 和 IPv6)、SLAAC(IPv6)或 APIPA(IPv4)来完成。所有这些都旨在为网络接口提供一个 IP 地址(和路由信息),网络的其他参与者(特别是该网段)可以理解该 IP 地址,以便能够进行通信。
- IP 地址已分配。现在接口已启动,可以进行连接。
因此,对于您的具体问题,逻辑上的答案是:是的。但“物理”答案是:不是。
在管理界面中禁用适配器(或通过命令行) 将适配器移至状态 0(从任何其他状态)。启用它将移至状态 1。
拉动电缆(适配器启用时)将移动到状态 1(而不是 0)。
这是主要的区别。两者都会断开所有连接和 ARP 缓存的状态等,因此从逻辑上讲,它们的作用相同。但从物理上讲,它们的作用不同。我也从未找到通过软件方式(操作系统命令)进入状态 1(从“更高”状态)的方法,可能是因为这是不受操作系统影响的物理事物。