Ubuntu/linux c开发(8)linux ping 命令解析

发布时间:2024年01月18日
root@san:~# ping -h

Usage
  ping [options] <destination>

Options:
  <destination>      dns name or ip address
  -a                 use audible ping
  -A                 use adaptive ping
  -B                 sticky source address
  -c <count>         stop after <count> replies
  -D                 print timestamps
  -d                 use SO_DEBUG socket option
  -f                 flood ping
  -h                 print help and exit
  -I <interface>     either interface name or address
  -i <interval>      seconds between sending each packet
  -L                 suppress loopback of multicast packets
  -l <preload>       send <preload> number of packages while waiting replies
  -m <mark>          tag the packets going out
  -M <pmtud opt>     define mtu discovery, can be one of <do|dont|want>
  -n                 no dns name resolution
  -O                 report outstanding replies
  -p <pattern>       contents of padding byte
  -q                 quiet output
  -Q <tclass>        use quality of service <tclass> bits
  -s <size>          use <size> as number of data bytes to be sent
  -S <size>          use <size> as SO_SNDBUF socket option value
  -t <ttl>           define time to live
  -U                 print user-to-user latency
  -v                 verbose output
  -V                 print version and exit
  -w <deadline>      reply wait <deadline> in seconds
  -W <timeout>       time to wait for response

IPv4 options:
  -4                 use IPv4
  -b                 allow pinging broadcast
  -R                 record route
  -T <timestamp>     define timestamp, can be one of <tsonly|tsandaddr|tsprespec>

IPv6 options:
  -6                 use IPv6
  -F <flowlabel>     define flow label, default is random
  -N <nodeinfo opt>  use icmp6 node info query, try <help> as argument

命令解析如下

用法:
ping [选项] <目标>
选项:
<目标> dns名称或ip地址

-a

直译(使用可听的ping)主要功能是将目标主机的 DNS 名称解析为 IP 地址,并在 ping 请求中发送;

-A

直译(使用自适应ping) 用于测试网络连接的连通性和网络性能,可以根据网络状况自动调整ping的间隔时间。

-B

粘性源地址,用于禁止ping改变包头的源地址,默认情况下,当使用ping命令时,它会将源地址设置为发送ping请求的机器的IP地址。
然而,在某些情况下,可能需要禁止这种行为,以防止网络上的某些设备或防火墙将ping请求过滤掉。

-c <计数>

在收到<计数>个回复后停止

例子 
ping -c 100 192.168.1.11 ping 100192.168.1.11后自动结束

-D

打印时间戳

例子 
ping -D 192.168.1.11 
[1705559598.181562] 64 bytes from 192.168.1.11: icmp_seq=1 ttl=64 time=0.058 ms

-d

使用SO_DEBUG套接字选项
调试信息可以提供有关ping命令执行的详细信息,例如发送和接收的数据包、网络延迟等。
生成的日志文件默认情况下生成在脚本或命令执行的用户的主目录下。
请注意,您需要具有适当的权限才能使用ping -d选项。

-f

洪水ping
在Linux中,ping -f选项用于执行极限检测。
极限检测是一种特殊类型的ping,用于大量且快速地发送网络封包给目标主机,以查看其响应。使用ping -f选项可以测试目标主机的网络接口和处理器是否能够处理大量请求,并检查网络连接的稳定性。
当使用ping -f选项时,ping命令将使用最大的数据包大小和最短的间隔时间来发送大量的ping请求。这可能会导致目标主机上的网络接口或处理器过载,因此请谨慎使用该选项,并确保您了解其潜在的影响。

-h

打印帮助并退出

-I <接口>

接口名称或地址
默认情况下,ping命令使用主机的默认网络接口发送ping请求。但是,在某些情况下,您可能需要使用其他网络接口发送ping请求。
使用ping -I选项后跟网络接口的名称或IP地址,可以指定ping命令使用该网络接口发送请求。

例如,如果希望通过特定的网络接口(如eth0)发送ping请求,可以执行以下命令:
ping -I eth0 192.168.0.5
上述命令将使用eth0网络接口发送ping请求到IP地址为192.168.0.5的主机。

