ICMP(Internet control message protocol)协议是互联网控制报文协议,这里的控制是指监控网络的状态,比如主机是否可达,路由是否可达,端口是否可达等,以便于上层做一些差错处理。它是处于IP层和TCP层的协议,一般被认为是IP层的协议。 ICMP报文是封装在IP包里面的,因为传输的时候需要源IP地址和目标IP地址,可以抓个包证明一下。 我们常用的ping是基于ICMP协议的,因此我们ping某个网站然后抓包可以看到ICMP报文的细节,下图是用wireshark抓到的包: 我们分析第一个ICMP包,可以看到这个包的细节,这里有四条内容:
- 第一条是物理层的帧,包括多少字节,在哪个网卡被捕获到的
- 第二条是Ethernet II,意思是以太网第二层,也就是MAC层,包含源mac地址(src)和目的mac地址(dst)
- 第三条是IP协议,包含着源IP地址和目标IP地址
- 第四条是ICMP协议
因此可以证明ICMP需要封装IP头的。ICMP报文携带的信息比较少,因为是用来检测路通不通的,所以也没有必要携带太多东西。 打开上述的第四条内容,我们可以看到它的内容:
包括以下几个部分:
- Type,类型。这里8代表它是主动请求的类型
- Code,代码,和Type一起表示一种网络状态,这里的0和Type等于0表示这是一个Ping请求,此外还有很多类型(资料来源百度百科):
这些打叉的都是差错报文的类型 - Checksum,校验和
- Identifier,标识符
- Sequence Number,序号,这里是0,说明它是发出去侦查路况的第一个包
- Data ,数据,观察了好多报文,一直都是48比特,但是暂时不清楚是啥,等我知道了再回来补充
|