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.com
或 ping 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发现的选项,可以是do、dont或want之一。
示例: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.255
,ping -b 192.168.1.255
ping广播存在的问题
使用ping -b
命令去ping广播地址和单独ping网段下的每一个IP地址,主要有以下区别:
-
工作方式:当你使用
ping -b
去ping一个广播地址时,你在网络上发送了一个包,所有在该网络中的设备都会收到并响应这个包。而当你逐一ping网段下的每个IP地址时,你是向特定的IP地址发送请求,并等待其回应。 -
效率:如果你想要检查网络中所有设备的连通性,使用
ping -b
会更有效率,因为你只需要发送一个包就可以了。但是,如果你只关心特定的几个设备,那么直接ping这些设备的IP地址可能更好。 -
响应结果:通过ping广播地址,你可以快速地看到哪些设备在线,但是可能无法确定没有响应的设备是处于关闭状态还是由于配置问题不响应广播ping。而逐一ping各个IP地址可以得到每个地址的具体响应情况。
-
安全性:对于某些网络设备来说,由于安全考虑,可能被配置为不响应广播ping,但仍然会响应针对其IP地址的单独ping。
-
网络负载:频繁使用广播ping可能会增加网络负载,因为所有设备都会收到请求并发出响应。而单独ping每个IP地址则只会影响到特定设备。
使用广播ping时可能会存在很多设备没有响应的清空,可能的原因是这些设备被配置为不响应广播请求。但是直接用ping命令还是可以ping到的。所以感觉这个ping -b有点鸡肋?
- -R:记录路由。在ping请求中记录数据包的路由路径。
示例:ping -R www.example.com
- -T <timestamp>:定义时间戳的类型,可以是tsonly、tsandaddr或tsprespec之一。
示例: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值可能因网络配置而有所不同。文章来源:https://www.toymoban.com/news/detail-766547.html
TTL的主要目的是防止数据包在网络中无限循环,确保数据包能够在合理的时间内到达目的地或被丢弃。文章来源地址https://www.toymoban.com/news/detail-766547.html
20230724 安装ping命令
# ubuntu
apt-get update
apt-get install -y iputils-ping
到了这里,关于linux ping命令原理与用法(ping指令)ICMP(Internet Control Message Protocol,互联网控制报文协议)TTL(Time to Live)数据包生存时间的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!