计算机网络常问面试问题 1 —— ping((Packe InterNet Groper))命令背后都发生了什么?

ping指令

1、定义和作用

在介绍ping之前,先说明ICMP协议:

  • ICMP(Internet Control Message Protocol)属于网络层协议
  • 主要用于在主机与路由器之间传递控制信息,包括报告错误、交换受限控制和状态信息等。
  • 当遇到IP数据无法访问目标、IP路由器无法按当前的传输速率转发数据包等情况时,会自动发送ICMP消息。
  • 可以通过Ping命令发送ICMP回应请求消息并记录收到ICMP回应回复消息,通过这些消息来对网络或主机的故障提供参考依据。没有经过传输层的TCP或UDP。

ping命令:

  • 确定网络和各外部主机的状态;跟踪和隔离硬件和软件问题;测试、评估和管理网络。如果主机正在运行并连在网上,它就对回送信号进行响应。
  • ping 命令每秒发送一个数据报并且为每个接收到的响应打印一行输出。
  • ping 命令计算信号往返时间和(信息)包丢失情况的统计信息,并且在完成之后显示一个简要总结。
  • ping 命令在程序超时或当接收到 SIGINT 信号(Ctrl C)时结束。

命令格式:

ping [参数] [主机名或IP地址]

其中参数为零到多个,目标主机可以是IP或者域名。

2、ping过程

1、简单流程:

主机A ping 主机B(192.168.0.4) ----> 构建 ICMP 包 ---->  构建 IP 分组 ---->  解析硬件地址封装成帧 ---->    物理层发送 ---->  网络层传输 ----> 到达主机B ----> 提取IP数据包交给IP层协议 ----> 提取信息交给ICMP协议,构建ICMP应答包 ----> 发送给主机A

2、具体说明:分为ping 域名 + ping IP

  • 0、如果是 主机A ping 域名,首先需要通过 DNS 服务拿到对方的 IP(主要用来获取域名对应的IP地址)

    • 1)主机查找本地系统Hosts文件的DNS缓存,如果存在该域名对应的IP,则获取IP,跳转到第8步;如果不存在,则继续。
    • 2)主机向本网络路由器发起请求,查找路由DNS缓存,如果存在该域名对于的IP,则获取IP,跳转到第8步;如果不存在,则继续。
    • 3)路由器向本地ISP(互联网提供商)的DNS服务器发起请求,查找DNS服务器的缓存,如果存在该域名对应的IP,则跳转到第7步;如果不存在,则继续。
    • 4)本地DNS服务器向根域名服务器发起请求,根域名服务器告诉本地服务器,下一次应查询的顶级域名服务器dns.com的IP地址。
    • 5)本地域名服务器向顶级域名服务器dns.com进行查询,顶级域名服务器dns.com告诉本地域名服务器,下一步应查询的权限服务器dns.abc.com的IP地址。
    • 6)本地域名服务器向权限域名服务器dns.abc.com进行查询,权限域名服务器dns.abc.com告诉本地域名服务器,所查询的主机的IP地址。
    • 7)、本地域名服务器最后把查询结果——该域名对应的IP地址告诉给主机。
    • 8)、至此,主机知道了该域名的IP地址。
  • 1 、构建 ICMP 包。主机构建一个 ICMP 格式的数据包,由 ICMP 协议将这个数据包(有效负荷)连同目的 IP 地址一起交给 IP 协议。

    • ICMP协议+B主机的IP地址 交给IP协议;
  • 2、构建 IP 分组。 IP层构建一个数据包(A主机的IP地址+控制信息+B主机的IP地址),获得B主机的MAC地址,以便构建一个数据帧;

    • IP协议会根据B主机的IP地址和自己的子网掩码判断是不是属于同一层网络。如果是属于同一层网络的话,就会获得B主机的MAC地址
    • 如果以前两机有过通信,在A机的ARP缓存表应该有B机IP与其MAC的映射关系,如果没有,就发一个ARP请求广播,得到B机的MAC
  • 3、解析硬件地址封装成帧。数据链路层将控制信息封装到此分组上,创建成帧。在这个帧中,附加有目的 MAC 地址和源 MAC 地址,以及以太网类型字段(用来指明应用于帧数据字段的协议)。在帧的尾部是 FCS(帧校验序列)字段,这个部分装载了 CRC(循环冗余校验)的计算结果。

  • 4、物理层发送。把帧交付给物理层,物理层会以一次一比特的方式将帧发送到物理介质。

  • 5、网络层传输。协议接收这个分组,并检查它的 IP 的地址。如果这是一个路由器(网关),跳到 6。如果这就是目的主机,跳到下一步 7。

  • 6、网络层传输,由于分组的目的 IP 地址与此接收路由器上的各个地址均不匹配,路由器会在其路由表中查找目的 IP 的地址,(在此路由表中需要包含目的子网的相关表项,否则路由器会立即将收到的分组丢弃,并同时向发送方回送一个携带有目标网络不可达信息的 ICMP 报文。),并按照路由规则被交换到指定的输出接口的缓冲区内。重复上述步骤。

  • 7、 到达主机B。主机B接受到主机A的发过来的数据帧以后,先检查该帧中包含的B的IP地址,并和本地的物理地址进行比对,如果符合的话,就接受,否则,就抛弃。同样,需要将该数据帧交由自己的IP层协议。

  • 8、返回响应给主机A。IP层检查以后,再交由ICMP协议,构建一个ICMP的应答包,发送给主机A。

