ICMP协议与ping

Posted vector6_

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ICMP协议与ping相关的知识,希望对你有一定的参考价值。

ICMP协议与ping

ping 命令是我们最常用的命令之一,一般用于侦测本机到目标主机的网络是否通畅,那么ping 是如何工作的呢?

ICMP 协议格式及作用

ping 是基于 ICMP 协议工作的。ICMP 全称 Internet Control Message Protocol,就是互联网控制报文协议。

网络包在异常复杂的网络环境中传输时,常常会遇到各种各样的问题。当遇到问题的时候,一般都需要向源地址报告情况,以调整传输策略。由于IP协议本身并没有为终端系统提供直接的方法来发现那些发往目的地址失败的IP数据包,此外IP没有提供直接的方式来获取诊断信息(例如哪些路由器在沿途中被使用了或使用一种方法来估计往返时间)。

因此将ICMP协议与IP结合使用,提供相关的诊断和控制信息。

ICMP 报文是封装在 IP 包里(IPv4/IPv6),开头的4个字节在所有的报文中都是一样的,但其余部分在不同的报文中不同。

ICMP协议类型及应用

ICMP报文分为两大类:查询报文和差错报文。

查询报文

查询报文类型为主动发起请求,并获得主动应答。主要包括回显请求和回显应答(分别为类型8和0),以及路由器通告和路由器请求(分别为类型9和10)

常用的 ping 就是查询报文。对 ping 的主动请求,称为 ICMP ECHO REQUEST。同理主动请求的回复,称为ICMP ECHO REPLY。比起原生的 ICMP,查询报文多了两个字段,一个是标识符,另一个是序号。在选项数据中,ping 还会存放发送请求的时间值,来计算往返时间,说明路程的长短。

差错报文

差错报文由异常情况发起。主要包括:终点不可达、源站不可达、时间超时、路由器重定向等。

ping:查询报文类型的使用

对于查询报文,我们下面来看 ping 的发送和接收过程

假定主机 A 的 IP 地址是 192.168.1.1,主机 B 的 IP 地址是 192.168.1.2,它们都在同一个子网。

当我们在主机 A 上运行“ping 192.168.1.2”后,ping 命令执行的时候,源主机首先会构建一个 ICMP 请求数据包,ICMP 数据包内包含多个字段。最重要的是两个,第一个是类型字段,对于请求数据包而言该字段为 8;另外一个是顺序号,主要用于区分连续 ping 的时候发出的多个数据包。每发出一个请求数据包,顺序号会自动加 1。为了能够计算往返时间 RTT,它会在报文的数据部分插入发送时间。

然后,由 ICMP 协议将这个数据包连同地址 192.168.1.2 一起交给 IP 层。IP 层将以 192.168.1.2 作为目的地址,本机 IP 地址作为源地址,加上一些其他控制信息,构建一个 IP 数据包。

接下来,在 MAC层,如果在本节 ARP 映射表中查找出 IP 地址 192.168.1.2 所对应的 MAC 地址,则可以直接使用;如果没有,则需要发送 ARP 协议查询 MAC 地址,获得 MAC 地址后,由数据链路层构建一个数据帧,目的地址是 IP 层传过来的 MAC 地址,源地址则是本机的 MAC 地址;还要附加上一些控制信息,依据以太网的介质访问规则,将它们传送出去。

主机 B 收到这个数据帧后,先检查它的目的 MAC 地址,并和本机的 MAC 地址对比,如符合,则接收,否则就丢弃。接收后检查该数据帧,将 IP 数据包从帧中提取出来,交给本机的 IP 层。同样,IP 层检查后,将有用的信息提取后交给 ICMP 协议。

主机 B 会构建一个 ICMP 应答包,应答数据包的类型字段为 0,顺序号为接收到的请求数据包中的顺序号,然后再发送出去给主机 A。

在规定的时候间内,源主机如果没有接到 ICMP 的应答包,则说明目标主机不可达;如果接收到了 ICMP 应答包,则说明目标主机可达。并且此时,源主机会检查用当前时刻减去该数据包最初从源主机上发出的时刻,就是 ICMP 数据包的时间延迟。

当然这只是同一个局域网里面的情况。如果跨网段的话,还会涉及网关的转发、路由器的转发等等。但是对于 ICMP 的头来讲,是没什么影响的。

以上是关于ICMP协议与ping的主要内容,如果未能解决你的问题,请参考以下文章

网络编程ping 原理与ICMP协议

网络编程ping 原理与ICMP协议

网络编程ping 原理与ICMP协议

网络编程ping 原理与ICMP协议

ICMP协议详解

ICMP协议