冷知识:其实你有超过1600万个本地回环地址


很多人不知道

除了常用的 localhost 127.0.0.1 回环(Loopback)地址,127.0.0.1/8 子网的所有地址都是回环地址。

而2^24 = 16,777,216,这意味着你总共有超过1600万个可用的ipv4回环。

也就是说你可以启动1600多万个MySQL并且都为它们绑定上一个本地ip的3306端口

[!success]咳咳,说正经的。
使用不同的ipv4回环地址,为服务分配默认端口,根据不同项目分配不同回环ip,可以让你的开发运维过程更清晰。
例如,你可以要求某个项目的所有服务都监听127.114.51.4
又或者,为多个MySQL分配127.0.1.1:3306,127.0.10.10:3306……
这样当你看到对127.114.51.4的访问,就知道这是池沼项目
当你看到某个服务使用了3306端口,你就确信它是MySQL

标准的ipv6回环倒是只有一个,::1/128,或者说0000:0000:0000:0000:0000:0000:0000:0001

当然如果你觉得不够用,可以自己写个ipv6地址绑定到lo。鉴于ipv6极大的地址空间,你几乎不可能和一个外部的ipv6发生冲突(直接划大片网段或者故意冲突的当我没说)。为了安全起见,你可以使用 ::ffff:7f00:0/104 (它正是127.0.0.1/8在ipv6空间里的IPv4-Mapped Address,虽然不会自动分配到lo,但至少你可以确信没有人会占用它)

↑ 以上内容非标准实践,RFC 4291仅规定一个ipv6回环地址。采用以上操作出现任何问题,本人概不负责。

47 个赞

很难有实际上比较有用的用法,主要假如你监听了 0.0.0.0:3306 那无论是 127.0.1.1:3306 还是什么都无法监听。

也只能说早期分配ip太粗糙,整个 /8 都被浪费了

8 个赞

用一個扔一個()

3 个赞

是的,不过也无所谓了,就算多个/8,ipv4也迟早会被用尽,同时因为v4美国垄断的太狠,也总要有v6出来稍微制衡一下

2 个赞

学到了,涨姿势啦! :partying_face:

1 个赞

谢谢大佬

2 个赞

:smiling_face_with_tear:没看懂,等我去学习一下

2 个赞

不错,可以类比成域名用

1 个赞

学习啦,感谢佬分享

2 个赞

谢谢大佬

2 个赞

学习了,感谢楼主的分享。

2 个赞

这么多啊,那我借你一个,127.127.127.127,随便d不用客气

7 个赞

大多数情况下没有必要,也不推荐直接监听0.0.0.0吧

1 个赞

感谢大佬分享,但是要修改应用的监听ip+端口,好像要从代码里面改很麻烦吧。如果作者没讲的话,都找不到在哪里 :open_mouth:

1 个赞

太冷了吧 :sweat_smile:

1 个赞

涨姿势了 :+1:

1 个赞

哈哈赶巧了,我开i站之前还在看王道408网络层强化,然后就在i站又刷到这个知识点了

6 个赞

我一开始学的时候也有这个疑问,但得结合那个时期的实际情况考虑,早期互联网使用人数非常稀少,在那个时代来看IPv4已足够满足需求,后来网络发展迅速使用人数指数级别上升,才有了子网、CIDR、NAT等补救措施,但是现在IPv4地址资源事实上已经彻底枯竭了

1 个赞

我知道原因,虽然现在不会用但是会提的 abcd 类地址就是当时的产物。而且枯竭是枯竭,但是也有大量的分配不均。

6 个赞

其实就算把这几个私网地址段和127.0.0.1/8都划给公网,对于缓解地址枯竭也不过杯水车薪。枯竭的原因归根结底是ipv4的32位的地址空间实在不足,而不是私网和环回地址段划得太激进。

2 个赞