当前位置: 首页 > news >正文

服务器绑定 127.0.0.1 和 0.0.0.0 的区别

前言

IP 地址实际上并不是分配给计算机的,而是分配给网卡的,因此当计算机上存在多块网卡时,每一块网卡都会有自己的 IP 地址

绑定 127.0.0.1 是绑定到 lookback 这个虚拟的本地回环接口,该接口只处理本机上的数据,如果服务器绑定 127.0.0.1 外部是无法访问的。

绑定 0.0.0.0 是绑定到所有可用的网络接口,也就是说,此时可以接受来自任何网络接口的连接请求,外部是可以正常访问的。

在 ubuntu 系统可以用 ifconfig 命令查看网络接口信息,Win 系统用 ipconfig 命令查看。

$ ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500inet 172.30.36.166  netmask 255.255.240.0  broadcast 172.30.47.255lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536inet 127.0.0.1  netmask 255.0.0.0

下面用代码来演示两种情况的区别。

绑定 127.0.0.1

以下代码由 通义千问 2.5 生成:

func handleConnection(conn net.Conn) {defer conn.Close()scanner := bufio.NewScanner(conn)for scanner.Scan() {text := scanner.Text()fmt.Println("Received:", text)_, err := conn.Write([]byte(text + "\n"))if err != nil {fmt.Println("Error writing to socket:", err)break}}if err := scanner.Err(); err != nil {fmt.Println("Error reading from socket:", err)}
}func main() {port := "8080"listener, err := net.Listen("tcp", "127.0.0.1:"+port)if err != nil {fmt.Println("Error listening:", err.Error())os.Exit(1)}defer listener.Close()fmt.Println("Listening on:" + port)for {conn, err := listener.Accept()if err != nil {fmt.Println("Error accepting:", err.Error())continue}go handleConnection(conn)}
}

运行这段代码:

$ go run echo.go 
Listening on:8080

先在本机使用 telnet 测试能否访问:

$ telnet 127.0.0.1 8080
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
hello
hello

此时一切正常,服务器可以正常响应。

再换另一台计算机测试:

$ telnet 47.100.200.202 8080
Trying 47.100.200.202...
telnet: Unable to connect to remote host: Connection refused

直接报错,不能访问。

这里访问的 47.100.200.202 是服务器的公网 IP,上面的 172.30.36.166 是内网 IP。

绑定 0.0.0.0

将 127.0.0.1 修改为 0.0.0.0 后重新运行。

listener, err := net.Listen("tcp", "0.0.0.0:"+port)

还是先在本机测试:

$ telnet 127.0.0.1 8080
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
hi
hi

还是可以正常访问,没有问题。

再换到另一台计算机测试:

$ telnet 47.100.200.202 8080
Trying 47.100.200.202...
Connected to 47.100.200.202.
Escape character is '^]'.
hello hi
hello hi

这时就可以正常访问了。

参考资料

  • 《网络是怎样连接的》
  • 断网了,还能 ping 通 127.0.0.1 吗?
http://www.lryc.cn/news/534393.html

相关文章:

  • DeepSeek提示词手册
  • 校园网规划方案
  • python怎么求 一个数是否包含3
  • ARM RFEIA指令作用
  • 【Kubernetes】常用命令全解析:从入门到实战(上)
  • 项目实战(11)-双通道气体压力计V1.0
  • Node.js怎么调用到打包的python文件呢
  • Transformer 详解:了解 GPT、BERT 和 T5 背后的模型
  • 利用二分法进行 SQL 盲注
  • 如何通过 bugreport 分析 Android 系统日志?
  • 安防机器人电源解决方案
  • 内网穿透的应用-Ubuntu本地Docker搭建pichome文件管理系统打造个人云相册
  • 力扣-栈与队列-1047 删除字符串中的所有相邻重复项
  • 旅客服务系统(PSS, Passenger Service System)
  • Linux路径中的‘~‘
  • 认识网络安全
  • 信息科技伦理与道德3-3:智能决策
  • 以 Python 为工具搭建的热门旅游景点数据分析系统
  • ZooKeeper 技术全解:概念、功能、文件系统与主从同步
  • Visual Studio Code 的 AI 编程助手
  • Kafka的ISR是什么,HW是什么,怎么保证可靠性,Kafka怎么实现顺序消息?为什么Kafka的broker上的topic越多,效率越慢?
  • Ollama系列---【ollama使用gpu运行大模型】
  • 使用C语言实现MySQL数据库的增删改查操作指南
  • 【Golang学习之旅】Go + Redis 缓存设计与优化(项目实战)
  • 2、k8s 二进制安装(详细)
  • 安卓开发,底部导航栏
  • CWOI-N RER 1 > 2 Solution
  • 字节跳动后端一面
  • Dify 框架连接 PGSQL 数据库与 Sandbox 环境下的 Linux 系统调用权限问题
  • ModuleJS 与 CommonJS 混用的两种解决方案