在同一台机器上公开两个服务,如果我使用内部 LAN IPv4 地址,我的连接是否会转到路由器并返回到我的机器?
如果是,是否可以通过使用 127.0.0.1 来防止这种情况?
服务始终在同一台机器上,并且 IPv4 地址不会随时间变化。服务在 UNIX 或 Windows 机器上公开,而无需用户知情
答案1
不,连接不会往返于路由器。
如果您的机器的 IP 地址是10.1.2.3
,并且您正在打开与该机器的连接,则10.1.2.3
该连接将在内部处理,并且永远不会离开您的机器。
10.1.2.3
Esa Jokinen 是正确的,环回接口正是用于此目的,不使用它会有一些影响(主要是关于安全性),但对于实际目的而言,使用或并没有什么区别127.0.0.1
。
如果您不需要其他主机访问您的服务,最好将您的服务限制到环回设备。
答案2
是的。这个功能称为本地环回专门用于您描述的目的:它使同一台机器上的应用程序能够相互通信。
不仅是127.0.0.1
,而且所有地址127.0.0.0/8
都是特殊用途 IP 地址为保留本地环回。目前规定于RFC 8190, 2.2.2但它至少可以追溯到RFC 1122,3.2.1.3自 1989 年 10 月起:
(G) {
127
,<any>
}内部主机环回地址。此形式的地址不得出现在主机外部。
这本地环回通常实现为虚拟网络接口在您的操作系统的网络软件上(例如lo
,lo0
在 UNIX 或Loopback Pseudo-Interface 1
Windows 上);因此,它甚至不会将数据包传递给任何网络接口控制器在机器上。
为了完整起见,还有:
IPv6 的本地环回
::1/128
:(RFC 6890, 2.2.3;RFC 4291, 2.5.3)。单播地址
0:0:0:0:0:0:0:1
称为环回地址。
节点可以使用它来向自身发送 IPv6 数据包。它不得分配给任何物理接口。
Unix 套接字工作原理类似,但完全在内核中,使用文件系统作为其命名空间:两个进程可以通过打开同一个套接字(“文件”)进行通信。
AF_UNIX
(也称为)套接字AF_LOCAL
系列用于
在同一台机器上的进程之间高效通信。传统上,UNIX 域套接字可以是未命名的,也可以绑定到文件系统路径名(标记为套接字类型)。Linux 还支持独立于文件系统的抽象命名空间。
- Unix 套接字和 TCP/IP 套接字有什么区别?很值得一读。
- 使用 Unix 套接字是从技术上讲可行,但 HTTP 很少见。