linux ping命令原理与用法(ping指令)ICMP(Internet Control Message Protocol,互联网控制报文协议)TTL(Time to Live)数据包生存时间

ping命令是用于测试网络连通性的工具,基于ICMP协议。本文介绍了ping的各种命令行选项,如-a(可听ping)、-A(自适应ping)、-c(发送数据包次数)等,并解释了TTL、时间戳和生存时间等概念。同时,展示了成功和失败的ping结果示例,以及如何解读ping统计数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文章目录


在这里插入图片描述

ping命令

Ping是一种网络工具,用于测试主机之间的连通性。它基于ICMP(Internet Control Message Protocol,互联网控制报文协议)来发送探测包并接收响应。

Ping工具发送一个ICMP Echo Request(回显请求)消息到目标主机,目标主机收到请求后会返回一个ICMP Echo Reply(回显回复)消息作为响应。通过比较发送和接收的消息,可以确定主机之间的连通性和延迟。

ICMP协议是在网络层(OSI模型中的第三层)工作的,不依赖于特定的端口号。因此,Ping不使用特定的端口来发送和接收消息。它使用ICMP协议的类型和代码字段来标识和处理不同类型的消息。

需要注意的是,Ping工具通常在操作系统的网络协议栈中实现,而不是通过特定的端口进行通信。因此,Ping不会占用或使用特定的端口号。

ping命令用法

文档

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

For more details see ping(8).

翻译

用中文翻译如下:

用法
  ping [选项] <目标>

选项:
  <目标>              DNS名称或IP地址
  -a                 使用可听的ping
  -A                 使用自适应ping
  -B                 使用固定源地址
  -c <次数>           在收到 <次数> 个回复后停止
  -D                 打印时间戳
  -d                 使用SO_DEBUG套接字选项
  -f                 洪水式ping
  -h                 打印帮助并退出
  -I <接口>          接口名称或地址
  -i <间隔>          发送每个数据包之间的间隔时间(秒)
  -L                 禁止回送多播数据包
  -l <预加载>        在等待回复时发送 <预加载> 个数据包
  -m <标记>          标记发送的数据包
  -M <pmtud选项>     定义MTU发现,可以是<do|dont|want>之一
  -n                 不进行DNS名称解析
  -O                 报告未完成的回复
  -p <模式>          填充字节的内容
  -q                 静默输出
  -Q <tclass>        使用服务质量<tclass>-s <大小>          使用 <大小> 作为要发送的数据字节数
  -S <大小>          使用 <大小> 作为SO_SNDBUF套接字选项的值
  -t <ttl>           定义生存时间
  -U                 打印用户到用户的延迟
  -v                 详细输出
  -V                 打印版本并退出
  -w <截止时间>      等待回复的截止时间(秒)
  -W <超时时间>      等待响应的时间

IPv4选项:
  -4                 使用IPv4
  -b                 允许ping广播
  -R                 记录路由
  -T <时间戳>        定义时间戳,可以是<tsonly|tsandaddr|tsprespec>之一

IPv6选项:
  -6                 使用IPv6
  -F <流标签>        定义流标签,默认为随机值
  -N <nodeinfo选项>  使用icmp6节点信息查询,尝试使用<help>作为参数

更多详细信息请参见ping(8)

示例

下面是对每个参数的含义和示例的解释:

- <destination>:目标主机的DNS名称或IP地址。

示例:ping www.example.comping 192.168.0.1

在这里插入图片描述

- -a:使用可听的ping。当发送ping请求时,会发出声音提示。

示例:ping -a www.example.com

应该会有声音

- -A:使用自适应ping。根据网络状况自动调整ping的间隔时间。(无延时ping)

示例:ping -A www.example.com

ping得很快,瞬间就ping了几千下:

在这里插入图片描述

- -B:使用固定源地址。在多个网络接口上进行ping时,指定使用特定的源地址。(不知道怎么玩)

示例:ping -B 192.168.0.2 www.example.com

不知道咋玩:

在这里插入图片描述

20230817 解释:

解释:
在一个有多个网络接口(即多个IP地址)的系统中,使用ping命令时,系统通常会自动选择源IP地址。选择的原则一般是与目标IP地址最接近的那个源IP地址。但有时,我们可能希望指定特定的源IP地址发送ICMP请求。
这就需要用到ping命令的-B参数。-B参数允许你设置一个固定的源IP地址,也就是说,无论目标IP地址是什么,ping命令都会从这个设定的源IP地址发送出去。
例如,如果你的系统有两个网络接口,其IP地址分别为192.168.1.100和192.168.2.100,你可以通过ping -B 192.168.1.100 target_ip命令来指定从192.168.1.100这个地址发送ICMP请求。
这样做的一个主要原因是,在某些网络配置或者故障排查情况下,你可能需要从特定的网络接口进行测试,而不是任由系统自动选择。

但还是ping不通是啥原因?

在这里插入图片描述

- -c <count>:在收到指定数量的回复后停止ping。

