天天看點

《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 重定向

繼續閱讀