互联网控制报文协议,是网络层的一个重要协议,协议号为1,用于在网络设备间传递各种差错和控制信息。
ICMP Echo Request和ICMP Echo Reply分别用来查询和响应某些信息,进行差错校验。
当网络设备无法访问目标时,会自动发送ICMP目的不可达报文到发送端设备。
消息和编码:
详细:
运用实例:
ping :
主要运用type8请求消息发起检测,type0回复消息来检测网络连通性。
tracert:
先向目的端发送一个UDP报文,TTL值为1,端口号为一个几乎任何一个应用程序都不会用到的端口号。
第一跳收到后判断自己是不是目的地址,将TTL值减1后,为0,丢弃报文并向源发送一个ICMP超时报文(报文中含有第一跳地址)。源端收到后,再向目的端发送一个UDP报文,TTL值+1。
重复上述过程直至目的端收到源端发送的报文,判断出目的地址为本机IP地址,则处理此报文,按照端口号寻找占用此端口号的上层协议,但因为没有应用程序使用此端口号,则向源端回复一个ICMP端口不可达报文。
源端收到后判断出UDP报文已经到达目的端,则停止tracert,从而得到源端到目的端所经过的路径。
路由重定向的条件
数据包的源IP地址和该报走的下一跳IP地址属于同一个网段。
数据包的入接口和路由指定后的出接口是同一个接口。
系统开启重定向功能。
路由器基本上会直接忽略ICMP重定向报文,不同的系统对此也有不同的处理方案,像Wndows会添加一项主机路由,而某些系统也会直接忽略。
ICMP重定向使得客户端的管理工作减少,路由功能降低,但会使路由器的负担增加。像一些要处理数十个子网数千台主机业务的服务器,如果要支持重定向,那么服务器将会维护一个非常庞大的路由表,会极其浪费服务器的性能。而且,ICMP重定向也存在着安全隐患。