天天看点

《Linux高性能服务器编程》——2.6 重定向

图2-3显示了icmp重定向报文也能用于更新路由表,因此本节我们简要讨论icmp重定向。

icmp重定向报文格式如图2-4所示。

《Linux高性能服务器编程》——2.6 重定向

我们在1.1节讨论过icmp报文头部的3个固定字段:8位类型、8位代码和16位校验和。icmp重定向报文的类型值是5,代码字段有4个可选值,用来区分不同的重定向类型。本书仅讨论主机重定向,其代码值为1。

icmp重定向报文的数据部分含义很明确,它给接收方提供了如下两个信息:

《Linux高性能服务器编程》——2.6 重定向

接收主机根据这两个信息就可以断定引起重定向的ip数据报应该使用哪个路由器来转发,并且以此来更新路由表(通常是更新路由表缓冲,而不是直接更改路由表)。

/proc/sys/net/ipv4/conf/all/send_redirects内核参数指定是否允许发送icmp重定向报文,而/proc/sys/net/ipv4/conf/all/accept_redirects内核参数则指定是否允许接收icmp重定向报文。一般来说,主机只能接收icmp重定向报文,而路由器只能发送icmp重定向报文。

2.4.3节中,我们把机器ernest-laptop的网关设置成了机器kongming20,2.5节中我们又使能了kongming20的数据报转发功能,因此机器ernest-laptop将通过kongming20来访问因特网,比如在ernest-laptop上执行如下ping命令:

从ping命令的输出来看,kongming20给ernest-laptop发送了一个icmp重定向报文,告诉它请通过192.168.1.1来访问目标机器,因为这对ernest-laptop来说是更合理的路由方式。当主机ernest-laptop收到这样的icmp重定向报文后,它将更新其路由表缓冲(使用命令route -cn查看),并使用新的路由方式来发送后续数据报。上面讨论的重定向过程可用图2-5来总结。

《Linux高性能服务器编程》——2.6 重定向

继续阅读