网络工具 / 命令文档

Linux ping 命令

$ ping 18 个章节 Linux 命令详解

概述

网络诊断的利器 | 运维工程师必备技能

ping 命令含义

ping 是 "Packet Internet Groper" 的缩写,是一个用于测试网络连通性的命令行工具。它通过发送 ICMP(Internet Control Message Protocol)回显请求包到目标主机,并等待回显应答来检测网络连接状态。

核心原理: ping 基于 ICMP 协议,发送 Echo Request 包,目标主机收到后返回 Echo Reply 包,通过测量往返时间(RTT)来评估网络质量。

基本语法与参数

ping [选项] 目标主机
参数参数说明说明示例示例
-c count-c count指定发送包的数量指定发送包的数量ping -c 4 google.comping -c 4 google.com
-i interval-i interval设置发送间隔(秒)设置发送间隔(秒)ping -i 2 192.168.1.1ping -i 2 192.168.1.1
-s size-s size设置数据包大小(字节)设置数据包大小(字节)ping -s 1024 baidu.comping -s 1024 baidu.com
-t ttl-t ttl设置超时时间(秒);TTL 用 -m 设置设置TTL(生存时间)ping -t 64 8.8.8.8ping -m 64 8.8.8.8 # 设置 TTL=64(-t 64 表示 64 秒后退出)
-w timeout-w timeout设置超时时间(秒)设置超时时间(秒)ping -w 5 example.comping -w 5 example.com
-f-f洪水模式(需要root权限)洪水模式(需要root权限)sudo ping -f 192.168.1.1sudo ping -f 192.168.1.1
-q-q安静模式,只显示统计信息安静模式,只显示统计信息ping -q -c 10 github.comping -q -c 10 github.com

1. 基础连通性测试

ping google.com

最简单的用法,持续发送包直到手动停止(Ctrl+C)

2. 指定数量测试

ping -c 4 192.168.1.1

发送4个包后自动停止

3. IPv6 测试

ping6 ipv6.google.com

使用 ping6 命令测试 IPv6 连接

1. 大包测试

ping -s 1472 -c 5 8.8.8.8

发送大数据包测试MTU和网络承载能力

2. 快速检测

ping -c 1 -W 1 192.168.1.100

发送1个包,超时时间1秒,用于快速检测

3. 记录路由

ping -R -c 3 baidu.com

记录并显示数据包的路由路径

PING google.com (142.250.185.14) 56(84) bytes of data.
64 bytes from nrt20s21-in-f14.1e100.net: icmp_seq=1 time=45.2 ms
64 bytes from nrt20s21-in-f14.1e100.net: icmp_seq=2 time=44.8 ms
64 bytes from nrt20s21-in-f14.1e100.net: icmp_seq=3 time=45.1 ms

--- google.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss
round-trip min/avg/max/mdev = 44.8/45.0/45.2/0.2 ms

时延指标

time=45.2 ms - 往返时延

• <50ms: 优秀

• 50-100ms: 良好

• >100ms: 需要关注

丢包率

0% packet loss

• 0%: 网络稳定

• 1-5%: 轻微拥塞

• >5%: 网络问题

运维使用场景

场景1:网络故障排查

# 测试本地网络
ping -c 3 127.0.0.1
ping -c 3 192.168.1.1  # 网关
ping -c 3 8.8.8.8      # 外网DNS
ping -c 3 google.com   # 域名解析

用途:分层排查网络问题,从本地→网关→外网→DNS解析

场景2:服务器健康检查

# 批量检查服务器状态
for ip in 192.168.1.{10..20}; do
    if ping -c 1 -W 1 $ip &>/dev/null; then
        echo "$ip - 在线"
    else
        echo "$ip - 离线"
    fi
done

用途:快速检查多台服务器的网络连通性

场景3:网络性能监控

# 持续监控网络质量
ping -i 5 -s 1000 目标服务器 | while read line; do
    echo "$(date): $line"
done >> /var/log/network_monitor.log

用途:长期监控网络质量,记录时延和丢包情况

场景4:MTU测试

# 测试最大传输单元
ping -s 1472 -M do 目标主机  # 1472 + 28(ICMP+IP头) = 1500
ping -s 1500 -M do 目标主机  # 超过MTU会分片或失败

用途:确定网络路径的最大传输单元,优化网络传输

场景5:负载均衡检查

# 检查负载均衡器后端服务器
for i in {1..10}; do
    nslookup load-balancer.example.com | grep "Address:"
    ping -c 1 load-balancer.example.com
    sleep 2
done

用途:验证负载均衡配置和后端服务器分布

监控脚本

#!/bin/bash
HOST="8.8.8.8"
LOG="/var/log/ping_monitor.log"

while true; do
    RESULT=$(ping -c 1 -W 3 $HOST 2>&1)
    if [[ $? -eq 0 ]]; then
        echo "$(date): OK - $HOST reachable" >> $LOG
    else
        echo "$(date): FAIL - $HOST unreachable" >> $LOG
        # 发送告警
    fi
    sleep 60
done

统计分析

# 生成网络质量报告
ping -c 100 -i 0.2 目标主机 | \
awk '/time=/ {print $7}' | \
sed 's/time=//' | \
sort -n | \
awk 'BEGIN{sum=0; count=0} 
{sum+=$1; count++; 
if(count==1) min=$1; 
max=$1} 
END{print "平均:", sum/count"ms"; 
print "最小:", min; 
print "最大:", max}'
注意事项: 某些服务器可能禁用ICMP响应,ping不通不代表服务器不可达 防火墙可能阻止ICMP包,需要结合其他工具判断 使用 -f 洪水模式需要root权限,且可能影响网络 在生产环境中谨慎使用大包测试,避免影响正常业务

Q: ping通但应用无法访问?

A: ICMP和应用层协议不同,需要检查:

端口是否开放(用telnet/nc测试)

防火墙规则

应用程序是否正常运行

Q: ping显示"Destination Host Unreachable"?

A: 可能原因:

路由问题,检查路由表

目标主机不存在

网络配置错误

Q: 如何ping IPv6地址?

A: 使用ping6命令:

ping6 2001:4860:4860::8888

Q: 时延很高怎么办?

A: 排查步骤:

traceroute查看路径

检查网络拥塞

确认带宽使用情况

同分类 · 其他命令文档