网络连通性排查:从 Ping 到端口可达性
远程控制出问题,十有八九是网络不通。别急着怀疑软件配置,先把网络这关过了再说。
我个人习惯,排查网络问题就三板斧:Ping、Traceroute、Telnet/nc。这三招用熟了,80% 的问题都能定位到。
1. Ping 命令:最基础的连通性验证
Ping 用的是 ICMP 协议。说白了,就是发个「你在吗?」的包,对方回个「我在」。就这么简单。
但别小看它。我遇到过太多人,Ping 不通就直接放弃。其实 Ping 的结果里藏着很多信息。
基本用法
# Windows
ping 192.168.1.100
# Linux / macOS
ping -c 4 192.168.1.100
关键参数
| 参数 | 作用 | 我常用的场景 |
|---|---|---|
-t (Windows)-c (Linux) |
持续 Ping / 指定次数 | 长时间监测丢包率 |
-l (Windows)-s (Linux) |
设置包大小 | 测试大包是否被中间设备拦截 |
-i |
设置 TTL 值 | 限制探测范围,只测前几跳 |
ping -l 1472 目标IP。为什么是 1472?因为加上 28 字节的 ICMP 头正好是 1500(标准 MTU)。如果小包通、大包不通,八成是 MTU 问题。
看懂 Ping 的输出
你想想看,一个正常的 Ping 回复长什么样?
Reply from 192.168.1.100: bytes=32 time=1ms TTL=128
这里几个关键信息:
- time:往返延迟。局域网一般 < 5ms,跨运营商 < 50ms 算正常。
- TTL:初始 TTL 减去经过的路由跳数。Windows 初始 128,Linux 初始 64。如果收到 TTL=120,说明经过了 8 跳。
- 丢包率:连续 Ping 100 次,丢包超过 1% 就要警惕了。
2. Traceroute 路径追踪:找到问题出在哪一跳
Ping 不通,或者延迟很高。问题出在哪?是本地网关?运营商?还是目标服务器?
Traceroute 就是干这个的。它利用 TTL 机制,逐跳探测路径上的每个路由器。
基本用法
# Windows
tracert 8.8.8.8
# Linux / macOS
traceroute 8.8.8.8
输出解读
1 <1 ms <1 ms <1 ms 192.168.1.1
2 2 ms 2 ms 2 ms 10.0.0.1
3 * * * Request timed out.
4 15 ms 15 ms 16 ms 202.96.128.86
看到第 3 跳的 * * * 了吗?很多人以为网络断了。其实不一定。
- 星号:可能是该路由器禁用了 ICMP 回复,不代表不通。
- 延迟突然飙升:比如从 2ms 跳到 100ms,说明跨运营商或走了国际链路。
- 连续多跳超时:那才是真有问题。
实战案例:有一次远程控制一台海外服务器,延迟高达 300ms。我用 traceroute 一看,发现流量绕到了欧洲。后来联系运营商调整路由,延迟降到了 150ms。没有 traceroute,你根本不知道问题出在哪。
Windows 和 Linux 的差异
| 特性 | Windows tracert | Linux traceroute |
|---|---|---|
| 默认协议 | ICMP | UDP |
| 超时等待 | 固定 4 秒 | 可配置(-w) |
| 跳过防火墙 | 较难 | 可用 TCP 模式(-T) |
traceroute -T -p 443 目标IP(TCP 模式),一下就通了。因为中间防火墙只放行了 TCP 443 端口。
3. 端口可达性测试:Telnet 和 nc
Ping 通了,Traceroute 也正常,但远程控制软件就是连不上。为什么?
因为 Ping 只测 ICMP,不测端口。远程控制用的是 TCP 协议,你得确认目标端口是开放的。
Telnet:最直接的端口测试
telnet 192.168.1.100 3389
如果端口开放,你会看到一个空白窗口或收到欢迎信息。如果端口关闭,会提示「连接失败」或「无法打开连接」。
nc(Netcat):更强大的工具
# 测试端口是否开放
nc -zv 192.168.1.100 3389
# 测试端口范围
nc -zv 192.168.1.100 3389 3390 3391
# 设置超时(Linux)
nc -zv -w 3 192.168.1.100 3389
-z 表示只扫描不发送数据,-v 显示详细信息。我个人习惯用 nc,因为它比 Telnet 更灵活。
常见远程控制端口
| 协议/软件 | 默认端口 | 备注 |
|---|---|---|
| RDP | 3389 | Windows 远程桌面 |
| SSH | 22 | Linux/Unix 远程控制 |
| VNC | 5900 | 跨平台远程桌面 |
| TeamViewer | 5938 | TCP 直连模式 |
实战经验:有一次客户说 RDP 连不上。我 Ping 通了,Telnet 3389 也显示连接成功。但就是连不上。后来发现是 RDP 的 NLA(网络级身份认证)没关,客户端版本不匹配。端口通,不代表服务能正常用。这一点要记住。
排查流程总结
- 先 Ping:确认基本连通性和延迟。
- Ping 不通? 用 Traceroute 看断在哪一跳。
- Ping 通了? 用 Telnet/nc 测目标端口。
- 端口不通? 检查防火墙、安全组、服务是否启动。
- 端口通了? 检查应用层配置(认证、协议版本等)。
嗯,这三板斧用熟了,远程控制通信异常排查你就入门了。记住,网络问题不可怕,可怕的是没有排查思路。