X 友 plantegg 在测试 MySQL 的连接问题时,使用了 IP 127.1,因此引起了一些网友的兴趣。我在第一次知道这些时,也曾怀疑自己学了假的计算机网络课程。所以整理了一些像是“茴字的四种写法”一类的冷知识。各位读者,请记着!这些知识应该记着。将来做网管的时候,写规则要用。(恳切脸)

IPv4

在学习 IPv6 时,大家都知道,连续的 0 可以省略,写成连续的两个冒号 ::。在 IPv4 中同样可以简写。

IPv4 的简写

正如 plantegg 提到1的, 127.1127.0.0.1。就是直接省略了中间的 0 值点分位。

常见的 IP 格式 127.0.0.1 这种是使用了点分位方式,即用点 . 分隔开的四个字节。如果不用点分位,直接写成 16 进制 0x7f000001 也是可以的,10 进制 2130706433 也行,8进制 017700000001,这些都等同于 127.0.0.1

点分位也不要求一定分成4个,可以只将第一个字节分开,比如 1.65793 等同于 1.1.1.1。每个分位也不要求统一进制,比如其对应的 8 进制是 1.0200401。同理,127.0.0.1 也能写成 0x7f.01

看到这里,应该不难理解 IPv4 只能省略 0 值分位了吧,127.1.1.1 能写成 127.65793,同理,127.0.0.1 就能简写成 127.1

IPv4 的本质是 32 位的整数,在真正在网络层面使用这些写法的 IP 时,会自动转换成整数值,一般打印输出时,会按标准的 4 个占分位进行格式化。

最短的 IPv4 地址

Cloudflare 有一个 DNS/Warp 服务 IP 1.1.1.1 非常酷2。实际上,它的备用 IP 1.0.0.1 则更酷,因为按上面的规则,可以简单写成 1.1,这是最酷的 A 类 IPv4 地址,因为它是可用范围中的第一个。

在非等宽字体中,1 一般要窄于其他字符,所以 1.1 可能是打印出来宽度最短的公网 IPv4 地址。

域名

在大众眼中的通俗概念中,对一些术语和规则有着与专业领域不同的认知。

结尾省略的点

比如二级域名和顶级域名的定义。通俗定义的顶级域名,是指 dallas.lu 这种需要注册的域名,二级域名是指其子域名比如 cdn.dallas.lu。但 .lu 才算是顶级域名。顶级域名之上,还有根域名,即 .。所以,dallas.lu. 才算一个完整的域名。但在日常使用中,其顶级域名后缀 .lu 即足够使其与主机名/本地域区分开来,所以结尾的 . 是可省略的。

如果你拥有过域名,并设置过 CNAME 解析或 NS,可能遇到过必须在结尾加个 . 的情况。但如今,如 Cloudflare 等服务商都允许不写绝对完整的域名了。逐渐很多人就忘记了这件事,所以在域名结尾加个 .,会有意外的效果。比如,阿里云是禁止使用未备案的域名提供 Web 访问的,但其没有考虑结尾含 . 的情况,所以在结尾加上 . 就能正常访问。这个方式我用了很多年,直到大概最近三年内才失效。

有趣的是,各家网站对于域名结尾的 . 的处理方式也不一样。比如,http://tesla.com.http://google.com. 是跳转到无 . 结尾的域名;而 http://microsoft.com. 是 404 页面;http://x.com.http://amazon.com. 是空白页面;http://baidu.com. 是连接被重置;http://openai.com. 则可正常访问。

最短的 URL

对于顶级域名来说,是不能直接访问的,因为它只由2个以上的字母组成,与主机名/本地域的格式相同而造成冲突。但如果在后面加一个 .,就能够作为域名来解析了。

所以,最短的网址之一是 http://to.,目前其跳转到 www.to.。其二是 http://ai.,目前正常访问。

相似的域名

IDN 域名中可以使用更多的字符。其中很多跟英文字母非常像,如果浏览器不对其转码显示,用户凭肉眼是分辨不出来的。比如,访问一下 https://раураӏ.com/,你会发现它并不是真正的 PayPal,其中的 а 并不是普通的小写字母 a。关于域名中的李逵和李鬼,超出了本文范畴,不再详细讨论。

结语

学会了吗?(叹气+惋惜脸)


参考

  1. plantegg. https://x.com/plantegg/status/1773162126254952769. X. 2024-03-27.

  2. Ólafur Guðmundsson. Introducing DNS Resolver, 1.1.1.1 (not a joke). The Cloudflare Blog. 2018-04-01.