为什么 FreeBSD 将本地主机 IP 与接口“lo0”匹配,而不是使用该 IP 的接口?

问题描述 投票:0回答:1

我最近注意到打印 FreeBSD 的路由表(带有

netstat -r
)显示:

Routing tables

Internet:
Destination        Gateway            Flags     Netif Expire
default            10.102.0.254       UGS         em0
10.102.0.0/16      link#3             U           em0
10.102.91.1        link#3             UHS         lo0
...

这条线对我来说毫无意义:

10.102.91.1        link#3             UHS         lo0

10.102.91.1是本机的IP地址,配置在接口

em0
.

为什么 FreeBSD 在被要求打印其路由表时说这个 IP 地址绑定到

lo0
而它应该绑定到
em0
(在那种特定情况下)?

我在 FreeBSD 联机帮助页中找不到

netstat
(https://man.freebsd.org/cgi/man.cgi?netstat) 的任何内容可以解释这个“选择”(?)。

此行为是否有技术原因?除了明确打印“嘿管理员,这个 IP 是本地的”。

freebsd netstat loopback-address
1个回答
0
投票

基本上,IP 堆栈并不是真正的每个接口,您可以应用过滤器或绑定来强制执行类似的东西。但在大多数情况下,如果您的机器在接口

eth3
上的 IP 为 10.102.91.1,则这是机器 IP,而不是接口 IP。 所以发送数据包到
10.102.91.1
127.0.0.1
是非常相似的。他们都到达 IP 堆栈的接收部分。 您仍然可以使用 bind 仅过滤来自特定 IP 的连接或数据包。但是,如果您不这样做,例如,侦听 tcp 端口 80 的服务器将收到发送的两个数据包
10.102.91.1:80
127.0.0.1:80
.

所以当你的 IP 路由表配置好后,除非你做了什么不寻常的事情,

10.102.91.1
127.0.0.1
都会到达同一个地方。这是IP栈的接收端。 事实上,至少在 linux 中,我很确定如果你发送一个数据包到
10.102.91.1
,而且这是一个本地 IP,它永远不会真正遍历任何与
eth3

相关的东西
© www.soinside.com 2019 - 2024. All rights reserved.