ping 命令详解

一、命令概述

ping 是 Linux/Unix 系统中最常用的网络连通性测试工具,通过发送 ICMP ECHO_REQUEST 数据包到目标主机,监听其返回的 ICMP ECHO_RESPONSE 数据包,判断主机是否可达、网络延迟及丢包率。核心用途包括:

  • 验证主机/网关的存活状态;
  • 排查网络故障(如链路中断、高延迟、丢包);
  • 测试网络性能(往返时间 RTT、数据包丢失率)。

支持 IPv4 和 IPv6(通过 -4/-6 强制指定),且 ping6 已合并到 ping 中(创建 ping6 符号链接即可复用 IPv6 功能)。

二、命令语法

ping [-aAbBdDfhLnOqrRUvV46] 
     [-c count] [-F flowlabel] [-i interval] [-I interface] [-l preload] [-m mark] 
     [-M pmtudisc_option] [-N nodeinfo_option] [-w deadline] [-W timeout] 
     [-p pattern] [-Q tos] [-s packetsize] [-S sndbuf] [-t ttl] [-T timestamp_option] 
     [hop ...] destination
  • destination:必填,目标主机(可填域名、IPv4 地址、IPv6 地址;IPv6 链路本地地址需加 %接口名,如 fe80::1%eth0);
  • 选项规则:短选项可合并(如 -av),部分选项需带参数(如 -c 5)。

三、选项详解

按功能分类整理所有选项,标注核心作用、参数说明及使用场景:

3.1 协议与地址控制