示例:ping -c 5 www.example.com

在这里插入图片描述

- -D:打印时间戳。在每个ping回复中打印时间戳。

示例:ping -D www.example.com

在这里插入图片描述

- -d:使用SO_DEBUG套接字选项。启用调试模式,打印更多调试信息。

示例:ping -d www.example.com

在这里插入图片描述

- -f:洪水式ping。连续发送ping请求,不等待回复。

示例:ping -f www.example.com

在这里插入图片描述

- -h:打印帮助并退出。显示ping命令的帮助信息。

示例:ping -h

- -I <interface>:指定要使用的网络接口名称或地址。

示例:ping -I eth0 www.example.com

在这里插入图片描述

- -i <interval>:指定发送每个数据包之间的间隔时间(秒)。

示例:ping -i 1 www.example.com

在这里插入图片描述

- -L:禁止回送多播数据包。不将多播数据包回送到本地回环接口。(搞不太明白咋玩)

示例:ping -L www.example.com

在这里插入图片描述

什么是“禁止回送多播数据包。不将多播数据包回送到本地回环接口”?

-L选项是用于禁止将多播数据包回送到本地回环接口的。在网络中,多播是一种将数据包从一个源发送到多个目的地的通信方式。而本地回环接口是一个虚拟的网络接口,用于将数据包从一个进程发送到同一台主机上的另一个进程,而不经过网络。

当使用-L选项时,ping命令将禁止将多播数据包回送到本地回环接口。这意味着,如果目标地址是一个多播地址,并且本地主机也是该多播组的成员,那么ping命令将不会将多播数据包回送给本地回环接口。这样可以避免在本地主机上接收到自己发送的多播数据包,从而避免产生冗余的网络流量和处理开销。

需要注意的是,-L选项只在目标地址是多播地址且本地主机是该多播组的成员时才会生效。对于其他类型的目标地址,该选项不会产生任何影响。

- -l <preload>:在等待回复时发送指定数量的数据包。

示例:ping -l 10 www.example.com

在这里插入图片描述

“在等待回复时发送指定数量的数据包”有什么用?

-l <preload>选项用于在等待回复时发送指定数量的数据包。preload参数指定了在等待回复期间要发送的数据包数量。

这个选项的作用是在等待每个ping回复时,提前发送多个数据包。这样可以增加网络负载,以便更好地测试网络的性能和稳定性。通过发送多个数据包,可以更好地模拟实际网络中的流量情况,并更全面地评估网络的响应能力。

使用-l选项时,需要注意合理设置preload参数的值。如果设置得太高,可能会导致网络拥塞或目标主机无法及时处理所有的数据包。因此,建议根据网络环境和目标主机的处理能力来选择合适的preload值,以确保测试的准确性和可靠性。

- -m <mark>:标记发送的数据包。可以用于标识特定的数据包流。(后面未详细研究和测试)

示例:ping -m 1234 www.example.com

- -M <pmtud opt>:定义MTU发现的选项,可以是dodontwant之一。

示例:ping -M want www.example.com

- -n:不进行DNS名称解析。直接使用IP地址进行ping。

示例:ping -n 192.168.0.1

- -O:报告未完成的回复。显示未收到回复的ping请求。

示例:ping -O www.example.com

- -p <pattern>:填充字节的内容。指定填充数据包的内容。

示例:ping -p ABCD www.example.com

- -q:静默输出。只显示最终结果,不显示详细信息。

示例:ping -q www.example.com

- -Q <tclass>:使用指定的服务质量(QoS)位。

示例:ping -Q 5 www.example.com

- -s <size>:指定要发送的数据字节数。

示例:ping -s 100 www.example.com

- -S <size>:指定SO_SNDBUF套接字选项的值。

示例:ping -S 8192 www.example.com

- -t <ttl>:定义生存时间(TTL)。指定数据包在网络上的最大生存时间。

示例:ping -t 64 www.example.com

- -U:打印用户到用户的延迟。显示用户之间的延迟时间。

示例:ping -U www.example.com

- -v:详细输出。显示更多详细信息。

示例:ping -v www.example.com

- -V:打印版本并退出。显示ping命令的版本信息。

示例:ping -V

- -w <deadline>:等待回复的截止时间(秒)。如果在指定的时间内没有收到回复,则停止ping。

示例:ping -w 5 www.example.com

- -W <timeout>:等待响应的时间(秒)。如果在指定的时间内没有收到回复,则认为请求超时。

示例:ping -W 2 www.example.com

- -4:使用IPv4。强制使用IPv4协议进行ping。

示例:ping -4 www.example.com

- -b:允许ping广播。允许向广播地址发送ping请求。

示例:ping -b 192.168.0.255ping -b 192.168.1.255

ping广播存在的问题

