Linux ping 命令超详细完整教程
一、ping 基础原理
ping 基于 ICMP 协议(Internet 控制报文协议) ,发送 ICMP Echo Request 请求包,目标主机收到后回复 ICMP Echo Reply,以此判断:
- 主机是否在线、网络连通性
- 网络延迟(往返时间 RTT)
- 丢包率、网络抖动
注意:Linux 默认持续发包;Windows ping 默认只发4个包。
防火墙/云服务器安全组若拦截 ICMP,会 ping 不通,但 TCP 端口可正常访问。
二、基础语法
bash
ping [选项] 目标IP/域名
示例最简用法:
bash
ping www.baidu.com
ping 8.8.8.8
ping 192.168.1.1
输出字段详解(以 ping baidu 为例)
64 bytes from 180.101.49.11: icmp_seq=1 ttl=56 time=22.3 ms
64 bytes:ICMP 数据包大小(默认64字节)180.101.49.11:目标服务器IPicmp_seq:报文序列号,断号代表丢包ttl:生存时间,每经过一台路由自动-1,归零丢弃;可粗略判断网段距离time=22.3ms:往返延迟,数值越小网络越快
结束 ping(按 Ctrl + C)后汇总统计:
--- www.a.shifen.com ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4006ms
rtt min/avg/max/mdev = 20.123/22.156/24.890/1.620 ms
transmitted:发送包总数received:接收回复包packet loss:丢包率rtt min:最小延迟avg:平均延迟max:最大延迟mdev:抖动(延迟波动,越小网络越稳定)
三、高频常用参数(最全分类)
1. 控制发包数量(-c count)
指定发送多少个包后自动停止,不用手动 Ctrl+C
bash
# 发4个包后结束
ping -c 4 8.8.8.8
2. 控制发包间隔(-i 秒)
两个数据包之间等待时间,默认1秒;root 可小于0.2秒
bash
# 每0.5秒发1个包(需要root)
sudo ping -i 0.5 192.168.1.1
# 每3秒发一个包
ping -i 3 www.baidu.com
3. 设置数据包大小(-s 字节)
自定义 ICMP 数据载荷大小,总报文 = 载荷 + 8字节ICMP头
bash
# 载荷1000字节,整体包1008字节
ping -s 1000 192.168.1.1
# 测试MTU,标准以太网MTU1500,扣除28字节头,最大载荷1472
ping -s 1472 www.baidu.com
4. 存活时间TTL(-t / -m)
限制路由跳数,超过直接丢弃,常用于路由链路探测
bash
# 最多经过10台路由
ping -m 10 www.baidu.com
5. 静默模式,只看最终统计(-q)
不输出每一条响应,结束只打印汇总数据,适合脚本
bash
ping -c 10 -q 8.8.8.8
6. 快速发包模式(-f 洪水模式,root专用)
尽可能高速发包,压力测试网络,屏幕打印 . 代表发包,回显代表收到
bash
sudo ping -f 192.168.1.1
# 洪水模式+指定包数
sudo ping -f -c 1000 192.168.1.1
7. 超时等待时间(-W 秒)
单个包多久没回复判定超时丢包,默认4秒
bash
# 2秒无回复即超时
ping -W 2 10.0.0.99
8. 绑定指定网卡/源IP发包(-I)
多网卡服务器,指定从某张网卡或某个本机IP发出ping包
bash
# 指定网卡eth0
ping -I eth0 192.168.1.1
# 指定本机源IP
ping -I 10.0.0.5 8.8.8.8
9. 仅输出IP,不解析域名(-n)
关闭DNS反向解析,加速输出,排查DNS卡顿必备
bash
ping -n www.baidu.com
10. 记录路由(-R,路由追踪,受限)
记录数据包经过的路由节点,仅IPv4,最多9跳,现在推荐用traceroute替代
bash
ping -R www.baidu.com
11. IPv6专用 ping(-6)
只使用IPv6协议ping域名/IPv6地址
bash
ping -6 ipv6.baidu.com
ping -6 2400:da00::6666
四、实用组合案例(生产运维常用)
案例1:简单连通性检测(脚本常用)
发送3个包,超时2秒,静默输出,判断主机存活
bash
ping -c 3 -W 2 -q 192.168.1.1 > /dev/null && echo "主机在线" || echo "主机离线"
案例2:持续监控网关延迟,每1秒打印
bash
ping 192.168.1.1
案例3:网络压力测试(内网压测)
每秒大量发包,10000个包结束
bash
sudo ping -f -c 10000 -i 0.1 192.168.1.100
案例4:MTU 值探测(排查数据包分片丢包)
逐步减小包大小,找到能正常通的最大包
bash
# 先测1472,不通再递减
ping -M do -s 1472 www.baidu.com
参数 -M do:禁止数据包分片,分片则直接返回错误,精准定位MTU
案例5:多网卡,指定业务网卡ping外网
bash
ping -I eth1 -c 4 8.8.8.8
案例6:IPv6连通性测试
bash
ping -6 -c 4 2400:da00::6666
五、常见状态与故障排查
1. 全部请求超时 / Destination Host Unreachable
Destination Host Unreachable:同网段找不到目标IP,主机关机、IP错误、二层不通Request timeout:路由可达,但目标防火墙拦截ICMP、服务器宕机、链路断
2. 高丢包率
- 网线/无线信号差、交换机端口故障、带宽打满、防火墙限流ICMP
- 使用
ping -f洪水模式复现丢包,定位网络稳定性
3. ttl 数值异常
- 内网Windows主机默认TTL=128,Linux默认TTL=64
- ttl差值可粗略算路由跳数:
64 - 显示ttl = 经过路由数量
4. ping 域名不通,ping IP正常
DNS解析故障,检查 /etc/resolv.conf 或DNS服务器
5. 能ping通,但访问网页/端口失败
服务器防火墙放行ICMP,但拦截80/443等业务端口,ping仅测三层连通,不检测四层端口
六、ping 在 Shell 脚本实战模板
脚本1:批量检测主机存活
bash
#!/bin/bash
ips=("192.168.1.1" "192.168.1.10" "10.0.0.5")
for ip in ${ips[@]};do
ping -c 2 -W 1 $ip > /dev/null
if [ $? -eq 0 ];then
echo "$ip 在线"
else
echo "$ip 离线"
fi
done
脚本2:持续监控,延迟过高告警
bash
#!/bin/bash
target="www.baidu.com"
while true;do
# 取平均延迟
avg=$(ping -c 4 $target | awk '/rtt avg/ {print $4}' | cut -d '/' -f2)
# 延迟大于80ms输出警告
if (( $(echo "$avg > 80" | bc -l) ));then
echo "警告:$target 当前平均延迟 ${avg}ms"
fi
sleep 2
done
七、补充知识点
- 权限限制 :
-f洪水模式、-i <0.2快速发包必须root;普通用户只能间隔≥1秒发包 - ICMP 安全:公网服务器建议限制ICMP速率,防止洪水攻击;云厂商安全组可单独放行/禁用ICMP
- 替代工具:
traceroute/mtr:追踪完整路由、持续可视化链路质量telnet/nc:检测TCP/UDP端口连通(ping无法测端口)
- 跨系统差异:
- Windows ping:默认4包,参数
-n指定数量,-w超时 - macOS ping 参数与 Linux 基本通用
- Windows ping:默认4包,参数