Linux命令之ping

时间:2021-02-15 07:29:33

ping [选项] destination

ping命令向网络主机发送ICMP回传请求

详细描述:ping使用ICMP协议强制ECHO_REQUEST(回传请求)数据报从主机或网关获取ICMP协议的ECHO_RESPONSE(回传响应)。ECHO_REQUEST(回传请求)数据报(“ping”)有一个IP和ICMP头,之后是一个结构时间值,再之后是一个任意数量的“pad”字节,用于填充数据包。

(1).常用选项

-b 允许ping网关地址
-c count 发送count次ECHO_REQUEST(回传请求)数据包。当有deadline选项(最后期限,-w选项),在超时之前,ping等待ECHO_REPLY(回传响应)直到count次。
-d 在正在使用的socket(套接字)上设置SO_DEBUG选项。本质上,Linux内核不使用此套接字选项。
-f 大量ping,极限ping。每个ECHO_REQUEST(回传请求)打印一个点,每有一个ECHO_REPLY(回传响应)打印一个退格符(Backspace)。这样可以快速显示丢弃的数据包数量。如果没有给出间隔,它会将间隔设置为0,并按照它们返回或每秒百次的速度输出数据包,以多者为准。只有超级用户才可以0间隔使用此选项。
-i interval 发送每个数据包之间等待的间隔(单位秒)。默认设置是等待一秒,极限模式下不等待。只有超级用户可以设置间隔值小于0.2秒。
-I interface address 将源地址设置为指定的接口地址。参数可以是数字IP地址或设备名称。在ping IPv6 linklocal地址时,此选项是必需的。
-l preload 如果指定了preload,则ping发送许多不等待回复的数据包。只有超级用户可以选择超过3的预加载。
-n 仅限数字输出。不会尝试查找主机地址的符号名称
-p pattern 你可以指定最多16个“pad”字节来填充你发送的数据包。这对于诊断网络中的数据以来问题是有用的。例如-p ff将导致充满整个被发送包。
-q 静默输出。除启动和完成时的摘要行外,不显示任何内容
-r 绕过正常的路由表并直接发送到连接接口上的主机。如果主机不在直接连接的网络上,则返回错误。如果还是用了-I选项,则此选项可用于通过没有路由的接口ping本地主机。
-R 记录线路。包含ECHO_REQUEST数据包中的RECORD_ROUTE选项,并在返回的数据包上显示路由缓冲区。请注意,IP报头只能容纳9个这样的路由。许多主机忽略或放弃此选项。
-s packetsize 指定要发送的数据字节数。默认56,当与8字节的ICMP头数据组合时,转换为64个ICMP数据字节。
-t ttl 设置IP生存时间值(TTL)
-v 详细输出
-w deadline 指定一个以秒为单位的退出时间,不管ping退出之前发送或接收了多少数据包。在这种情况下,ping将一直发送数据包,直到deadline过期或count探针结束或一些来自网络的错误通知。

注释:这里的-w deadline选项的意思是ping命令的存活时间,而并非数据包的响应时间。

(2).实例

ping网关

[xf@xuexi ~]$ ping 192.168.128.255
Do you want to ping broadcast? Then -b. If not, check your local firewall rules.
[xf@xuexi ~]$ ping -b 192.168.128.255
WARNING: pinging broadcast address
PING 192.168.128.255 (192.168.128.255) 56(84) bytes of data.
64 bytes from 192.168.128.212: icmp_seq=1 ttl=64 time=0.621 ms
64 bytes from 192.168.128.213: icmp_seq=1 ttl=64 time=0.922 ms (DUP!)
64 bytes from 192.168.128.2: icmp_seq=1 ttl=64 time=2.30 ms (DUP!)
64 bytes from 192.168.128.218: icmp_seq=1 ttl=64 time=75.6 ms (DUP!)
64 bytes from 192.168.128.251: icmp_seq=1 ttl=64 time=76.1 ms (DUP!)
64 bytes from 192.168.128.212: icmp_seq=2 ttl=64 time=0.646 ms
64 bytes from 192.168.128.2: icmp_seq=2 ttl=64 time=1.20 ms (DUP!)
64 bytes from 192.168.128.213: icmp_seq=2 ttl=64 time=1.46 ms (DUP!)
64 bytes from 192.168.128.218: icmp_seq=2 ttl=64 time=91.8 ms (DUP!)
64 bytes from 192.168.128.251: icmp_seq=2 ttl=64 time=92.3 ms (DUP!)
^C
--- 192.168.128.255 ping statistics ---
2 packets transmitted, 2 received, +8 duplicates, 0% packet loss, time 1000ms
rtt min/avg/max/mdev = 0.621/34.326/92.387/40.904 ms