选项 功能描述 示例
-4 仅使用 IPv4 协议(默认优先 IPv4,无 IPv4 时尝试 IPv6)。 ping -4 www.baidu.com(强制 IPv4 ping 百度)
-6 仅使用 IPv6 协议。 ping -6 ipv6.baidu.com(IPv6 ping 百度)
-B 禁止修改探测包的源地址(固定为命令启动时选择的源地址)。 ping -B -I eth0 www.baidu.com(固定从 eth0 的地址发送包)
-I interface 指定发送包的源接口/源地址
- 若为接口名(如 eth0):绑定该接口发送;
- 若为 IP 地址:绑定该地址为源地址。
(IPv6 链路本地地址必须指定此选项或用 %接口名
ping -I eth1 192.168.1.1(从 eth1 接口 ping 网关)
-r 绕过系统路由表,直接发送到直连网络的主机(非直连主机返回错误)。 ping -r -I eth0 192.168.1.100(直连主机直接通信,不查路由)

3.2 数据包发送控制

选项 功能描述 注意事项/示例
-c count 发送 count 个 ECHO_REQUEST 包后停止(默认持续发送,需 Ctrl+C 中断)。 ping -c 5 www.baidu.com(发送 5 个包后退出)
-i interval 发送两个包之间的间隔时间(单位:秒,默认 1 秒)。 - 普通用户最小间隔 0.2 秒,root 无限制;
- 示例:ping -i 0.5 -c 10 192.168.1.1(每 0.5 秒发 1 个,共 10 个)
-l preload 预先发送 preload 个包,不等待回复(“批量发送”)。 - 普通用户最大 preload=3,root 无限制;
- 示例:ping -l 10 -c 10 192.168.1.1(先发 10 个包,再等回复)
-f 洪水 ping(快速发送包,用于压力测试):
- 发送包时打印 .,收到回复时打印退格;
- 未指定 -i 时,间隔设为 0(最快速度)。
- 仅 root 可用(普通用户间隔最低 0.2 秒);
- 示例:sudo ping -f 192.168.1.1(洪水 ping 网关)
-w deadline 总超时时间(单位:秒),无论发送/接收多少包,到时间后强制退出。 ping -w 10 -c 20 www.baidu.com(10 秒内最多发 20 个包,到时间即停)
-W timeout 单个包的等待回复超时时间(单位:秒),超时未收到回复则视为丢包。 ping -W 2 -c 5 192.168.1.1(每个包等待 2 秒,共 5 个)
-s packetsize 指定 ICMP 数据包中数据部分的大小(单位:字节,默认 56 字节)。 - 总 ICMP 包大小 = 数据大小 + 8 字节 ICMP 头(默认 64 字节);
- 示例:ping -s 100 -c 3 192.168.1.1(数据 100 字节,总包 108 字节)
-p pattern 自定义数据包的填充内容(16 字节以内,用十六进制表示),用于测试数据依赖问题。 ping -p ff -c 3 192.168.1.1(填充全 1 数据,排查链路数据兼容性)

3.3 网络参数与策略

选项 功能描述 示例
-t ttl 设置 IP 包的 TTL(生存时间)(跳数限制,每经过一个路由器减 1,为 0 时丢弃)。 ping -t 10 www.baidu.com(TTL 设为 10,最多经过 10 个路由器)
-M pmtudisc_option 配置 路径 MTU 发现(PMTU) 策略(避免数据包分片):
- do:禁止分片(包超 MTU 则丢包);
- want:开启 PMTU 发现,本地可分片;
- dont:不设置 DF(不分片)标志。
ping -M do -s 1500 192.168.1.1(禁止分片,测试 MTU 是否为 1500)
-Q tos 设置 ICMP 包的 TOS(服务类型) 字段(十进制/十六进制,对应 DiffServ 或优先级)。 ping -Q 0x10 -c 3 www.baidu.com(设置 TOS 为 16,高优先级)
-m mark 给发送的包添加 标记(mark),用于内核策略路由(如基于标记选择出口)。 sudo ping -m 100 192.168.2.1(包标记 100,配合路由规则使用)
-F flowlabel IPv6 特有,设置 20 位 流标签(十六进制):
- 0:内核随机分配;
- 非 0:使用指定值。
ping -6 -F 1a2b 240c::6666(IPv6 包流标签设为 0x1a2b)
-R 启用 路由记录(在 ECHO_REQUEST 中添加 RECORD_ROUTE 选项,显示包经过的路由器)。 ping -R -c 1 www.baidu.com(显示 ping 百度的路由路径)
-L 禁止多播包的回环(仅当目标为多播地址时生效)。 ping -L -c 3 224.0.0.1(多播 ping 时不接收自身发送的包)

3.4 输出与显示控制

选项 功能描述 示例
-a 声音提示(收到回复时发出蜂鸣声)。 ping -a -c 5 192.168.1.1(收到回复时响铃)
-A 自适应 ping(根据往返时间调整发送间隔,确保网络中不超过 1 个未回复包)。 ping -A www.baidu.com(高延迟网络中自动降低发送频率)
-D 每个输出行前添加 时间戳(Unix 时间 + 微秒,如 1716000000.123456)。 ping -D -c 3 www.baidu.com(带时间戳记录 ping 结果,便于日志分析)
-n 仅显示数字地址(不解析域名,加快输出)。 ping -n www.baidu.com(输出 180.101.49.12 而非域名)
-q 安静模式(仅显示启动和结束时的摘要信息,不显示单个包的结果)。 ping -q -c 5 www.baidu.com(仅输出总丢包率、平均 RTT 等摘要)
-v 详细模式(输出额外信息,如 ICMP 头细节、路由记录)。 ping -v -R -c 1 192.168.1.1(显示路由记录的详细过程)
-O 发送下一个包前,报告未回复的包数量(配合 -D 便于日志排查丢包)。 ping -O -D -c 10 192.168.1.1(记录未回复包,定位丢包时间点)
-U 显示 完整的端到端延迟(旧行为,默认显示网络往返时间,可能因 DNS 等差异不同)。 ping -U www.baidu.com(兼容旧版本的延迟计算方式)

3.5 IPv6 特有功能(-N)

仅 IPv6 可用,发送 ICMPv6 节点信息查询(RFC4620)(需 CAP_NET_RAW 权限,通常需 root),替代默认的 ECHO_REQUEST:

子选项 功能描述 示例
-N help 显示节点信息查询的帮助。 ping -6 -N help
-N name 查询目标节点的主机名 ping -6 -N name 240c::6666(查询 IPv6 主机的域名)
-N ipv6 查询目标节点的IPv6 地址(可加子选项如 ipv6-global/ipv6-linklocal)。 ping -6 -N ipv6-global 240c::6666(查询目标的全局 IPv6 地址)
-N ipv4 查询目标节点的IPv4 地址 ping -6 -N ipv4 240c::6666(查询 IPv6 主机的 IPv4 地址)

3.6 帮助与版本

选项 功能描述 示例
-h 显示帮助信息(选项列表及简要说明)。 ping -h
-V 显示版本信息并退出。 ping -V

四、关键技术细节

4.1 ICMP 数据包结构

  • 默认大小:数据部分 56 字节 + ICMP 头 8 字节 = 64 字节(不含 IP 头,IP 头默认 20 字节);
  • 时间戳:若数据部分 ≥ struct timeval 大小(通常 8 字节),会在数据开头嵌入发送时间戳,用于计算 RTT。

4.2 TTL(生存时间)解析

TTL 表示数据包最多经过的路由器数量(每跳减 1),可通过 ping 结果推断目标主机的操作系统:

  • Linux/Unix:默认 TTL=64 或 255;
  • Windows:默认 TTL=128;
  • 示例ping www.baidu.com 返回 TTL=54 → 说明经过 64-54=10 个路由器。

4.3 重复与损坏数据包

  • 重复包:通常由链路层重传导致,低频率可能正常,高频率需排查链路故障;
  • 损坏包:表明链路或主机硬件故障(如网卡、交换机问题),需紧急处理。

五、退出状态

ping 的退出码可用于脚本判断主机是否可达:

  • 0:至少收到 1 个 ECHO_RESPONSE 包(主机可达);
  • 1:未收到任何回复(主机不可达、超时,或 -w/-c 组合时未达预期包数);
  • 2:命令语法错误或网络错误(如接口不存在、权限不足)。

六、常用示例

示例 1:基础连通性测试(发送 5 个包)

ping -c 5 www.baidu.com

输出包含每个包的 RTT、TTL,及最终的丢包率、平均 RTT 统计。

示例 2:测试 IPv6 连通性

ping -6 -c 3 ipv6.baidu.com

或通过符号链接:ping6 -c 3 ipv6.baidu.com

示例 3:洪水 ping(压力测试,仅 root)

sudo ping -f -c 1000 192.168.1.1

快速发送 1000 个包,测试网关的抗压力能力。

示例 4:带时间戳的日志记录

ping -D -w 30 www.baidu.com > ping.log 2>&1

将 30 秒内的 ping 结果(含时间戳)保存到日志,用于后续分析延迟波动。

示例 5:测试路径 MTU(禁止分片)

ping -M do -s 1472 192.168.1.1
  • 若成功:说明 MTU ≥ 1472+28(IP 头 20 + ICMP 头 8)= 1500 字节(标准以太网 MTU);
  • 若失败(Fragmentation needed):需减小 -s 值,直到找到最大不分片大小。

七、注意事项

  1. 权限限制

    • -f-i <0.2-l >3-N 需 root 权限;
    • 普通用户无法修改 TOS(-Q)或添加包标记(-m)。
  2. 网络负载

    • 洪水 ping(-f)会占用大量带宽,禁止在公网或生产环境使用;
    • 频繁 ping 可能被目标主机防火墙拦截(需确保 ICMP 协议未被禁用)。
  3. IPv6 链路本地地址
    必须指定接口,如 ping -6 fe80::1%eth0%eth0 不可省略)。

八、相关参考

  • 查看路由netstat -rnip route,配合 -r 选项排查路由问题;
  • 接口信息ifconfigip addr,确认 -I 选项指定的接口存在;
  • ICMP 协议:RFC 792(IPv4)、RFC 4443(IPv6)。
Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