使用ping -b命令去ping广播地址和单独ping网段下的每一个IP地址,主要有以下区别:

  1. 工作方式:当你使用ping -b去ping一个广播地址时,你在网络上发送了一个包,所有在该网络中的设备都会收到并响应这个包。而当你逐一ping网段下的每个IP地址时,你是向特定的IP地址发送请求,并等待其回应。

  2. 效率:如果你想要检查网络中所有设备的连通性,使用ping -b会更有效率,因为你只需要发送一个包就可以了。但是,如果你只关心特定的几个设备,那么直接ping这些设备的IP地址可能更好。

  3. 响应结果:通过ping广播地址,你可以快速地看到哪些设备在线,但是可能无法确定没有响应的设备是处于关闭状态还是由于配置问题不响应广播ping。而逐一ping各个IP地址可以得到每个地址的具体响应情况。

  4. 安全性:对于某些网络设备来说,由于安全考虑,可能被配置为不响应广播ping,但仍然会响应针对其IP地址的单独ping。

  5. 网络负载:频繁使用广播ping可能会增加网络负载,因为所有设备都会收到请求并发出响应。而单独ping每个IP地址则只会影响到特定设备。

使用广播ping时可能会存在很多设备没有响应的清空,可能的原因是这些设备被配置为不响应广播请求。但是直接用ping命令还是可以ping到的。所以感觉这个ping -b有点鸡肋?

- -R:记录路由。在ping请求中记录数据包的路由路径。

示例:ping -R www.example.com

- -T <timestamp>:定义时间戳的类型,可以是tsonlytsandaddrtsprespec之一。

示例:ping -T tsandaddr www.example.com

- -6:使用IPv6。强制使用IPv6协议进行ping。

示例:ping -6 www.example.com

- -F <flowlabel>:定义流标签,默认为随机值。

示例:ping -F 1234 www.example.com

- -N <nodeinfo opt>:使用icmp6节点信息查询,尝试使用help作为参数。

示例:ping -N help www.example.com

ping结果解读

成功1

root@sx-virtual-machine:/userdata/testOtherPrj/test# ping 192.168.1.1
PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.
64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=0.545 ms
64 bytes from 192.168.1.1: icmp_seq=2 ttl=64 time=0.720 ms
64 bytes from 192.168.1.1: icmp_seq=3 ttl=64 time=0.546 ms
^C
--- 192.168.1.1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2037ms
rtt min/avg/max/mdev = 0.545/0.603/0.720/0.082 ms
root@sx-virtual-machine:/userdata/testOtherPrj/test# 

以下是对每个部分的含义进行解释:

  • PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.:表示正在对IP地址为192.168.1.1的主机进行ping测试,发送的数据包大小为56字节(包括IP头部和ICMP头部),实际传输的数据大小为84字节。

  • 64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=0.545 ms:表示收到来自192.168.1.1主机的回复,数据包大小为64字节,icmp_seq表示ICMP序列号,ttl表示生存时间(Time to Live),time表示往返时间(Round Trip Time)。

  • ^C:表示用户通过按下Ctrl+C键来终止ping命令。

  • --- 192.168.1.1 ping statistics ---:表示ping统计信息的开始。

  • 3 packets transmitted, 3 received, 0% packet loss, time 2037ms:表示发送了3个数据包,收到了3个回复,丢包率为0%,总共花费了2037毫秒的时间。

  • rtt min/avg/max/mdev = 0.545/0.603/0.720/0.082 ms:表示往返时间的统计信息,其中min表示最小往返时间,avg表示平均往返时间,max表示最大往返时间,mdev表示往返时间的标准差。

失败1

root@sx-virtual-machine:/userdata/testOtherPrj/test# 
root@sx-virtual-machine:/userdata/testOtherPrj/test# ping 192.168.1.141
PING 192.168.1.141 (192.168.1.141) 56(84) bytes of data.
From 192.168.1.140 icmp_seq=1 Destination Host Unreachable
From 192.168.1.140 icmp_seq=2 Destination Host Unreachable

  • From 192.168.1.140 icmp_seq=1 Destination Host Unreachable:表示从IP地址为192.168.1.140的主机发送的ping请求未能到达目标主机(192.168.1.141),因为目标主机不可达(Destination Host Unreachable)。这可能是由于网络配置问题、目标主机关闭或防火墙阻止了ping请求等原因导致的。

解读一下:TTL(Time to Live)数据包生存时间

TTL(Time to Live)字段是IP数据包头部的一个字段,用于限制数据包在网络中的生存时间。每经过一个路由器,TTL值就会减少1。当TTL值减少到0时,路由器会丢弃该数据包并发送一个ICMP时间超过(Time Exceeded)消息给源主机。

在示例中,TTL值为64,这是因为在大多数操作系统中,初始的TTL值通常设置为64。当数据包经过一个路由器时,TTL值会减少1,因此在回复中显示的TTL值也是64。这并不意味着所有的网络中的TTL值都是64,实际上,TTL值可能因网络配置而有所不同。

TTL的主要目的是防止数据包在网络中无限循环,确保数据包能够在合理的时间内到达目的地或被丢弃。

20230724 安装ping命令

# ubuntu
apt-get update
apt-get install -y iputils-ping
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Dontla

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值