-i <间隔>

发送每个数据包之间的秒数间隔

例如,以下命令将使用10秒的间隔时间发送ping请求:
ping -i 10 192.168.0.5
上述命令将每10秒发送一次ping请求到IP地址为192.168.0.5的主机,并等待响应。

-L

抑制组播数据包的回环.
ping -L选项用于设置在送出要求信息之前先行发出的数据包数量。
默认情况下,ping命令会先发送一个ping请求,等待目标主机的响应,然后再发送下一个ping请求。但是,使用ping -L选项后跟一个数值,可以设置在发送下一个ping请求之前先行发出的数据包数量。

例如,以下命令将设置在发送下一个ping请求之前先行发出5个数据包:
ping -L 5 192.168.0.5
上述命令将首先发送5个数据包到IP地址为192.168.0.5的主机,然后等待目标主机的响应。

-l <预加载>

在等待回复时发送<预加载>数量的数据包
ping -l选项用于设置在送出要求信息之前先行发出的数据包的大小。
使用ping -l选项后跟一个数值,可以设置先行发出的数据包的大小(以字节为单位)。这可以用于测试网络连接的性能和稳定性。

例如,以下命令将设置先行发出的数据包大小为100字节:
ping -l 100 192.168.0.5
上述命令将首先发送一个100字节的数据包到IP地址为192.168.0.5的主机,然后等待目标主机的响应。

-m <标记>

标记发出的数据包
标记值是一个用于标识数据包的标识符,可以用于路由和过滤等目的。使用ping -M选项后跟一个数值,可以设置要发送的数据包的标记值。

例如,以下命令将设置标记值为0x10:
ping -M 0x10 192.168.0.5
上述命令将发送带有标记值0x10的数据包到IP地址为192.168.0.5的主机。

-M

定义mtu发现,可以是<do|dont|want>之一
在Linux中,ping -M选项用于设置MTU(最大传输单元)分片策略。
MTU是网络通信中一个重要的概念,它表示一个数据包的最大长度。当数据包的大小超过MTU时,它会被分片(fragmented)成多个较小的数据包进行传输。
使用ping -m选项后跟不同的参数可以设置不同的分片策略。以下是几个常见的参数:
do:禁止分片,即使包被丢弃。
want:当包过大时分片。
dont:不设置分片标志(DF flag)。

例如,以下命令将设置MTU分片策略为“do”:
ping -m do 192.168.0.5
上述命令将禁止分片,并发送完整的ping请求到IP地址为192.168.0.5的主机。

-n

不进行dns名称解析

-O

报告未完成的回复

-p <模式>

填充字节的内容
使用ping -p选项后跟一个范本样式,可以设置填充数据包的内容。该选项可以用于测试网络的性能和稳定性,因为不同的填充样式可能会对网络传输产生不同的影响。

例如,以下命令将使用填充样式为“abcd”的ping请求:
ping -p abcd 192.168.0.5
上述命令将发送填充样式为“abcd”的数据包到IP地址为192.168.0.5的主机。

-q

安静输出
使用ping -q选项可以快速查看ping请求的结果,而不必等待和显示每个ping请求的详细输出。

例如,以下命令将只显示ping请求的结果:
ping -q 192.168.0.5
上述命令将快速执行ping请求到IP地址为192.168.0.5的主机,并只显示结果。

-Q

使用服务质量位

-s <大小>

使用<大小>作为要发送的数据字节数
使用ping -s选项后跟一个数值,可以设置发送的数据包大小(以字节为单位)。默认情况下,ping命令发送的数据包大小为56字节(加上8字节的ICMP头,一共是64字节)。通过设置不同的数据包大小,可以测试网络的性能和稳定性。

例如,以下命令将设置发送的数据包大小为100字节:
ping -s 100 192.168.0.5
上述命令将向IP地址为192.168.0.5的主机发送数据包大小为100字节的ping请求。

-S <大小>

