我们通常判断是否可以访问一个网站最简单的方式是什么,大家都会想到ping它!!!
没错!那么有时候一个网站我们可以访问,但ping不通,那么我们该如何检测链路质量呢?
ping
ping唯一核心目的是:检测两台设备之间在网络层(IP层)的基础连通性和链路质量。
ping 真正能判断的三件事
- IP 级可达性:设备发出的 ICMP 包能否到达目标 IP 并返回。这只能证明"网络路由是通的"。
- 基础延迟(RTT):数据包往返的物理耗时。反映的是光缆/基站/路由器的传输性能,与服务器业务处理速度无关。
- 链路丢包率:连续发送多个包后有多少没回来。反映的是物理线路或中间节点的稳定性。
为什么服务器会屏蔽 ping?
安全防御(最主要原因)
- 防 DDoS:ICMP Flood 是最古老的攻击手段之一,屏蔽 ping 可直接免疫此类攻击。
- 隐藏主机:不让攻击者通过 ping 扫描发现服务器的存在和在线状态。
- 云厂商默认策略:阿里云、AWS、Azure 等云服务器的安全组/防火墙默认禁止所有 ICMP 入站,这是行业惯例。
节省资源
服务器需要优先保障业务流量(HTTP/HTTPS),处理 ICMP 请求会消耗 CPU 和带宽,在高并发场景下属于"不必要的开销"。中间网络设备拦截
即使服务器本身没禁 ping,链路上的运营商路由器、WAF、CDN 节点也可能主动丢弃 ICMP 包。你 ping 不通的可能根本不是目标服务器,而是中间的某个安全设备。
工具tcping
tcping是一个轻量级的命令行网络诊断工具,它通过发起 TCP SYN 握手来测量到目标服务器指定端口的往返时间(RTT)。与传统的ping(基于 ICMP 协议)不同,tcping直接测试业务端口(如 80、443、3306),因此它能真实反映 Web 服务、数据库、API 等实际业务的网络连通性和延迟,且不易被防火墙拦截。下载地址
tcping.exe - ping over a tcp connection
核心特点
- 协议层:工作在 TCP 传输层,而非 ICMP 网络层。
- 工作原理:发送 SYN → 接收 SYN-ACK → 立即发送 RST 断开(不完成三次握手,不传输数据)。
- 穿透性强:只要目标端口对公网开放,就能测试;不受 ICMP 屏蔽策略影响。
- 精准定位:延迟仅包含纯网络传输耗时,不含 DNS、TLS、HTTP 处理时间。
tcping测试的是 TCP 三次握手的往返时间(RTT)。简单来说,它测量的是电脑向目标服务器发起 TCP 连接请求,到收到服务器确认响应所花费的纯网络传输时间。
tcping 的工作原理
当执行tcping -p 443 www.baidu.com时,它只做了以下事情:
- 发送一个 SYN 数据包(握手第一步)
- 等待服务器返回 SYN-ACK 数据包(握手第二步)
- 收到 SYN-ACK 后立即计时结束,并发送 RST 断开连接(不会完成第三步 ACK,也不会传输任何业务数据)
因此,tcping显示的时间 = SYN 到达服务器 + SYN-ACK 返回你电脑的纯网络耗时,不包含 DNS 解析、TLS 握手、HTTP 请求等任何应用层开销。
tcping vs ping vs curl 的区别
| 工具 | 测试内容 | 协议 | 能否穿透防火墙 | 反映的真实场景 |
|---|---|---|---|---|
| ping | ICMP Echo 往返时间 | ICMP | 常被服务器/防火墙屏蔽 | 仅基础网络层连通性 |
| tcping | TCP SYN→SYN-ACK 往返时间 | TCP | 只要端口开放就能测 | 真实业务端口的网络延迟 |
| curl | TCP + TLS + HTTP 完整耗时 | HTTP/S | 用户实际访问体验 |
为什么 tcping 比 ping 更有参考价值?
对于像www.baidu.com:443这样的 HTTPS 服务:
- ping 不通 ≠ 网站不可用:很多服务器禁用了 ICMP,但 443 端口完全正常
- tcping 通 = 业务可用:它直接测试业务端口,结果与实际访问体验高度一致
- tcping 延迟 ≈ 用户感知延迟的基础值:实际 HTTPS 访问延迟 = tcping 延迟 + TLS 握手(约 1~2 RTT)+ 服务端处理时间
tcping 不能告诉我们什么
- 不测试 DNS 解析速度
- 不测试 TLS/SSL 握手耗时
- 不测试 HTTP 响应内容和状态码
- 不测试带宽和吞吐量
总结:tcping是专门用来回答 "我的网络到目标服务器的某个 TCP 端口到底有多快、稳不稳定" 这一个问题的精准工具。对于排查网站访问慢、游戏延迟高、API 超时等问题,它比ping可靠得多。