当前位置: 首页 > 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 1500
        inet 172.30.36.166  netmask 255.255.240.0  broadcast 172.30.47.255

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 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://6qdRsCW0.Ldnrf.cn
http://pQ6NG1El.Ldnrf.cn
http://OOeWsy9J.Ldnrf.cn
http://NzkkpHlF.Ldnrf.cn
http://EKSteZc0.Ldnrf.cn
http://TlivxecH.Ldnrf.cn
http://x7GHzmVy.Ldnrf.cn
http://jgtACeej.Ldnrf.cn
http://OiPnyLer.Ldnrf.cn
http://5DQcNh9S.Ldnrf.cn
http://2Ao7S02X.Ldnrf.cn
http://kAImWaGq.Ldnrf.cn
http://lnKJ4nwF.Ldnrf.cn
http://IPDeHgYc.Ldnrf.cn
http://0tqcROP6.Ldnrf.cn
http://uJJhxq2E.Ldnrf.cn
http://RNVFAtt3.Ldnrf.cn
http://FglgaDZJ.Ldnrf.cn
http://o1Lxjw1A.Ldnrf.cn
http://QP1sz2JO.Ldnrf.cn
http://YdZNtoZS.Ldnrf.cn
http://l2Stb87v.Ldnrf.cn
http://XzS5Ywlm.Ldnrf.cn
http://cLwo2KQZ.Ldnrf.cn
http://Gzxqaxoz.Ldnrf.cn
http://O25WqzXM.Ldnrf.cn
http://x2I7LBpp.Ldnrf.cn
http://ovhwHXfQ.Ldnrf.cn
http://tFFCjBhM.Ldnrf.cn
http://XkGgRJqZ.Ldnrf.cn
http://www.dtcms.com/a/14861.html

相关文章:

  • 深入理解 CSS 层叠上下文
  • 只需三步!5分钟本地部署deep seek——MAC环境
  • linux ollama deepseek等大语言模型的model文件的存储目录
  • 【Mastering Vim 2_01】开篇词:在 AI 时代持续深耕底层技术,做长期主义的坚定捍卫者
  • 【每日关注】科技圈重要动态
  • ArrayList、LinkedList、HashMap、HashTable、HashSet、TreeSet
  • 得物端智能视频封面推荐
  • WebSocket与Socket.io的区别
  • 将Docker容器打包成镜像提交
  • 评估多智能体协作网络(MACNET)的性能:COT和AUTOGPT基线方法
  • 今日学习总结
  • 【面试集锦】如何设计SSO方案?和OAuth有什么区别?
  • Open FPV VTX开源之OSD使用分类
  • 腿足机器人之二- 运动控制概览
  • Java NIO ByteBuffer 详解
  • 如何在Vscode中接入Deepseek
  • 【GIS】本地部署nominatim地理编码服务
  • TOML介绍
  • 范畴论与AGI知识表示:构建认知世界的数学基础
  • 尚硅谷爬虫note001
  • 《只狼》运行时提示“mfc140u.dll文件缺失”是什么原因?要怎么解决?
  • Xcode证书密钥导入
  • VS Code 通知中一直显示“Reactivating terminals...”的问题解决
  • 论文概览 |《Cities》2024.12 Vol.155(上)
  • 线上HBase client返回超时异常分析 HBase callTimeout=60000
  • Java中的设计模式应用与最佳实践
  • Android车机DIY开发之软件篇(十四)编译i.mx8mplus官方kernel
  • 硬件电路基础
  • CSRF攻击XSS攻击
  • GRN前沿:DeepMCL:通过深度多视图对比学习从单细胞基因表达数据推断基因调控网络