ICMP:
ICMP 网际控制报文协议,通过ICMP可以定位故障发生位置和原因。
由于IP不是为可靠传输服务设计的,所以ICMP的目的主要是用于在TCP/IP网络中发送出错和控制消息。
ICMP是由IP承载的。
ICMP报文类型:
○ 差错报告报文
○ 控制报文
○ 请求/应答报文
ICMP不同报文有不同的结构。但都包含8bit的类型字段,8bit 代码字段,和16bit校验和部分。
具体的type与code组合见RFC6918
差错报告类报文:
在发送差错报告类报文时,必须遵守以下规则:
i. ICMP差错报告类报文数据区内要包括发生差错的IP数据报首部,以及数据区的至少前64bit(包含了上层协议的首部)这段信息包含了出错数据包的关键信息,这些信息能够为源端采取差错处理措施提供依据。
ii. ICMP差错报告只能向源端报告差错,不能向中间路由器报告差错。
iii. 携带ICMP差错报文的数据包出现差错时,不会再生成ICMP报文。
iv. 对于分片的IP数据报,ICMP差错报告仅对第一个分片应用。
差错报告类报文包括以下四种:
§ 目的地址不可达报文
§ 超时报文
§ 参数错误报文
§ Photuris(主要在安全应用上)
目的地址不可达报文:
当路由器无法转发或交付数据报时,可使用ICMP目的地址不可达报文通知数据报源端。
其代码字段取值与意义如下:
超时报文:
超时报文用于两种情况,一种是TTL值为0,另一种是分片重组时超时。
参数错误报文:
只有问题严重到需要把数据包丢弃时,才会发送此报文。
报文格式较之前新加指针字段,指针字段用于指示发生错误的第一个字节在数据包首部的位置。
Photuris报文:
此报文主要用于IPsec。
IPsec 提供数据机密性,完整性保护,并且能够实现对端认证,数据压缩等一系列功能。其中安全保护需要依托一系列参数。保护不同的数据可能需要不同的安全参数,所以当存在多组安全参数时,需要对每个组进行标识,这就是SPI。
Photuris代码字段取值与这些功能密切相关。
请求应答类报文:
○ 回送请求/回送应答报文:
这两种报文主要用于测试网络的连通性,当主机向目的站发送ICMP回送请求时,收到该报文的目的站必须回应一个回送应答报文作回应。
数据报在之前共有的部分上新加了8bit的标识,8bit的序号,以及一个可选数据区。
当目标主机收到一个包含可选数据区的请求报文时,应当将数据区数据拷贝到应答报文中。
标识和序号用于匹配请求和应答,成对的请求和应答报文使用相同的标识和序号字段。
代码固定位0
○ 路由器恳求与通告报文:
§ 路由器通告报文:
为了解决网络中存在多个与Internet相连的路由器,而主机通过静态配置只配置了一个默认路由器,当默认路由出现问题,网络中还有其他路由器无法连接网络的问题,路由器会定时向网络中发送路由器通告,告诉各主机目前可用的路由器。
报文格式:
路由器通告报文格式路由器地址以及优先级:指出目前可用的路由器以及其优先级,他们总是成对出现。
地址数:指明了可用路由器的数量
地址项长度:指明了地址的大小,以4字节为单位,对于IPV4地址,该字段为1
生存时间:指明了路由信息保持有效的时间,以秒为单位。
路由器发送通告报文的最长间隔是10分钟,这意味着最坏的情况下主机要等10分钟才能得到一条路由信息。为了避免主机的等待时间过长,ICMP规定,主机启动时以组播或有限广播的形式发送路由器恳求报文。
§ 路由器恳求报文:
报文格式:
路由器恳求报文格式类型设置为10,代码字段设置为0,。路由器收到恳求报文后,立即发送一个路由器通告报文作为响应。
在RFC3344中新加了两个代码类型:
○ 时间戳请求应答报文:
ICMP时间戳请求允许系统向另一个系统查询当前的时间。返回的建议值是自午夜开始计算的毫秒数,协调的统一时间(Coordinated Universal Time, UTC)(早期的参考手册认为UTC是格林尼治时间)。这种ICMP报文的好处是它提供了毫秒级的分辨率,而利用其他方法从别的主机获取的时间(如某些Unix系统提供的rdate命令)只能提供秒级的分辨率。由于返回的时间是从午夜开始计算的,因此调用者必须通过其他方法获知当时的日期,这是它的一个缺陷。
报文结构:
时间戳请求报文结构发起时间戳:用于记录发送者生成时戳请求报文的时间。
接收时间戳:用于记录接收者受到请求的时间。
传送时间戳:用于记录接收者生成应答报文的时间。
ICMP应用:
Ping 程序
tracertroute程序
欢迎指出文中错误,谢谢
网友评论