IP 地址的 N 种写法

下文所述,如无特别说明,均为 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 地址的罕见形式除了好玩之外,并非毫无用处。更多有趣又有用的小知识,敬请关注我们的「冷知识」频道。

我们是电子科技大学百度校园菁英俱乐部。

如果你有兴趣与我们一起学习、分享知识,或与我们一起出去见见外面的世界,欢迎加入我们!

请实时关注我们的动态,同时也可以在公众号内留言。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181030G17KHU00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券