本节书摘来自异步社区《TCP/IP路由技术(第一卷)(第二版)》一书中的第1章,第1.5节,作者【美】Jeff Doyle,CCIE #1919,更多章节内容可以访问云栖社区“异步社区”公众号查看
1.5 ICMP
Internet消息控制协议(ICMP)指定了多种消息类型,这些消息的共同目的就是管理网络,详见RFC792。ICMP的消息可以分为错误消息、请求消息和响应消息。图1-16给出了一般的ICMP数据包格式。数据包可以通过类型来标识,许多数据包类型都有多个指定的类型,可以用代码字段来标识它们。表1-6列出了多种ICMP的数据包类型和代码,详见RFC1700。
示例1-11和示例1-12给出了协议分析器捕捉到的两种众所周知的ICMP消息——Echo请求和Echo回复,它们常用在ping命令的功能中。
示例1-11 ICMP的Echo消息及其IPv4头部
示例1-12 ICMP的Echo回复消息
虽然大部分ICMP类型都与路由选择功能有关,但是有3个类型特别重要:
- 路由器通告(Router Advertisement)和 路由器选择(Router Selection)——分别是类型9和类型10,它们用于ICMP路由器发现协议(IRDP)。IRDP协议用于某些操作系统发现本地的路由器(例如微软Windows操作系统的大多数版本)。
- 重定向(Redirection)——是ICMP的类型5,被路由器用于通知主机去往指定目标的网关,是数据链路上的另一台路由器。假设路由器A和路由器B连接在相同的以太网上,主机X也在以太网上,而且X还把路由器A配置为自己的缺省网关。如果主机向路由器A发送数据包,而路由器A发现该数据包目的地址需通过路由器B才可以到达(即路由器A必须在接收此数据包的端口再次转发此数据包)。路由器A不仅要向路由器B转发数据包,而且还要向主机X发送ICMP重定向消息,通知它如果继续向特定的目标发送数据包,那么请直接将数据包发送给路由器B。示例1-13显示出路由器发送了一个重定向消息。
示例1-13 使用调试功能debug ip icmp,可以看到路由器向主机10.158.43.25发送了一个重定向消息,通知它到达目的地10.158.40.1的正确网关应该是路由器10.158.43.10
当数据链路上连接多台路由器时,避免数据包重定向的一个窍门是将每一台主机的缺省网关设置为主机自己的IPv4地址。于是主机对任何目的地址都会发送ARP请求,当目的地址不属于本地数据链路时,合适的路由器将通过代理ARP功能回复请求。使用这种策略避免重定向是有争议的,因为重定向会被减少或消除,但是ARP的流量又增加了。
在IOS软件系统中,缺省状态下重定向功能是打开的。在接口上使用命令no ip redirects可以关闭此功能。