桌面悬浮窗小组件,用于网络波动检测和诊断,并辅助定位网络问题出现在哪一段链路(电脑→路由器→互联网)。平时基本不占用资源,固定一段时间检测一次网络质量。
双击安装,不用管理员权限。装完自己打开,停在屏幕右下角,开机也会启动。
窗口不在任务栏里。要退出,展开后点「退出」,或在窗口上右键选「退出」。
左边是这一轮的结论,右边是到互联网的延迟。下面两行分别是到路由器、再到互联网。最后一行时间是上一轮测完的时刻。
单击概况可以展开,按住可以拖动。展开后底部改监测间隔。右键里可以立刻重测、暂停、开关机启动,也可以做丢包率测试、复制诊断结果。
到互联网测的是 223.5.5.5,不走系统代理。每一轮向路由器和这个地址各发 4 个包,每个包最多等 800 毫秒。
一轮里可能同时有好几样问题,窗口只显示先碰到的那一条。
| 窗口上的结论 | 什么时候会这样 |
|---|---|
| 网络正常 | 两段都有回复,延迟稳定,没有明显丢包。路由器不回 ping、但互联网有回复,也算正常,它只是不回答,包还在转发。 |
| 电脑→路由器 未连接 | 找不到路由器。电脑没连上 Wi-Fi,或网线没插好。 |
| 电脑→路由器 链路不通 | 到路由器超时,或 4 个包里丢了一大半(至少 60%,或连续 3 个超时)。到互联网也不通时,同样先看这一段。 |
| 电脑→路由器 链路丢包 | 到路由器还能通,但丢包达到 5%。 |
| 电脑→路由器 链路抖动 | 到路由器有回复,最慢的那个包超过 100 毫秒,并且至少是平均延迟的 3 倍。 |
| 电脑→路由器 信号偏弱 | Wi-Fi 信号低于 45%,或 RSSI 不高于 -75。已经在丢包、抖动时,会优先显示这一条。 |
| 电脑→路由器 2.4GHz 干扰 | 连的是 2.4GHz,信号并不弱(不低于 70%,或 RSSI 不低于 -65),但延迟突然变大,或连续几个包超时。 |
| 路由器→互联网 链路不通 | 到路由器是通的,只有到 223.5.5.5 超时或丢了一大半。 |
| 路由器→互联网 链路丢包 | 路由器正常,到 223.5.5.5 有丢包。丢包达到 20% 会标成严重。 |
| 路由器→互联网 链路抖动 | 到互联网的最慢包超过 100 毫秒,并且至少是平均延迟的 3 倍。 |
| 路由器→互联网 没有回应 | 开着 VPN,到 223.5.5.5 没有回应。这一下不能说明路由器坏了,包可能进了 VPN。 |
| 代理网络不通 | 系统代理开着,国内网站能开,国外网站都不通。 |
| 代理延迟偏高 | 国内网站很快,国外网站都能打开,但都要 1.2 秒以上。 |
| 国内网站不通 | 地址能 ping 通,国内网页却没有回应。 |
| DNS 解析失败 | 地址能 ping 通,网页失败是因为域名没有解析出来。 |
先看窗口上的结论,再做对应的那一步。做完后右键选「立即检测」,或等下一轮,不要连着重启一堆设备。
| 看到的结论 | 建议操作 |
|---|---|
| 网络正常 | 不用处理。路由器不回 ping 时也不要重启。 |
| 电脑→路由器 未连接 | 打开 Wi-Fi,或把网线插紧。还是没有,就关掉 Wi-Fi 再打开。 |
| 电脑→路由器 链路不通 | 关掉 Wi-Fi 再打开。用网线就拔下来重插。还不通,重启路由器,等指示灯稳定后再测。 |
| 电脑→路由器 链路丢包、链路抖动、信号偏弱、2.4GHz 干扰 | 靠近路由器。手机或电脑能连 5GHz 就不要用 2.4GHz。还不行,关掉 Wi-Fi 再打开,最后再重启路由器。 |
| 路由器→互联网 链路不通、链路丢包、链路抖动 | 先重启路由器。家里其他手机、电脑也不上网,再等一会儿,或联系运营商。这一步不用动代理。 |
| 路由器→互联网 没有回应 | 先断开 VPN,再检测一次。不要为此重启路由器。 |
| 代理网络不通 | 退出代理软件再打开,或换一个节点。看一下系统代理是不是开着。 |
| 代理延迟偏高 | 换一个节点。不用重启家里的路由器。 |
| DNS 解析失败、国内网站不通 | 关掉 Wi-Fi 再打开。还不行就重启路由器。只有一个网站打不开,多半是那个网站自己的问题,先等一会儿。 |
Windows 10 1809 或更新,需要 .NET 8 SDK。
dotnet run --project src/NetWatch.App/NetWatch.App.csproj -c Release再运行一次会直接退出,避免开出两个窗口。
在仓库根目录执行:
powershell -ExecutionPolicy Bypass -File build.ps1需要 .NET 8 SDK 和 Inno Setup 6。安装包生成在 dist\NetWatch-Setup.exe。不要把 publish、bin 或 dist 提交进 git。
