![交叉计算机连接与网络交换机,广播数据包差异?使用网络调试启动时间真的很慢](https://linux22.com/image/1582563/%E4%BA%A4%E5%8F%89%E8%AE%A1%E7%AE%97%E6%9C%BA%E8%BF%9E%E6%8E%A5%E4%B8%8E%E7%BD%91%E7%BB%9C%E4%BA%A4%E6%8D%A2%E6%9C%BA%EF%BC%8C%E5%B9%BF%E6%92%AD%E6%95%B0%E6%8D%AE%E5%8C%85%E5%B7%AE%E5%BC%82%EF%BC%9F%E4%BD%BF%E7%94%A8%E7%BD%91%E7%BB%9C%E8%B0%83%E8%AF%95%E5%90%AF%E5%8A%A8%E6%97%B6%E9%97%B4%E7%9C%9F%E7%9A%84%E5%BE%88%E6%85%A2.png)
问题:
- 网络配置导致操作系统加载时间为 10 分钟。
设置
- 两个 Windows 10 系统,最新更新
- 直接通过以太网电缆连接(非交叉)
- 两者都有静态 IP
- Windows 内核网络已启用调试
- 目标上的 Windows 防火墙已禁用
- 主机有两个网络接口
问题:
- 交叉连接如何影响广播数据包?
- 网络交换机存储转发表能起到这个作用吗?
观察结果:
- 启动时 10 分钟的挂起时间是在旋转的 Windows 启动画面上
- 我认为 KDNET 过滤器遇到了困难......
- 当我将两台电脑连接到网络交换机时,问题解决了
- 当我禁用网络调试时,问题解决了
Connected to target 169.254.78.132 on port 50008 on local IP 192.168.128.1
使用网络交换机或交叉电缆在 WinDbg 中打印连接情况Connected to target 172.29.2.197 on port 50008 on local IP 172.29.13.140
当目标上启用 DHCP 时,通过主网络接口进行连接。- 关闭 WinDbg(没有打开内核调试会话),仍然很慢
- 根据 netadapter 列出的目标 IP 地址
IP ADDRESSES unicast ffffd206bfefb040 - 192.168.128.100 multicast ffffd206bfef2040 - 224.0.0.1 multicast ffffd206ccdd1040 - 224.0.0.251 multicast ffffd206ccddb040 - 224.0.0.252 multicast ffffd206cd375040 - 239.255.255.250 broadcast ffffd206bfef8040 - 255.255.255.255 broadcast ffffd206ccda9040 - 192.168.128.255
答案1
TL;Dr:使用bcdedit /set {dbgsettings} dhcp No
或nodhcp
标记。
bcdedit /dbgsettings NET HOSTIP:ip PORT:port [KEY:key] [nodhcp] [newkey] [/start startpolicy] [/noumex]
WinDBG 使用 Windows 10 (RS5/17763.1) 内核进行网络调试需要 DHCP经过默认以达到最佳功能。
回想一下,KDNET 内核模块在比 Windows 操作系统更低的级别上运行。不使用“Microsoft 内核调试网络适配器”连接的 IP 地址设置,也不使用隐藏的真实 (Intel/Realtek/Broadcom) 适配器,该适配器也有其 IP 地址。
例如,在网络连接控制面板中将 IPV4 地址设置为 192.168.128.1,调试器(连接到交换机时)会报告以下内容:
Connected to target 172.29.1.132 on port 50008 on local IP 172.29.13.140.
这与我之前的观察结果相关,即使用交叉电缆时:
Connected to target 169.254.78.132 on port 50008 on local IP 192.168.128.1
因此,没有 DHCP 服务器的交叉电缆会导致 KDNET 在 DHCP 上停滞 10 分钟,然后最终回到链路本地地址。
内核调试器(即嵌入在目标计算机内核中的部分)能够连接具有静态 IP 的机器上的 windbg,但它从不支持为自己分配静态 IP。您要么使用 DHCP,要么获取 169.254.xx 范围内的后备地址。该范围不可路由,因此两台计算机必须直接连接。
注意,操作系统分配给网络适配器的 IP 地址是无关紧要的。内核调试器有自己独立的驱动程序堆栈。
此外,通信是通过 UDP 数据包而不是 TCP 完成的……因此它实际上不需要 IP 地址。以下是 Wireshark 数据包捕获,显示了使用交叉电缆的 DHCP 请求:
仔细查看输出bcdedit
,bcdedit /dbgsettings
我发现 Windows 自动使用了 DHCP 标志,尽管我从未添加过它。我看到他们还添加了“nodhcp”选项,尽管在文档中很难找到它
debug Yes
----- dbgsettings -----
busparams 3.0.0
key 1.2.3.4
debugtype NET
hostip 192.168.128.1
port 50008
dhcp Yes
将 DHCP:no 添加到我的网络调试设置批处理脚本中解决了这个问题!
@echo off
rem get bus device function from Device Manager of network adapter
set bdf=3.0.0
rem port used in WinDbg
set port=50008
rem set your workstation machine to the following IP on a secondary adapter
set ip=192.168.128.1
rem enable network debug using the ip address of the dev system
bcdedit /debug on
bcdedit /create {dbgsettings} > NUL 2>&1
bcdedit /dbgsettings NET HOSTIP:%ip% PORT:%port% KEY:1.2.3.4
bcdedit /set {dbgsettings} busparams %bdf%
bcdedit /set {dbgsettings} dhcp No
rem rebuilt BCDs don't contain these sections / inheritance, and prevents Microsoft Kernel Debug Network Adapter from appearing
bcdedit /set {current} inherit {globalsettings}
bcdedit /create {globalsettings} > NUL 2>&1
bcdedit /set {globalsettings} inherit {dbgsettings}
pause
还有由没有 DNS 标记为“公共”的静态网络引起的防火墙问题,我有这个 powershell 代码片段来修复它,但它在启动时是必需的......我只是禁用了这台目标机器的防火墙来缓解这个问题。
# Name : Unidentified network
# InterfaceAlias : nameOfYourNetworkAdapter
# InterfaceIndex : 6
# NetworkCategory : Public
# IPv4Connectivity : NoTraffic
# IPv6Connectivity : NoTraffic
# converts the "Public" network to "Private" so file sharing and such works with Windows firewall
# this is good for local connections that do not need gateway / dns
get-netconnectionprofile -InterfaceAlias *
set-netconnectionprofile -InterfaceAlias nameOfYourNetworkAdapter -NetworkCategory Private
get-netconnectionprofile -InterfaceAlias *
# note, I don't believe this persists between reboots... so add to startup menu if needed
# it makes it easier to rename your nework adapter to 'debug' or something without spaces