![Linux IP路由源地址选择](https://linux22.com/image/227390/Linux%20IP%E8%B7%AF%E7%94%B1%E6%BA%90%E5%9C%B0%E5%9D%80%E9%80%89%E6%8B%A9.png)
我一直在尝试独立验证回答这个 stackoverflow 问题当源没有请求特定源地址时,Linux 内核如何为 IP 数据包分配源地址。其中一条评论提到这个来源其中包含以下句子:
如果缺少此提示,内核将选择接口上配置的第一个地址,该地址与目标地址位于同一网络中...
我觉得这句话可以有两种解读:
- 内核选择与目标地址位于同一网络上的接口,然后选择分配给该接口的第一个地址。
- 在分配给接口的地址中,内核选择第一个与目标地址位于同一网络的地址。
我认为第一个是对该句子的幼稚(即纯粹语法)解释,但第二个是我猜测内核选择的方式。我的推理是这样的:为了简单起见,假设该网络上没有网关/路由器。如果所选源地址不在同一网络上(这在第一种解释中是可能的),那么目的地如何向源地址发送响应(例如 TCP ACK)?
哪种解释是正确的?
- 如果是第一个,目标如何将响应路由回源?
- 这种行为是否记录在任何地方(最好是 Linux 手册页)?