ICMP协议

网络出问题了使用ping命令,ping命令是基于ICMP协议工作的,ICMP报文是封装在IP包里面的。因为传输指令的时候,肯定需要源地址和目标地址。他本身非常简单。

ICMP协议_第1张图片
ICMP报文

ICMP报文有很多类型,不同的类型有不同的代码。最常用的类型是主动请求为8,主动请求的应答为0

查询报文类型

主动请求,并获取主动应答ICMP

对ping的主动请求,进行网络抓包,成为ICMP ECHO REQUEST。同理主动请求的恢复,称为ICMP ECHO REPLY。比起原生ICMP,这里面多个两个字段,一个是标识符,一个是序列号

差错报文类型

终点不可达为3,源抑制为4,超时未11,重定向为5

终点不可达:网络不可达0,主机不可达1,协议不可达2,端口不可达3,需要进行分片但设置了不分片位4

源站抑制:让源站放慢发送速度

时间超时:超过网络包的生存时间还没到

路由重定向:下次发给另一个路由器

ping:查询报文类型的使用


ICMP协议_第2张图片
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是192.168.1.2,目标MAC是刚才ARP得到的,源IP是自己的,源MAC也是自己的,加上一个控制信息,依据以太网的介质访问规则,将他们传送出去

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

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

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

你可能感兴趣的:(ICMP协议)