网络连通性排查:从 Ping 到端口可达性

远程控制出问题,十有八九是网络不通。别急着怀疑软件配置,先把网络这关过了再说。

我个人习惯,排查网络问题就三板斧:Ping、Traceroute、Telnet/nc。这三招用熟了,80% 的问题都能定位到。

网络连通性排查三板斧 网络连通性排查 Ping 命令 Traceroute 路径追踪 端口可达性测试 ICMP 回显 延迟/丢包 逐跳探测 路径定位 Telnet nc 从 Ping 开始 → 不通则 Traceroute → 通但连不上则测端口

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 不通时,试试 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% 就要警惕了。
注意:有些服务器会禁用 ICMP 回应。Ping 不通不代表网络不通,只是说明 ICMP 被拦截了。这时候就要用端口测试了。

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)
避坑指南:我曾经在 Windows 上用 tracert 怎么都看不到最后一跳,换了 Linux 的 traceroute -T -p 443 目标IP(TCP 模式),一下就通了。因为中间防火墙只放行了 TCP 443 端口。

3. 端口可达性测试:Telnet 和 nc

Ping 通了,Traceroute 也正常,但远程控制软件就是连不上。为什么?

因为 Ping 只测 ICMP,不测端口。远程控制用的是 TCP 协议,你得确认目标端口是开放的。

Telnet:最直接的端口测试

telnet 192.168.1.100 3389

如果端口开放,你会看到一个空白窗口或收到欢迎信息。如果端口关闭,会提示「连接失败」或「无法打开连接」。

注意:Windows 10/11 默认没装 Telnet 客户端。你需要去「启用或关闭 Windows 功能」里勾上。或者直接用下面的 nc。

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(网络级身份认证)没关,客户端版本不匹配。端口通,不代表服务能正常用。这一点要记住。

排查流程总结

  1. 先 Ping:确认基本连通性和延迟。
  2. Ping 不通? 用 Traceroute 看断在哪一跳。
  3. Ping 通了? 用 Telnet/nc 测目标端口。
  4. 端口不通? 检查防火墙、安全组、服务是否启动。
  5. 端口通了? 检查应用层配置(认证、协议版本等)。

嗯,这三板斧用熟了,远程控制通信异常排查你就入门了。记住,网络问题不可怕,可怕的是没有排查思路。