127.0.0.1和0.0.0.0的区别

今天在使用 docker 部署一个 go 语言的服务,发现怎么都调试不通。期初一直以为是自己的部署问题,后来发现了问题所在是绑定地址的问题。

这里强调一下,我部署的服务是 override 服务,感兴趣的去github搜索一下,很牛的。我是一个 linux do 狂热追随者。

go 语言服务

在 Go 服务中,绑定 127.0.0.1 和绑定 0.0.0.0 之间有以下区别:

  1. 127.0.0.1(localhost,回环地址):

    • 服务只会在本机(即服务所在的机器)上可以访问,不能被外部网络或其他设备访问。
    • 这是一个回环地址,通常用于开发和测试环境。
    • 典型用例:本地开发时使用,确保服务只在本机上运行,外部无法连接。
  2. 0.0.0.0(通配符地址):

    • 绑定到 0.0.0.0 意味着服务会监听所有网络接口,包括本地网络接口和外部接口。
    • 这使得服务可以从任何 IP 地址访问,适用于需要对外公开的服务。
    • 典型用例:在生产环境中,当你希望外部用户能够访问这个服务时使用。

总结:

  • 127.0.0.1:仅限本机访问,适合本地开发。
  • 0.0.0.0:允许外部访问,适合生产环境或需要与其他机器通信的场景。

nodejs Vue

其实别的服务也是相同的原理,像 nodejs 也是的,只不过nodejs默认绑定的是 0.0.0.0 ,所以我们可能没有遇到过这个问题。如果你不设置这个通配符地址,就算是在同一个局域网,别人也是无法访问你的服务的。

前端开发可以联想到,vue 开启局域网服务是要配置以下代码的,否则就算是在同一个局域网,别人也是无法访问你的服务的。

  devServer: {
    host: '0.0.0.0'
  }

扩展

回环地址和通配符地址是网络编程中常见的概念,它们用于定义服务器在网络中如何接受连接。

1. 回环地址(Loopback Address)

  • 定义:回环地址是指一个网络接口地址,用于在本机内部进行通信。它的典型地址是 127.0.0.1 ,有时也称为 localhost

  • 用途

    • 回环地址只允许来自本地计算机的连接,即服务器与客户端必须在同一台机器上。
    • 不会通过任何实际的网络接口,因此不会产生网络流量。
  • 适用场景

    • 本地开发和调试。
    • 用于测试网络应用,确保程序正常运行而不需要外部网络连接。
  • 示例

    在 Go 语言中,绑定 127.0.0.1

     http.ListenAndServe("127.0.0.1:8080", nil)
 这个服务器只能从本地访问,其他机器无法连接。

2. 通配符地址(Wildcard Address)

  • 定义:通配符地址表示服务器监听所有可用的网络接口,常见的通配符地址是 0.0.0.0 ,它代表服务器将接受来自任何 IP 地址的连接。

  • 用途

    • 通配符地址让服务器可以接受来自局域网、广域网,甚至互联网的连接。
    • 适合需要对外提供服务的情况,如生产环境中的 Web 服务器。
  • 适用场景

    • 部署在云端或网络中,允许客户端通过远程访问服务器。
  • 示例

    在 Go 语言中,绑定 0.0.0.0

     http.ListenAndServe("0.0.0.0:8080", nil)
 服务器将监听所有接口,允许外部设备连接。

总结:

  • 回环地址 (127.0.0.1):仅限本机访问,适用于本地开发和测试。
  • 通配符地址 (0.0.0.0):允许从任何 IP 地址访问,适用于需要对外公开的服务。

0.0.0.0 到底是什么

严格来说, 0.0.0.0 不是一个常规的 IP 地址,而是一种特殊用途的地址,用于在网络编程中表示“所有可用的网络接口”。它的本质并不是用于标识某一台具体的设备,而是表示服务器可以监听来自所有网络接口的连接。

0.0.0.0 的本质:

  1. 通配符地址0.0.0.0 是一个通配符地址,意味着服务器将监听所有网络接口(不论是本地接口还是外部接口)。这与特定的 IP 地址不同,因为它并不指向某一个特定的网络设备或主机。

  2. 绑定所有接口:当程序在 0.0.0.0 上监听时,它实际上会监听这台设备上的所有 IP 地址(包括局域网和外网接口),因此允许来自任意网络的连接。

    • 例如,如果服务器有多个网络接口(一个连接局域网,一个连接外网),绑定 0.0.0.0 将使得服务器能够通过这些接口接收来自不同网络的请求。
  3. 在不同上下文中的解释

    • 服务器端:在服务器端,绑定 0.0.0.0 意味着监听所有网络接口,通常用于服务器软件,使其可以接受来自任何网络的连接。
    • 路由器和路由表:在路由表中, 0.0.0.0 代表默认路由,用于指示当无法找到具体匹配的路由时,应该将流量发送到某一默认网关。

0.0.0.0 与 IP 地址的区别:

  • 普通 IP 地址:像 192.168.1.1127.0.0.1 这样的地址用来标识特定的网络接口或主机,是某一设备的具体 IP 地址。
  • 0.0.0.0:表示“所有网络接口”或“默认”,而不是某一个具体的设备或网络接口。

使用场景:

  • 在编写服务器程序时,使用 0.0.0.0 让服务器监听所有网络接口,使其对外部开放连接。
  • 在路由器中,0.0.0.0 通常作为默认路由,指示当没有特定路由匹配时应该将数据包发往默认网关。

总结
0.0.0.0 是一个通配符地址,表示监听所有网络接口,而不是一个传统意义上的 IP 地址。它主要用于网络编程中,来让服务器监听来自任意网络的连接。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值