用 ICMP 回显测试 macOS 到目标主机的连通性和往返延迟。
ping 是最基础的连通性测试:-c 限定次数,-n 只输出数字地址,-t 设置整体超时,-W 设置每个包的等待时间。macOS 的 -W 单位是毫秒,Linux 常见实现是秒;macOS 也没有 Linux 的 -w 总时限,跨平台脚本不要直接复制参数。IPv6 用独立的 ping6,而不是 Linux 的 ping -6。
ping 通只能说明 ICMP 到达,不能证明业务端口可用;很多云主机和防火墙默认丢弃 ICMP,表现为 100% 丢包但 HTTPS 正常。反过来,能 ping 通也不代表 DNS、TLS 或应用层正常,需要配合 curl、nc 或 tcpdump。用 -D(Don't Fragment)加大包可以探测路径 MTU,1472 字节负载加 28 字节头部正好是 1500。
持续 ping 会一直占用终端,脚本里务必加 -c 和 -t。-i 可以小于 1 秒,但低于 0.002 秒需要 root;-f 泛洪只允许 root,且会给网络带来明显压力,生产环境不要用。
# 基本连通性和延迟,发 4 个包后退出
% ping -c 4 example.com
# 不做 DNS 反解,排障时输出更干净
% ping -c 4 -n 1.1.1.1
# 每个包最多等 1 秒,整体最多 5 秒
% ping -c 3 -W 1000 -t 5 192.0.2.1
# 大包且不分片,验证路径 MTU 是否为 1500
% ping -c 3 -s 1472 -D example.com
# IPv6 回环和远端
% ping6 -c 3 ::1
% ping6 -c 3 2606:4700:4700::1111
# 快速间隔,0.2 秒一个包
% ping -c 20 -i 0.2 192.0.2.1
# 只要汇总,不要每个包的逐行输出
% ping -c 100 -q example.com
# 收到第一个回复就退出
% ping -o -c 1 example.com
Request timeout for icmp_seq ... 但网页能开:目标或中间设备过滤了 ICMP,改用 nc -vz host 443 或 curl -I 验证 TCP。ping: cannot resolve example.com: Unknown host 是 DNS 失败,不是网络不通;先用 dscacheutil -q host -a name example.com 和 dig 区分解析与路由问题。-W 1000 当成 1000 秒或 Linux 的 -W 秒数,会导致等待行为完全不同;macOS 这里是毫秒。ping -i 0.001 报 Operation not permitted,因为低于 0.002 秒需要 root;普通用户用 0.01 以上更稳妥。-D 只有在包大于路径 MTU 时才有意义;小包加 -D 不会暴露 MTU 问题。traceroute — 定位在哪一跳开始不通dig — 区分“域名解析失败”和“网络不通”curl — 验证 TCP/TLS/HTTP 是否正常tcpdump — 抓 ICMP 请求和回复确认丢在哪一侧合上页面,先回答,再展开对照。
-W 和 -t 分别是什么单位?ping 全部超时,最可能是什么原因?-W 是每个包等待回复的毫秒数,-t 是整个 ping 进程的超时秒数。nc -vz host 443、curl -I)验证业务端口。ping -c 3 -s 1472 -D host:1472 字节负载加 20 字节 IP 头和 8 字节 ICMP 头为 1500,成功说明路径 MTU 至少 1500。
小程序版
微信扫码,随时查命令