ping指定次数

[xf@xuexi ~]$ ping -c 5 baidu.com
PING baidu.com (123.125.115.110) 56(84) bytes of data.
64 bytes from 123.125.115.110 (123.125.115.110): icmp_seq=1 ttl=51 time=31.6 ms
64 bytes from 123.125.115.110 (123.125.115.110): icmp_seq=2 ttl=51 time=31.4 ms
64 bytes from 123.125.115.110 (123.125.115.110): icmp_seq=3 ttl=51 time=31.4 ms
64 bytes from 123.125.115.110 (123.125.115.110): icmp_seq=4 ttl=51 time=31.4 ms
64 bytes from 123.125.115.110 (123.125.115.110): icmp_seq=5 ttl=51 time=31.3 ms
--- baidu.com ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4006ms
rtt min/avg/max/mdev = 31.392/31.480/31.677/0.189 ms

ping指定时间间隔

[xf@xuexi ~]$ ping -c 5 -i 0.5 baidu.com
PING baidu.com (220.181.57.216) 56(84) bytes of data.
64 bytes from 220.181.57.216 (220.181.57.216): icmp_seq=1 ttl=54 time=29.5 ms
64 bytes from 220.181.57.216 (220.181.57.216): icmp_seq=2 ttl=54 time=29.4 ms
64 bytes from 220.181.57.216 (220.181.57.216): icmp_seq=3 ttl=54 time=29.8 ms
64 bytes from 220.181.57.216 (220.181.57.216): icmp_seq=4 ttl=54 time=30.1 ms
64 bytes from 220.181.57.216 (220.181.57.216): icmp_seq=5 ttl=54 time=29.7 ms
--- baidu.com ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 2005ms
rtt min/avg/max/mdev = 29.468/29.747/30.100/0.230 ms

(3).引申

1)数据帧、数据包、数据包

  数据帧(Frame)就是数据链路层的协议数据单元,它包括三部分:帧头、数据部分、帧尾。其中,帧头和帧尾包含一些必要的控制信息,比如同步信息、地址信息、差错控制信息等;数据部分则包含网络层传下来的数据,比如IP数据包

  数据包(Packet)是TCP/IP协议通信传输中的数据单元,位于网络层,在局域网中,“包”是在“帧”当中。

  数据报(Datagram)是通过网络传输的数据的基本单元,包含一个报头和数据本身,其中报头描述了数据的目的地和其他数据之间的关系。数据报是完整的、独立的数据实体,该实体携带要从源计算机传递到目的计算机的信息,该信息不依赖以前在源计算机和目的计算机以及传输网路按键的交换。

应用层

发送方产生上层数据(?)/接收方获得上层数据

表示层

会话层

传输层

TCP头+上层数据(segment/datagram)

网络层

IP头+[TCP头+上层数据](packet)

数据链路层

LLC头+[IP头+TCP头+上层数据]+FCS(LLC头作用已消失)

MAC头+[LLC头+IP头+TCP头+上层数据]+FCS(frame)

物理层

01101010101…(bit比特流)

  从应用层到物理层是数据封装过程,从物理层到应用层是数据解封装过程,这是一对逆过程。

  简单来说就是报头+上层数据=数据报,包头+数据报=数据包,帧头+数据包+帧尾=数据帧。

2)套接字

  TCP用主机的IP地址加上主机上的端口号作为TCP连接的端点,这个端点就叫套接字或插口。套接字用[IP地址:端口号]表示,它是网络通信过程中端点的抽象表示,包含进行网络通信必要的五种信息:连接使用的协议,本地主机IP地址,本地进程的协议端口,目的主机IP地址,目的进程的协议端口。

  SO_DEBUG选项,本选项仅由TCP支持。当给一个TCP套接字开启本选项时,内核将为TCP在该套接字发送和接收的所有分组保留详细跟踪信息。这些信息保存在内核的某个环形缓存去中,并可使用trpt程序进行检查。

3)ICMP协议

  ICMP是(Internet Control Message Protocol)Internet控制报文协议。它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络不通、主机是否可达、路由是否可用等网路本身的消息。这些控制消息虽然并不传输用户数据,但对于用户数据的传递起着重要作用。

4)TTL

  TTL字段指定IP数据包被路由器丢弃之前运行通过的最大网段数量。是为了防止数据包在网络中无限循环,而限定的最大转发次数,每经过一个路由器该字段就会减1,如果减到0还没到达目的主机,则会自动丢弃,并返回Request time out(请求超时)。最大值为255。