3、linux ping指令简单使用

3.1、 命令参数

-d 使用Socket的SO_DEBUG功能。

-f  极限检测。大量且快速地送网络封包给一台机器,看它的回应。

-n 只输出数值。

-q 不显示任何传送封包的信息,只显示最后的结果。

-r 忽略普通的Routing Table,直接将数据包送到远端主机上。通常是查看本机的网络接口是否有问题。

-R 记录路由过程。

-v 详细显示指令的执行过程。

<p>-c 数目:在发送指定数目的包后停止。

-i 秒数:设定间隔几秒送一个网络封包给一台机器,预设值是一秒送一次。

-I 网络界面:使用指定的网络界面送出数据包。

-l 前置载入:设置在送出要求信息之前,先行发出的数据包。

-p 范本样式:设置填满数据包的范本样式。

-s 字节数:指定发送的数据字节数,预设值是56,加上8字节的ICMP头,一共是64ICMP数据字节。

-t 存活数值:设置存活数值TTL的大小。

更加详细参数说明

3.1、 ping通的情况

[root@localhost ~]# ping 192.168.120.205
PING 192.168.120.205 (192.168.120.205) 56(84) bytes of data.
64 bytes from 192.168.120.205: icmp_seq=1 ttl=64 time=0.720 ms
64 bytes from 192.168.120.205: icmp_seq=2 ttl=64 time=0.181 ms
64 bytes from 192.168.120.205: icmp_seq=3 ttl=64 time=0.191 ms
64 bytes from 192.168.120.205: icmp_seq=4 ttl=64 time=0.188 ms
64 bytes from 192.168.120.205: icmp_seq=5 ttl=64 time=0.189 ms

--- 192.168.120.205 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4000ms
rtt min/avg/max/mdev = 0.181/0.293/0.720/0.214 ms

图中返回内容具体的含义如下:

  • ① ping目标主机的域名和IP(ping会自动将域名转换为IP)
  • ② 不带包头的包大小和带包头的包大小(参考“-s”参数)
  • ③ icmp_seq:ping序列,从1开始;如果数字不是按顺序递增也就意味着丢包了
    • ttl:剩余的ttl;见TTL解释
    • time: 响应时间,数值越小,联通速度越快;
  • ④ 发出去的包数,返回的包数,丢包率,耗费时间;
  • ⑤ 最小/最大/平均响应时间和本机硬件耗费时间;

3.2、 ping不通的情况

[root@localhost ~]# ping 192.168.120.202
PING 192.168.120.202 (192.168.120.202) 56(84) bytes of data.
From 192.168.120.204 icmp_seq=1 Destination Host Unreachable
From 192.168.120.204 icmp_seq=2 Destination Host Unreachable
From 192.168.120.204 icmp_seq=3 Destination Host Unreachable
From 192.168.120.204 icmp_seq=4 Destination Host Unreachable
From 192.168.120.204 icmp_seq=5 Destination Host Unreachable
From 192.168.120.204 icmp_seq=6 Destination Host Unreachable

--- 192.168.120.202 ping statistics ---
8 packets transmitted, 0 received, +6 errors, 100% packet loss, time 7005ms
, pipe 4

3.3、 ping指定次数

[root@localhost ~]# ping -c 10 192.168.120.206
PING 192.168.120.206 (192.168.120.206) 56(84) bytes of data.
64 bytes from 192.168.120.206: icmp_seq=1 ttl=64 time=1.25 ms
64 bytes from 192.168.120.206: icmp_seq=2 ttl=64 time=0.260 ms
64 bytes from 192.168.120.206: icmp_seq=3 ttl=64 time=0.242 ms
64 bytes from 192.168.120.206: icmp_seq=4 ttl=64 time=0.271 ms
64 bytes from 192.168.120.206: icmp_seq=5 ttl=64 time=0.274 ms
64 bytes from 192.168.120.206: icmp_seq=6 ttl=64 time=0.295 ms
64 bytes from 192.168.120.206: icmp_seq=7 ttl=64 time=0.269 ms
64 bytes from 192.168.120.206: icmp_seq=8 ttl=64 time=0.270 ms
64 bytes from 192.168.120.206: icmp_seq=9 ttl=64 time=0.253 ms
64 bytes from 192.168.120.206: icmp_seq=10 ttl=64 time=0.289 ms

--- 192.168.120.206 ping statistics ---
10 packets transmitted, 10 received, 0% packet loss, time 9000ms
rtt min/avg/max/mdev = 0.242/0.367/1.251/0.295 ms

参考

1、https://blog.csdn.net/u011857683
2、https://www.jianshu.com/p/52b1c9ba82a1
3、https://www.cnblogs.com/peida/archive/2013/03/06/2945407.html

猜你喜欢

转载自blog.csdn.net/JMW1407/article/details/107525289