目录
- 前言
- ICMP协议概述
- ICMP协议实现原理
- ICMP数据包的格式
- 常见的ICMP报文
- 参考资料
前言
参照清华大学出版社-罗军周主编的《TCP/IP协议及网络编程技术》进行学习。
本篇主要参考第五章:《ICMP协议》
用于测试网络或者检测IP数据包传输过程中的各种错误、并通知源地址。
ICMP协议概述
因为IP协议是不可靠的传输服务、因此源地址发出的IP数据包很可能无法达到目标地址(目标地址不存在、过程中某链路中断等)。
这时ICMP协议就能检测IP数据包传输过程中的各种错误、并通知源地址。
需要注意的是:ICMP被动触发一定是出错、但主动触发可能是测试。(比如type = 13/14 type = 8/0)
ICMP协议实现原理
让发现错误的路由器、向数据包的(通过IP数据包的信息获取)源主机地址发送一个ICMP数据包、并且通过ICMP数据包报告出错的原因。
需要注意的是。ICMP协议是IP协议的补充、ICMP与IP协议位于同一个层 次(IP层),但ICMP报文是封装在IP数据报的数据部分进行传输的。但是、这次IP传输如果出错、ICMP协议规定、将废弃这次ICMP发送。
ICMP数据包的格式
格式
5-1报文种类:
ICMP报文虽然细分为很多类,但总的来看可以分为如图所示的三大 类:差错报告、控制报文和请求应答报文。
5-2
类型
-
0 响应应答(ECHO-REPLY)
-
3 不可到达
5-3 -
4 源抑制
-
5 重定向
-
8 响应请求(ECHO-REQUEST)
-
11 超时
-
12 参数失灵
-
13 时间戳请求
-
14 时间戳应答
-
15 信息请求(*已作废)
-
16 信息应答(*已作废)
-
17 地址掩码请求
-
18 地址掩码应答
下面是几种常见的ICMP报文:
响应请求
我们日常使用最多的ping,就是响应请求(Type=8)和应答(Type=0),一台主机向一个节点发送一个Type=8的ICMP报文,如果途中没有异常(例如被路由器丢弃、目标不回应ICMP或传输失败),则目标返回Type=0的ICMP报文,说明这台主机存在,更详细的tracert通过计算ICMP报文通过的节点来确定主机与目标之间的网络距离。
目标不可到达、源抑制和超时报文
这三种报文的格式是一样的:
目标不可到达报文(Type=3)在路由器或主机不能传递数据报时使用,例如我们要连接对方一个不存在的系统端口(端口号小于1024)时,将返回Type=3、Code=3的ICMP报文,它要告诉我们:“嘿,别连接了,我不在家的!”,常见的不可到达类型还有网络不可到达(Code=0)、主机不可到达(Code=1)、协议不可到达(Code=2)等。
源抑制则充当一个控制流量的角色,它通知主机减少数据报流量,由于ICMP没有恢复传输的报文,所以只要停止该报文,一定时间后主机就会逐渐恢复传输速率。
无连接方式网络的问题就是数据报文丢失,或者长时间在网络游荡而找不到目标,或者拥塞导致主机在规定时间内无法重组数据报分段,这时就要触发ICMP超时报文的产生。超时报文的代码域有两种取值:Code=0表示传输超时,Code=1表示重组分段超时。
时间戳
时间戳请求报文(Type=13)和时间戳应答报文(Type=14)用于测试两台主机之间数据报来回一次的传输时间。传输时,主机填充原始时间戳,接收方收到请求后填充接收时间戳后以Type=14的报文格式返回,发送方计算这个时间差。一些系统不响应这种报文。
-
关于最后一个字段
对于由于错误被动生成的ICMP报文中还需要加上源IP数据包的IP头部以及数据部分的前64位、以源主机方便定位。
例如:3、不可到达。4、源抑制。5、重定向。11、超时。12、参数失灵。
网友评论