背景
因为IP协议是不可靠的传输服务、因此源地址发出的IP数据包很可能无法达到目标地址(目标地址不存在、过程中某链路中断等)。这时ICMP协议就能检测IP数据包传输过程中的各种错误、并通知源地址。
实现原理
让发现错误的路由器、向数据包的(通过IP数据包的信息获取)源主机地址发送一个ICMP数据包、并且通过ICMP数据包报告出错的原因。
需要注意的是。ICMP协议是IP协议的补充、ICMP与IP协议位于同一个层次(IP层),但ICMP报文是封装在IP数据报的数据部分进行传输的。但是、这次IP传输如果出错、ICMP协议规定、将废弃这次ICMP发送。
数据包的格式
![](https://img.haomeiwen.com/i1684607/6c3f8cf17aec763e.png)
数据包的类型
ICMP报文虽然细分为很多类,但总的来看可以分为如图所示的三大 类:差错报告、控制报文和请求应答报文。
![](https://img.haomeiwen.com/i1684607/f20fa8d54dcdb649.png)
-
响应请求
我们日常使用最多的ping,就是响应请求(Type=8)和应答(Type=0),一台主机向一个节点发送一个Type=8的ICMP报文,如果途中没有异常(例如被路由器丢弃、目标不回应ICMP或传输失败),则目标返回Type=0的ICMP报文,说明这台主机存在,更详细的tracert通过计算ICMP报文通过的节点来确定主机与目标之间的网络距离。 -
目标不可到达、源抑制和超时报文
1、目标不可到达报文 在路由器或主机不能传递数据报时使用,例如我们要连接对方一个不存在的系统端口(端口号小于1024)时,将返回Type=3、Code=3的ICMP报文,它要告诉我们:“嘿,别连接了,我不在家的!”,常见的不可到达类型还有网络不可到达(Code=0)、主机不可到达(Code=1)、协议不可到达(Code=2)等。 2、源抑制 充当一个控制流量的角色,它通知主机减少数据报流量,由于ICMP没有恢复传输的报文,所以只要停止该报文,一定时间后主机就会逐渐恢复传输速率。 3、无连接方式网络的问题 就是数据报文丢失,或者长时间在网络游荡而找不到目标,或者拥塞导致主机在规定时间内无法重组数据报分段,这时就要触发ICMP超时报文的产生。超时报文的代码域有两种取值:Code=0表示传输超时,Code=1表示重组分段超时。
-
时间戳
时间戳请求报文(Type=13)和时间戳应答报文(Type=14)用于测试两台主机之间数据报来回一次的传输时间。传输时,主机填充原始时间戳,接收方收到请求后填充接收时间戳后以Type=14的报文格式返回,发送方计算这个时间差。一些系统不响应这种报文。
网友评论