使用<大小>作为SO_SNDBUF套接字选项的值
SO_SNDBUF是TCP发送缓冲区的容量上限。当进行send和recv操作时,数据并没有发送出去,而是存放在对应的Send Buffer和Receive Buffer中,立即返回成功。
需要注意的是,SO_SNDBUF的大小并不总是越大越好,因为大的缓冲区可能会导致更多的数据在网络中堆积,从而增加延迟。因此,应根据实际需求和网络状况合理设置SO_SNDBUF的大小。
另外,SO_SNDBUF的大小在内核中是有限制的,不能无限增大。具体的大小可以通过查看内核参数来获取。例如,在Linux系统中,可以使用命令sysctl -a来查看内核参数,其中包含了SO_SNDBUF的值。

-t

定义生存时间(TTL) 常用于设置存活数值(TTL,Time To Live)。
TTL是IP包被路由器丢弃之前允许通过的最大网段数量。通常情况下,不需要特别设置这个值。 使用ping
-t选项后跟一个数值,可以设置存活数值(TTL)。

例如,以下命令将设置TTL的值为64:
ping -t 64 192.168.0.5
上述命令将向IP地址为192.168.0.5的主机发送ping请求,并设置TTL的值为64

-U

打印用户到用户的延迟

-v

详细输出
使用ping -v选项可以查看每个ping请求的详细信息,包括每个请求的响应时间、响应数据大小等。默认情况下,ping命令只显示结果,不显示每个请求的详细信息。

例如,以下命令将使用ping -v选项详细显示ping请求的过程:
ping -v 192.168.0.5
上述命令将向IP地址为192.168.0.5的主机发送ping请求,并详细显示每个请求的执行过程。

-V

打印版本并退出

-w <截止日期>

回复等待<截止日期>秒

-W <超时>

等待响应的时间

IPv4选项:
-4 使用IPv4
-b 允许ping广播地址
-R 记录路由
-T <时间戳> 定义时间戳,可以是<tsonly|tsandaddr|tsprespec>之一
IPv6选项:
-6 使用IPv6
-F <流标签> 定义流标签,默认为随机值
-N <nodeinfo opt> 使用icmp6节点信息查询,尝试将<帮助>作为参数

ping结果指令解析

ping 192.168.40.20
PING 192.168.40.20 (192.168.40.20) 56(84) bytes of data.
64 bytes from 192.168.40.20: icmp_seq=1 ttl=127 time=0.732 ms
64 bytes from 192.168.40.20: icmp_seq=2 ttl=127 time=0.716 ms
64 bytes from 192.168.40.20: icmp_seq=3 ttl=127 time=0.770 ms
64 bytes from 192.168.40.20: icmp_seq=4 ttl=127 time=0.804 ms
64 bytes from 192.168.40.20: icmp_seq=5 ttl=127 time=1.06 ms
^C
--- 192.168.40.20 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4124ms
rtt min/avg/max/mdev = 0.716/0.817/1.063/0.126 ms

这里面的几个参数:

icmp_seq

ping序列,从1开始;

bytes

数据包大小,也就是字节。

time

响应时间,这个时间越小,说明你连接这个地址速度越快。

TTL

Time To Live,表示DNS记录在DNS服务器上存在的时间,它是IP协议包的一个值,告诉路由器该数据包何时需要被丢弃。
拓展:

TTL就是说ping的数 据包 能在网络上存在多少时间。

当我们对网络上的主机进行ping操作的时候,我们本地机器会发出一个数据包,数据包经过一定数量的路由器传送到目的主机,但是由于很多的原因,一些数据包不能正常传送到目的主机,那如果不给这些数据包一个生存时间的话,这些数据包会一直在网络上传送,导致网络开销的增大。
当数据包传送到一个路由器之后,TTL就自动减1,如果减到0了还是没有传送到目的主机,那么就自动丢失。

rtt min/avg/max/mdev

表示最小/最大、平均响应时间和本机硬件耗费时间

PS:linux版本信息如下

Linux localhost.localdomain 4.19.90-24.4.v2101.ky10.aarch64 #1 SMP Mon May 24 14:45:37 CST 2021 aarch64 aarch64 aarch64 GNU/Linux

不同版本有效命令不尽相同,具体使用-h查看自己的命令解析。

文章来源:https://blog.csdn.net/weixin_36196023/article/details/135672643
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。