下文所述,如无特别说明,均为 IPv4。
我们所熟悉的 IP 地址
IP 地址,即分配给所有使用 IP 协议的设备的网络地址。无论是要访问某个网站,还是连接到某一台服务器,你都需要 IP 地址;即使你使用的是域名,电脑也会将其转化为 IP 地址之后再进行连接。
问到 IP 地址是怎么写的,即使你没学过计算机网络,答案大概也能信手拈来:十进制点分式,形如。但你可知道,IPv4 地址的表示方法能有至少六种之多?
究 IP 地址的本质,其实只是一串32位长的二进制串。而便于人类记忆与使用,形如的点分十进制是 IP 地址最为常见的表达形式。从二进制到这一常见格式的转化方式十分简单:32 位二进制串,按每 8 位(一个字节)分成四组,每组转化为十进制,再用点分开。也正因如此,这一表现形式中,每一段的范围都是 0~255(2 的 8 次方减一)。
而实际上,IP 地址是可以不分段的,也可以表达为任何一种数字形式。这些方式并不常见,但电脑的确支持,如果忘记,有时会导致一些意想不到的后果。
IP 地址的隐藏形式
其实只要记住 IP 地址的几条表示规则,就能组合出所有的情况:
可以按字节分段,也可以不分段。
数字可以使用八、十、十六进制。
分段时,每段进制可以不同。
分段时,中间靠后的段可以省略。
下面将介绍点分十进制以外的各种形式。
点分十六进制
点分十六进制,就是将点分十进制中每一段的数字变为十六进制。
例如:,转换过来就是,其中分别对应每段的十六进制数。其中每段都有标准的十六进制前缀。
点分八进制
点分八进制,就是将点分十进制中每一段的数字变为八进制。
例如:,转换过来就是,其中分别对应每段的八进制数。其中每段都有标准的八进制前缀。
十进制
当不使用点分的时候,就是直接将 IP 地址整个 32 位的二进制串转换为十进制数。
例如:,转换过来就是,就是将原地址中每一段转换为二进制数、拼在一起,然后一起转换为十进制数字而成。
十六进制
十六进制就是直接将 IP 地址整个 32 位的二进制串转换为十六进制数。
例如:,转换过来就是,转化方法如十进制,前面有标准的十六进制前缀。
八进制
八进制就是直接将 IP 地址整个 32 位的二进制串转换为八进制数。
例如:,转换过来就是,转化方法如十进制,前面有标准的八进制前缀。
点分自由组合
在使用点分格式时,各段的进制是可以自由组合的。例如可以表示为,也是完全合法的。
点分省略
在使用点分格式是,处于中间的 0 段是可以省略的。填充的顺序是一四二三,例如表示的是,而就是了。
当然,省略的同时也能自由组合进制,因而也可以变形为了。
纵览
所以一个 IP 能有哪些形式呢?以下表格展现了 Cloudflare 的 DNS 服务器官网的地址的各种形式,任何地址都能直接复制到浏览器中打开。
屠龙之术?
IP 地址的 n 种写法,是否只是屠龙之术?我们或许一辈子也用不到这些奇奇怪怪的表达方式,知道又有什么用呢?但对于程序员而言,知道这些知识确实有用,有时会关乎你所写程序的安全。
试想这样的一种情况:你做了一个可以代理网站的软件,可以代理你所输入的网址。但你不想别人通过这个软件访问到你内网中的地址(比如你的路由器)。你会怎样写屏蔽规则呢?假如你不知道 IP 地址的诸多形式,只是纯粹地写了屏蔽形如到的地址,那么很不幸,别人只需要输入就能访问到你的路由器了。
当你了解了 IP 地址的这些形式,便能够想到简单屏蔽规则的无数漏洞:是,也是。知道各种形式千变万化之后,你就可能会自闭换用更高级的屏蔽方式了。如果因为不知道而导致安全隐患,程序员实在是难辞其咎。
正因如此,了解 IP 地址的罕见形式除了好玩之外,并非毫无用处。更多有趣又有用的小知识,敬请关注我们的「冷知识」频道。
我们是电子科技大学百度校园菁英俱乐部。
如果你有兴趣与我们一起学习、分享知识,或与我们一起出去见见外面的世界,欢迎加入我们!
请实时关注我们的动态,同时也可以在公众号内留言。
领取专属 10元无门槛券
私享最新 技术干货