最后更新:2022-08-01 08:33:14 手机定位技术交流文章
ping是基于ICMP协议的,首先我们理解了ICMP
什么是ICMP协议
互联网控制消息协议(英语:Internet Control Message Protocol)是互联网控制消息协议。
那么它是如何控制的?
在复杂的网络传输环境中,网络包遇到各种问题,我们需要知道每次遇到的问题是什么。 因此,信息需要传输,报告遇到任何问题,因此,传输策略可以调整以控制整个情况。
ICMP的功能是什么?
ICMP的主要功能:验证IP包是否成功交付到目标地址,报告为什么IP包在发送过程中被丢弃的原因,并改进网络设置等。
在通信中,如果因某种原因IP包无法到达目标地址,则IMP负责通知具体原因。
工作流程如下图所示

宿主A发送像宿主B一样的包,但由于某种原因,路由器2无法在途中检测宿主B的存在,路由器2发送像宿主A那样的 ICMP目标不可访问的包,表明它未能发送包到宿主B。
ICMP的此通知消息使用IP发送。
因此,从路由器2返回的ICMP包通过路由器1传递到主机A,按照通常的路由器控制。 接收ICMP主机A分解了ICMP的第一个部分和数据区域,并了解问题的具体原因。
类是用于诊断的查询消息,即“查询消息类型”
另一个类别是通知错误原因的错误消息,即“错误消息类型”。

返回消息-类型0和8
返回消息用于在主机或路由器之间通信,以确定发送的数据包是否成功到达相反端,并使用 ping 命令实现此消息。

返回请求消息(类型8)可以发送到最终主机,返回响应消息(类型0)可以从最终主机接收。

与原始ICMP相比,还有两个领域:
标识符:用于区分哪些应用程序发送ICMP包,例如处理PID作为标识符;
序列数:序列数以0开始,每次发送新的返回请求时增加1,可以用于验证网络包是否丢失。
在选项数据中, ping还存储发送请求的时间值,以计算返回时间和返回时间,指示路径的长度。
常用的差错报文类型
目标不可达消息
当一个IP路由器无法将IP包发送到目标地址时,它将返回一个无法访问目标的ICMP消息给发送器主机,并显示无法访问的具体原因,该原因记录在ICMP包头的代码字段中。
因此,根据特定信息ICMP不可访问的,发送器主机也可以理解该不可访问的特定原因。
原点抑制消息
在使用低速广域线路的情况下,连接WAN的路由器可能会遇到网络拥堵的问题。
ICMP源抑制消息的目的是减慢拥堵.
当路由器发送数据到低速线时,其发送队列的缓存值为0,无法发送出去时,可以发送ICMP源抑制器消息到IP包的源地址。
接收消息的主机知道在线路上某个地方存在交通堵塞,从而增加IP包的传输间隔,减少网络交通堵塞。
然而这种ICMP可能会引起不公平的网络通信,一般不被使用。
重定向消息
如果路由器发现发送器主机使用数据不是发送的最佳路径,它将返回一个ICMP重新向主机发送的消息。
该消息包含最适当的路由信息和源数据。 这主要发生在路由器有更好的路由信息时。 路由器将通过这种ICMP消息通知发送者,允许它下一次发送到另一个路由器。
超时消息
在IP包中有一个叫做TTL(Time To Live)的字段,每当路由器通过它时,该字段的值都会减少1,直到它降低到0,然后丢弃IP包。
此时,路由器将向端口主机发送ICMP超时消息,并通知丢弃的包。
设置IP包生存困难周期的主要目的是避免在路由控制遇到发生周期问题时,IP包在网络上连续传输。

此外,有时也可以设置TTL控制包的到达范围,例如设置一个较小的TTL值
在同样的子网中,A和B主机,A主机执行PingB主机,让我们看看在这段时间里发生什么。

当 ping 命令执行时, 源主机首先构建一个 ICMP 返回请求消息包.
ICMP包包含几个领域,其中最重要的两个是:
每次发送请求包时,序列编号都会自动添加到1。为了计算返回时间RTT,它将发送时间插入消息的数据部分。

然而,由 ICMP 协议将这个数据包连通地址192.168.1.2 一起交给 IP 层。IP 层将以192.168.1.2 作为目标地址,作为源地址的机器IP地址,设置为1的协议字段表示一个ICMP协议,添加一些其他控制信息,构造IP数据包。
接下来你需要添加MAC头。如果在本地 ARP 映射表中查找出 IP 地址 192.168.1.2 所对应的 MAC 地址,则可以直接使用,如果没有,然后向MAC地址发送ARP协议查询,取得MAC地址后,从数据链层构造了一个数据框架,当目的地地址传递到IP层时,源地址是机器的MAC地址;也增加了一些控制信息,其中一个是Ethernet媒体访问规则,将他们传送出去。

接收此数据帧后,首先检查其MAC地址,然后与主机的MAC地址进行比较,如果匹配,然后接收,否则丢弃。
接收后,检查数据帧,从帧中提取IP包,并将其传递到主机IP层。 类似地,检查IP层后,可以提取有用的信息并将其传递到ICMP协议。
主机 B 会构建一个 ICMP回送响应消息数据包,回送响应数据包的类型字段为0,序号为接收到的请求数据包中的序号,然后再发送出去给主机A。

在规定的时候间内,源主机如果没有接到 ICMP 的答应包,则说明目标主机不可达;如果接收到了ICMP 回送响应消息,则说明目标主机可达。
此时,源主机的机会被检查,而当前的时间减少了从源主机最初发送的包的时间,即ICMP包的时间延迟。
对以上所发出的资料,总结如下:

当然,在同一本地网络中,这是最简单的事情,如果它是跨网络的段落,它也涉及开关的继电器,路由器的继电器等等。
然而,对于ICMP头没有影响,受影响的取决于目标IP地址,路径的下一个跳跃,以及每个通过路由器进入新的本地网络,需要在MAC头内更改MAC地址。
说了这么多,可以看出 ping 这个程序是使用了 ICMP 里面的ECHO REQUEST(类型为 8) 和ECHO REPLY (类型为0)。
本文由 在线网速测试 整理编辑,转载请注明出处。