在博主部署 MCP Server 的过程中,需要将 MCP Server 以 streamable-http 的方式对外提供服务,这就会涉及到主机 {host} 和端口 {port} 的配置问题。MCP Server 以 streamable-http 的方式提供服务时,默认将 {host} 设置为 127.0.0.1,{port} 设置为 8000。然而,这种设置下服务只能被本机访问,无法从外部设备访问。
为了实现对外服务,通常会将 {host} 设置为 0.0.0.0。为了详细说明 127.0.0.1 和 0.0.0.0 的区别和应用场景,特撰写此博客进行说明。
127.0.0.1和0.0.0.0 - 本地服务和对外服务
在博主部署 MCP Server 的过程中,需要将 MCP Server 以 streamable-http 的方式对外提供服务,这就会涉及到主机 {host} 和端口 {port} 的配置问题。MCP Server 以 streamable-http 的方式提供服务时,默认将 {host} 设置为 127.0.0.1,{port} 设置为 8000。然而,这种设置下服务只能被本机访问,无法从外部设备访问。
为了实现对外服务,通常会将 {host} 设置为 0.0.0.0。为了详细说明 127.0.0.1 和 0.0.0.0 的区别和应用场景,特撰写此博客进行说明。
一、IP 地址简介
在理解 127.0.0.1 和 0.0.0.0 的作用之前,我们先简单了解 IP 地址的基本概念。
- IP 地址是互联网协议中用于标识设备在网络中的唯一地址。IP 地址包括 IPV4 地址和 IPV6 地址。
- 在 IPv4 中,IP 地址由四个 0~255 的数字组成,例如 192.168.1.1。
- 某些特定的 IP 地址具有特殊用途,如 127.0.0.1 和 0.0.0.0。
二、127.0.0.1: 本地回环地址
127.0.0.1 被称为回环地址(Loopback Address),它表示主机自身。当你将服务绑定到 127.0.0.1 时,意味着这个服务只对本机可见,其他设备无法通过局域网或公网访问该服务。
应用场景:
- 开发阶段测试 Web 应用;
- 防止服务被外部随意访问,增强安全性;
- 多个服务之间进行本地通信。
此外,我们还经常能见到 localhost
,localhost
是 127.0.0.1 的别名,它通常会被解析为 127.0.0.1,两者通常是等价的。例如在 C:\Windows\System32\drivers\etc\hosts
文件中,就写明:
1 | # localhost name resolution is handled within DNS itself. |
三、0.0.0.0: 监听所有网络接口
0.0.0.0 并不是一个真实的 IP 地址,它不代表任何实际的主机或设备。当你将服务绑定到 0.0.0.0 时,服务将监听本机上所有网络接口,包括本地回环接口(127.0.0.1)、局域网接口(如 192.168.x.x),甚至是公网接口(如果服务器有公网 IP)。
应用场景:
- 将服务部署到服务器上供外部访问;
- 在局域网中提供 API 或 Web 服务;
- 想要通过手机、平板或其他电脑访问本地开发的服务。
四、本地服务和对外服务
然后我们再来看看 127.0.0.1 和 0.0.0.0 分别表示本地服务和对外服务的含义。
举个例子,假如我们在局域网的某台服务器 A(IP 地址为 192.168.0.111)上部署了 MCP Server 服务,同时有另外一台服务器 B(IP 地址为 192.168.0.222)要请求这个服务。
- 如果我们在服务器 A 上部署服务的设置为:{host = 127.0.0.1}:{port = 8000},那么,只有服务器 A 才能访问这个服务,服务器 B 是无法访问这个服务的。这就是本地服务。
- 如果我们在服务器 A 上部署服务的设置为:{host = 0.0.0.0}:{port = 8000},那么表明,服务器 A 将在其所有网络接口上监听该服务,则服务器 A、B 均可以访问这个服务。服务器 B 需要通过 192.168.0.111:8000 访问这个服务。这就是对外服务。
监听端口、对外提供服务和访问服务:
监听端口:A 以 0.0.0.0:8000 的方式监听 8000 端口,表明 A 会在其所有网络接口(本机的、局域网的、公网的)上监听对 8000 端口的请求。
对外提供服务:A 是以 8000 端口对外提供这个 MCP Server 服务的,任何机器要访问这个服务,需要通过 {A 的 IP 地址}:{8000} 进行访问,本机就是 127.0.0.1:8000,局域网是 192.168.0.111:8000。
- 如果 A 有个公网 IP 203.0.113.1,那么公网上的主机要访问这个 MCP Server 服务就需要通过 203.0.113.1:8000 访问。
访问服务:任何机器(包括 A 本身)要访问 A 上的这个 MCP Server 服务,就要指定 {A 的 IP 地址}:{MCP Server 的端口} 才能访问。亦即,在 {host}:{port} 中,{host} 用于指明要访问的机器,{port} 用于指明要访问的服务。
- 对于 A,它可以通过 127.0.0.1:8000 访问,也可以通过 192.168.0.111:8000 访问,也可以通过 203.0.113.1:8000 访问。
- 对于 B,它可以通过 192.168.0.111:8000 访问,也可以通过 203.0.113.1:8000 访问。
- 对于公网上的主机,它们只能通过 203.0.113.1:8000 访问。
最后提一嘴可能容易迷惑的地方:“服务器 A 将在其所有网络接口上监听该服务”是什么意思?
- 这里的所有网络接口,指的是服务器 A 所具有的网络接口
- 对于本机接口,那就是 127.0.0.1
- 对于局域网接口,那就是 192.168.0.111
- 对于公网接口,那就是 203.0.113.1
这三个接口均指向服务器 A 这台机器。