技术社群的这篇文章《被实习生问懵了:127.0.0.2是干啥的?》给我们讲解了127.0.0.2做什么用的,确实可能很多朋友都知道127.0.0.1,每个技术细节可能都蕴藏着一些技术原理,我们搞技术的,还是尽量了解。
原文如下:
上周五下午,我正在机房调试设备,旁边新来的实习生探过头来:
“哥,我问你个问题呗。127.0.0.1是本机地址,那127.0.0.2是干啥用的?”
我张嘴就想说“哪有127.0.0.2这地址”,但话到嘴边又觉得不对劲——万一真有呢?
偷偷摸出手机,在自己电脑上ping了一下127.0.0.2。结果你猜怎么着?通了!
那一刻我脸都红了。天天跟IP地址打交道,居然被一个实习生问住了。
回去我翻了一晚上资料,才把这事彻底搞明白。今天就跟大伙唠唠,那些教材上没写、但实际很有用的回环地址知识。
一、先搞明白:127.0.0.1不是一个人在战斗
先搞明白:127.0.0.1不是一个人在战斗。
很多教材都告诉我们:127.0.0.1是本地回环地址,也叫localhost。
这话没错,但不完整。
真相是:整个127.0.0.0到127.255.255.255,这1600多万个IP,全都是回环地址。
也就是说,你随便挑一个:
127.0.0.2
127.0.1.1
127.88.88.88
127.255.255.254
只要在这个范围里,ping它都能通。
为啥?因为当年设计TCP/IP协议的那帮人,专门留了这个网段。只要目标地址落在127.x.x.x里,操作系统就直接把数据包在内部消化掉,压根不往外发。
我后来在办公室做了个实验:ping 127.88.88.88,通了。
然后开Wireshark抓包,啥也抓不到。因为数据包根本没出电脑,在系统内部就绕回来了。
二、127.0.0.2和127.0.0.1到底有啥区别?
说实话,在绝大多数场景下,没任何区别。
都是指向本机,ping延迟都是0.0几毫秒,都是不走网卡。
那为啥要留这么多地址?
我后来问了几个老开发,才知道这里面的门道。
第一个用处:本机多服务隔离
比如你一台服务器上跑了三个服务:网站、API、数据库。你想让它们之间通过网络通信,但又不想暴露给外网。
可以这么配:
网站绑定127.0.0.1的8080端口
API绑定127.0.0.2的8080端口
数据库绑定127.0.0.3的3306端口
逻辑上分开了,好管理。虽然都在一台机器上,但对程序来说,就像在和不同的服务器打交道。
第二个用处:模拟集群环境
我有个做开发的朋友,经常需要测试分布式系统。但手头就一台电脑,咋整?
他在hosts文件里这么写:
127.0.0.1 server1 127.0.0.2 server2 127.0.0.3 server3
然后启动三个服务,分别绑定这三个地址。对程序来说,就像在和不同的服务器通信,但流量全都在本机转悠。
他说这招在微服务测试里特别好使。
三、Linux里那个127.0.1.1是个啥情况
如果你用过Ubuntu或者Debian,可能会在/etc/hosts里看到这么一行:
127.0.1.1 myhostname
我第一次看到也懵了:不是该用127.0.0.1吗?
后来查了才知道,这是Debian系列系统的一个小设计:
localhost → 127.0.0.1
主机名 → 127.0.1.1
目的是避免DNS解析冲突。虽然最终都指向本机,但程序解析主机名的时候能区分出来:哦,这是在解析我自己的名字,不是localhost。
我那个用Arch Linux的同事听说这事,笑了半天,说Debian用户真会给自己加戏。
四、回环接口其实就是一张“虚拟网卡”
在Linux里敲ip addr,会看到一个叫lo的接口:
1: lo: mtu 65536 inet 127.0.0.1/8 scope host lo
注意那个/8——意味着整个127网段都归这张接口管。
只要目标地址在127.x.x.x里,数据包都会被这个lo接口收走,然后原路返回。
从操作系统的角度看,这就是一张永远在线、永不掉线、延迟极低的虚拟网卡。
后来我去学路由器配置,发现设备里也有类似的东西,叫Loopback接口:
interface Loopback0 ip address 10.0.0.1 255.255.255.255
为啥要用Loopback?因为它只要设备还在运行,就永远不会Down。很多协议拿它当Router ID、BGP邻居地址,稳得很。
五、一个小实验,让你彻底记住
回去可以试试这几步:
第一步:打开命令行,ping一下127.0.0.2,看通不通
第二步:再ping一下127.88.88.88,看通不通
第三步:打开Wireshark抓包,ping 127.0.0.2,看看能不能抓到包
你会发现:包是抓不到的。因为它根本没出系统,直接在内部绕了一圈就回来了。
声明:来自bisal的个人杂货铺,仅代表创作者观点。链接:https://eyangzhen.com/8019.html