7

我对绑定套接字时 INADDR_ANY 的使用和后果感到困惑。当然,INADDR_ANY 监听所有本地接口。我的问题是这会产生什么后果。

我记得读到绑定到特定 IP 地址允许内核处理多路分离但无法再找到引用。

使用 INADDR_ANY 会产生这种后果,还是我只是从我所有的本地 IP 接收数据?使用各种装订有什么好处和问题?

讨论这个的其他问题:

与 INADDR_ANY 绑定

关于 INADDR_ANY 的问题

编辑:找到参考。来自 Unix Network Programming (Stevens)

绑定非通配符 IP 地址的一个优点是,给定目标 IP 地址到给定服务器进程的多路分解然后由内核完成。

这到底是什么意思?

4

2 回答 2

3

绑定到特定接口仅在非常特殊的情况下使用,当应用程序需要“知道”本地 IP 地址和即时网络布局时。路由守护程序可能是最好的例子。

另一个更普通的例子:如果您有一台多宿主机器(即一台具有多个 Internet 连接的机器,可能是不同的 ISP),您可以绑定到特定接口以确保连接通过给定连接。分别绑定到每个网络接口,应用程序可以检测链接断开等。

需要“知道”本地 IP 地址的协议的实现(臭名昭著的例子:FTP、SIP、UPnP)倾向于将套接字绑定到特定的接口。(我认为它们是糟糕的协议,因为它们违反了传输层和应用层之间的隔离)。

除了这些情况,绑定到特定接口通常是过度工程,因为地址和接口可能会改变,程序必须检测这些条件以更新相应的套接字。

于 2014-02-04T04:03:03.880 回答
2

您将无法衡量使用特定 IP 或所有 IP 之间的任何性能差异。您可能希望根据应用程序的需要使用特定的连接...例如,如果您知道永远不应该从面向外部的 IP 建立(合法)连接,则您不希望接收来自它的输入,因为安全原因。

于 2013-09-17T10:48:31.453 回答