你知道127.0.0.2做什么的?

技术社群的这篇文章《被实习生问懵了: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

bisal的个人杂货铺的头像bisal的个人杂货铺

相关推荐

添加微信
添加微信
Ai学习群
返回顶部