為什麼ICMP Redirect隻發給主機?難道僅僅是協定規定嗎?非也!要知道标準的IP路由是單向将資料包向前逐跳推進的,通過路由查找能找到的是下一跳,而無法簡單的方式找到路徑的上一跳,除非進行額外的反向路徑查找,但是并不是标準規定必須的。如果要發送ICMP Redirect,能得到的資訊隻有IP報頭中的那一堆東西,如果要發送ICMP Redirect給上一跳路由器,怎麼知道誰是上一跳路由器呢?是以ICMP Redrect隻判斷資料報的源IP和下一跳IP是不是一個網段作為一個必要條件,如果是,說明資料報的源就是ICMP Redirect的目标,是以它就是一台主機了。 實際上,并不能說ICMP Redirect隻發給主機,試想如果上一跳路由器對資料包做了NAPT會怎麼樣呢?然而如果你把NAT路由器當成了一個代理,那也就無所謂稱謂了。