环回接口( loopback )-127.0.0.1 VS 192.168.0.5 VS 0.0.0.0, 服务器套接字(server socket)如何选择绑定哪个IP?

loopback 是什么东东?

本地环回接口(或地址),亦称回送地址(loopback address)。此类接口是应用最为广泛的一种虚接口,几乎在每台路由器上都会使用。

参考

《working with TCP sockets》

loopback 介绍

IP地址并不总是必须指向远程主机。特别是在开发中你经常想要连接到你本地主机上的套接字(sockets)。

大多数系统定义了一个环回接口(loopback interface)。这是个完全虚拟的接口,并且它和你网口的接口不同,它是没有连接到任何硬件的。
发送到环回接口的任何数据会立即在同一个接口被接收。在使用回环地址时你的网络被限制在本地主机。

回环接口的主机名(host name)被官方称为localhost,其回环IP地址是经典的 127.0.0.1。对于你的系统而言,这些在”hosts”文件中被定义。

服务器套接字如何选择绑定哪个IP地址?–127.0.0.1 VS 192.168.1.1 VS 0.0.0.0

绑定到 0.0.0.0 和 绑定到 127.0.0.1 或者 1.2.3.4 到底有何区别呢?

系统的环回接口以IP地址 127.0.0.1 表现。系统也有一个物理的、基于硬件的接口,它表现为不同的IP地址,让我们假设这个IP为 192.168.0.5。
当你绑定(bind)到一个特定的接口时,以其IP地址表现,你的套接字(socket)只会监听(listening)那个接口。它会忽略其他接口。

如果你绑定到 127.0.0.1,那么你的套接字将只会监听回环接口。在这种情况下,只有到 localhost 或者 127.0.0.1 的连接才会被路由到你的服务器套接字(server socket)。
由于这个接口只在本地可用,所以不允许任何外部连接。

如果你绑定到 192.168.0.5,在这个例子中,那么你的套接字将会只监听那个接口。
任何能够寻址到那个接口的客户端(clients)都将会被监听到,但是任何到 localhost 的连接都将不会被路由到那个服务器套接字。

如果你想要监听所有接口那么你可以使用 0.0.0.0.这将会绑定到任何可用的接口,环回接口或者其他。
大多数情况下,这正是你所期望的。

你可能感兴趣的:(TCP,socket)