Linux 【01- ping命令超详细教程】

Linux ping 命令超详细完整教程

一、ping 基础原理

ping 基于 ICMP 协议(Internet 控制报文协议) ,发送 ICMP Echo Request 请求包,目标主机收到后回复 ICMP Echo Reply,以此判断:

  1. 主机是否在线、网络连通性
  2. 网络延迟(往返时间 RTT)
  3. 丢包率、网络抖动

注意: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:目标服务器IP
  • icmp_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

七、补充知识点

  1. 权限限制-f 洪水模式、-i <0.2 快速发包必须root;普通用户只能间隔≥1秒发包
  2. ICMP 安全:公网服务器建议限制ICMP速率,防止洪水攻击;云厂商安全组可单独放行/禁用ICMP
  3. 替代工具:
    • traceroute/mtr:追踪完整路由、持续可视化链路质量
    • telnet/nc:检测TCP/UDP端口连通(ping无法测端口)
  4. 跨系统差异:
    • Windows ping:默认4包,参数 -n 指定数量,-w 超时
    • macOS ping 参数与 Linux 基本通用