你几乎是正确的。
1)我有这样的静态路由:Router3 -> Router2 -> Router1 -> Router0
ad 1 :不会有 ICMP 重定向,因为路由器 3 的下一跳,即路由器 2 与 PC0 不在同一个子网上。每次 PC0 与 PC1 通信时,路径将是 PC0 -> Router3 -> Router2 -> Router1 -> Router0 -> PC1
完全正确。由于Router3不知道完整路径,只知道下一跳,它只会将数据包转发给Router2
2)我有这样的静态路由:Router3 -> Router1 -> Router0
ad 2:在开始通信将是 PC0 -> Router3 -> Router1 -> Router0 -> PC1 然后 ICMP 重定向将发送,下一个通信将是 PC0 -> Router1 -> Router0 -> PC1 和 ICMP 重定向将再次发送和下一个通信将是 PC0 -> Router0 -> PC1
几乎。您说路由器 3 将向 PC0 发送 ICMP 重定向是正确的,通知 PC0 到达 PC1 的正确“下一跳”是使用路由器 1。 但是,当 ICMP Redirect 发送给原始发送者时,原始数据包仍然被转发。这意味着当Router1接收到原始数据包时,它将接收来自其自己网络中的主机的数据包,对于该主机,存在更好的下一跳,也在同一网络(Router0)中。因此,Router1 也会从第一个数据包发送 ICMP 重定向。
所以第一个数据包的路径实际上是Router3 -> Router1 -> Router0 -> PC1。但是Router3和Router1都会向PC0 发送一个ICMP 重定向,通知PC0 更好的下一跳。由于Router1 的ICMP 重定向将在Router3 之后进行,那么Router1 的ICMP 重定向将覆盖Router3 的。所以第二个数据包将进入 PC0 -> Router0 -> PC1。
3)我有这样的静态路由:Router3 -> Router0
广告 3:在起始 PC0 -> Router3 -> Router0 -> PC1。然后,ICMP 重定向,路径将是 PC0 -> Router0 -> PC1
完全正确。
最后要记住两点:
首先,在所有情况下,ICMP 重定向都是临时的。我相信 PC0 将使用 ICMP 重定向中的信息 10 分钟,然后“返回”它之前知道的内容......这将提示额外的 ICMP 重定向,以及额外的 10 分钟更有效的路由。
其次,ICMP Redirect 是在 Internet 是一个不错的地方并拥有值得信赖的人的时候创建的。现在,互联网是一个黑暗而可怕的地方,你应该很少信任它。作为安全最佳实践,大多数网络管理员会阻止其路由器发送 ICMP 重定向并阻止其路由器“服从”ICMP 重定向。同样,许多客户端操作系统也完全忽略了 ICMP 重定向。
这样做的原因是很容易滥用 ICMP 重定向成为中间人。如果您和我碰巧在同一个网络上,我可以轻松地向您发送 ICMP 重定向消息,告诉您“更好的下一跳”以到达您的 [Facebook、银行、电子商务、Intra-net 门户、任何东西] 网络是通过我自己的IP。瞧,即时的中间人。
因此,我认为了解 ICMP Redirect 的基础知识是件好事,但我认为花很多时间掌握它们的工作原理并不是很有用。它几乎全面禁用和/或禁止 - 有充分的理由。