​ TCP/IP功能较为简单,缺少了很多功能,ICMP协议便是其中的一块补充,为IP增添了通知差错信息与控制信息的功能。

报头

类型(8位)| 编码(8位)
校验和(16位)
选项数据

常见类型与编码

类型 编码 描述
0 0 Echo Reply
3 0 网络不可达
3 1 主机不可达
3 2 协议不可达
3 3 端口不可达
5 0 重定向
8 0 Echo Request

​ 这只是ICMP类型与编码的一部分,具体可以看RFC792,以及其它相关ICMP拓展。

具体应用

  • ping

    ping命令是ICMP应用的典型代表之一,运用type8进行请求,如果目的地可到达则回复type0,否则根据情况返回对应类型编码。

  • tracert(windows)/ traceroute(Linux)

    用于判断转发路径的命令,它的原理是先向目的端发送一个UDP测试报文,TTL值为1,目的端口为一个极其不常用的端口,沿途节点收到后拆包判断自己是不是目的地,不是的话TTL-1=0,向源端返回ICMP超时报文,报文中含有本机IP。源端收到后,再向目的端发送以个UDP报文,这次的TTL值+1=2。重复上述过程,每次TTL值+1,直到到达目的地后停止。

路由重定向

​ 不同的系统对于路由重定向报文有着不同的处理方案,绝大多数往往会直接忽略ICMP重定向报文。因为如果支持重定向,设备将需要维护一个非常庞大的路由表,会极其浪费服务器的性能,而且ICMP重定向存在着安全隐患。