Linux 【01- ping命令超详细教程】
Linux ping 命令超详细完整教程
一、ping 基础原理
ping基于ICMP 协议(Internet 控制报文协议),发送ICMP Echo Request请求包,目标主机收到后回复ICMP Echo Reply,以此判断:
- 主机是否在线、网络连通性
- 网络延迟(往返时间 RTT)
- 丢包率、网络抖动
注意:Linux 默认持续发包;Windows ping 默认只发4个包。
防火墙/云服务器安全组若拦截 ICMP,会 ping 不通,但 TCP 端口可正常访问。
二、基础语法
ping[选项]目标IP/域名示例最简用法:
pingwww.baidu.comping8.8.8.8ping192.168.1.1输出字段详解(以 ping baidu 为例)
64 bytes from 180.101.49.11: icmp_seq=1 ttl=56 time=22.3 ms64 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 mstransmitted:发送包总数received:接收回复包packet loss:丢包率rtt min:最小延迟avg:平均延迟max:最大延迟mdev:抖动(延迟波动,越小网络越稳定)
三、高频常用参数(最全分类)
1. 控制发包数量(-c count)
指定发送多少个包后自动停止,不用手动Ctrl+C
# 发4个包后结束ping-c48.8.8.82. 控制发包间隔(-i 秒)
两个数据包之间等待时间,默认1秒;root 可小于0.2秒
# 每0.5秒发1个包(需要root)sudoping-i0.5192.168.1.1# 每3秒发一个包ping-i3www.baidu.com3. 设置数据包大小(-s 字节)
自定义 ICMP 数据载荷大小,总报文 = 载荷 + 8字节ICMP头
# 载荷1000字节,整体包1008字节ping-s1000192.168.1.1# 测试MTU,标准以太网MTU1500,扣除28字节头,最大载荷1472ping-s1472www.baidu.com4. 存活时间TTL(-t / -m)
限制路由跳数,超过直接丢弃,常用于路由链路探测
# 最多经过10台路由ping-m10www.baidu.com5. 静默模式,只看最终统计(-q)
不输出每一条响应,结束只打印汇总数据,适合脚本
ping-c10-q8.8.8.86. 快速发包模式(-f 洪水模式,root专用)
尽可能高速发包,压力测试网络,屏幕打印.代表发包,回显代表收到
sudoping-f192.168.1.1# 洪水模式+指定包数sudoping-f-c1000192.168.1.17. 超时等待时间(-W 秒)
单个包多久没回复判定超时丢包,默认4秒
# 2秒无回复即超时ping-W210.0.0.998. 绑定指定网卡/源IP发包(-I)
多网卡服务器,指定从某张网卡或某个本机IP发出ping包
# 指定网卡eth0ping-Ieth0192.168.1.1# 指定本机源IPping-I10.0.0.58.8.8.89. 仅输出IP,不解析域名(-n)
关闭DNS反向解析,加速输出,排查DNS卡顿必备
ping-nwww.baidu.com10. 记录路由(-R,路由追踪,受限)
记录数据包经过的路由节点,仅IPv4,最多9跳,现在推荐用traceroute替代
ping-Rwww.baidu.com11. IPv6专用 ping(-6)
只使用IPv6协议ping域名/IPv6地址
ping-6ipv6.baidu.comping-62400:da00::6666四、实用组合案例(生产运维常用)
案例1:简单连通性检测(脚本常用)
发送3个包,超时2秒,静默输出,判断主机存活
ping-c3-W2-q192.168.1.1>/dev/null&&echo"主机在线"||echo"主机离线"案例2:持续监控网关延迟,每1秒打印
ping192.168.1.1案例3:网络压力测试(内网压测)
每秒大量发包,10000个包结束
sudoping-f-c10000-i0.1192.168.1.100案例4:MTU 值探测(排查数据包分片丢包)
逐步减小包大小,找到能正常通的最大包
# 先测1472,不通再递减ping-Mdo-s1472www.baidu.com参数-M do:禁止数据包分片,分片则直接返回错误,精准定位MTU
案例5:多网卡,指定业务网卡ping外网
ping-Ieth1-c48.8.8.8案例6:IPv6连通性测试
ping-6-c42400: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:批量检测主机存活
#!/bin/baships=("192.168.1.1""192.168.1.10""10.0.0.5")foripin${ips[@]};doping-c2-W1$ip>/dev/nullif[$?-eq0];thenecho"$ip在线"elseecho"$ip离线"fidone脚本2:持续监控,延迟过高告警
#!/bin/bashtarget="www.baidu.com"whiletrue;do# 取平均延迟avg=$(ping-c4$target|awk'/rtt avg/ {print $4}'|cut-d'/'-f2)# 延迟大于80ms输出警告if(($(echo "$avg>80"|bc-l)));thenecho"警告:$target当前平均延迟${avg}ms"fisleep2done七、补充知识点
- 权限限制:
-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包,参数
