ICMP简介
ICMP的全称是Internet Control Message Protocol。也就是网络控制报文协议。
ICMP是一个网络层协议。用来检测IP报文是否能够正常发送,以及出错原因,以及查询主机的信息。
也就是差错查询和信息查询。
我们经常使用的ping工具就是利用ICMP实现的。
ICMP详解
ICMP报文
在IP Header中有一个字段代表是否为ICMP包。
ICMP数据中 主要包括 以下字段:
1、Type
ICMP数据包的类别
2、Code
对Type的进一步说明
3、标识符
唯一表示一个会话
4、选项数据
用来携带查询的信息。
差错控制
1、主机可达
发送一个type = 8,code = 0的ICMP Request包,表示这是一个请求包,如果顺利的到达对应的主机,主机会发送一个type = 0,code = 0的ICMP Reply包。
如果发送方收到Reply包,就说明主机可达。
2、主机不可达
发送一个type = 8,code = 0的ICMP Request包,如果路由器中不存在到达目的IP的路由的时候,会返回一个type = 3,code = 1的ICMP包,表示主机不可达。
当发送方收到包后,发现type = 3, code = 1,说明主机不可达。
3、超时
当一个ICMP包中TTL等于0的时候,路由器会将其抛弃,然后给发送端发送一个ICMP包,对应的type = 11,code = 0。
信息查询
比如ICMP可以查询对应主机的时间戳
发送方发送一个type = 13,code = 0的ICMP请求包,当主机收到后,返回一个type = 14,code = 0的ICMP应答包,将时间戳保存在之前说的选项字段中。
ICMP报文类别
PING
ping就是利用 ICMP发送请求报文 来探测主机之间是否网络是否通畅
tracert
tracert用来获取主机之间的路由信息。依次发送ttl = 1,2,3…n的ICMP请求包。通过对应的路由器发送超时ICMP包来获取对应的路由信息。