在绑定套接字时,我对INADDR_ANY的使用和后果感到困惑。当然,INADDR_ANY会侦听所有本地接口。我的问题是关于它有什么后果。
我记得读到绑定到特定IP地址允许内核处理解复用但无法再找到引用。
INADDR_ANY的使用会产生这种后果,还是只是从我所有的本地ip中接收数据?使用各种绑定有什么好处和问题?
讨论此事的其他问题:
编辑:找到参考。 It's from Unix Network Programming (Stevens)绑定非通配符IP地址的一个优点是 将给定目标IP地址解复用到给定服务器 然后由内核完成进程。
这究竟意味着什么?
答案 0 :(得分:2)
您无法衡量使用特定IP或所有IP之间的性能差异。您可能希望根据应用程序的需要使用特定的一个...例如,如果您知道您不应该从外部IP面向(合法)连接,则您不希望从其接收输入,因为安全原因。
答案 1 :(得分:2)
当应用程序需要“知道”本地IP地址和直接网络布局时,绑定到特定接口只能在非常特殊的情况下使用。路由守护程序可能是最好的例子。
另一个更为行人的例子:如果您有一台多宿主机器(即一台机器与Internet有多个连接,可能是不同的ISP),您可以绑定到特定接口以确保连接通过给定连接。绑定到每个网络接口,应用程序可以检测到链路断开等。
需要“知道”本地IP地址的协议的实现(臭名昭着的例子:FTP,SIP,UPnP)倾向于将套接字绑定到特定接口。 (我认为它们是糟糕的协议,因为它们违反了传输层和应用层之间的隔离)。
除了这些情况之外,绑定到特定接口通常是过度工程,因为地址和接口可能会发生变化,程序必须检测这些条件才能更新相应的套接字。