IP 地址的格式
IP 地址目前分为 IPv4 和 IPv6 两种类型,目前主流的还是 IPv4 地址,后面的分享也主要基于 IPv4。
在计算机内部,IPv4 地址由 32 位二进制数字表示,为了方便人类识别,通常将其按照 8 位一组,分为 4 组,每组用 . 分隔,并将每组内的二进制数转化为十进制数,这样就有了我们常见的 IP 地址(IPv4)格式:
同时,这也是一个私有 IP 地址。
注:后面的分享中,我们默认约定 IP 地址就是代指 IPv4 地址。
IP 地址一般配置在网卡上,一般一块主机网卡会配置一个 IP 地址(也可以配置多个),而一台路由器通常会配置两块以上的网卡(因为路由器连接的是两个网段):
IP 地址的组成
IP 地址由网络标识(网络地址)和主机标识(主机地址)两部分组成。
网络地址用于标识节点所属的数据链路,一般不同的局域网之间网络地址必须不同,而同一个局域网内的主机必须有相同的网络地址;主机地址则用于标识同一个局域网内的不同主机,它们的主机地址不能重复。这样综合起来,我们就可以通过设置网络地址和主机地址来确保在相互连接的网络中每个节点的 IP 地址都不会重复。
以上面图示的 IP 地址为例,192.168.31 是网络地址,218 则是主机地址。起初,我们通过 IP 地址分类来区分网络地址和主机地址,现在通常通过子网掩码区分它们。下面我们就分别来介绍下 IP 地址分类和子网掩码。
IP 地址的分类
按照网络层次和规划的子网大小,通常将 IP 地址分为以下4类:
- A 类地址:首位以 0 开头,第 1-8 位是网络地址,后24位是主机地址,0.0.0.0~127.0.0.0 是 A 类的网络地址,可容纳 16777214(224-2) 个主机地址;
- B 类地址:前两位以 10 开头,第 1-16 位是网络地址,后 16 位是主机地址,128.0.0.0~191.255.0.0 是 B 类的网络地址,可容纳 65534(216-2) 个主机地址;
- C 类地址:前三位以 110 开头,第 1-24 位是网络地址,后 8 位是主机地址,192.168.0.0~223.255.255.0 是 C 类的网络地址,可容纳 254(28-2) 个主机地址;
- D 类地址:前四位以 1110 开头,第 1-32 位是网络地址,没有主机地址,224.0.0.0~239.255.255.255 是 D 类的网络地址,常用于多播;
要用比特位标识主机地址时,不可以全部为 0 或 1,因为全部为 0 只有在表示对应的网络地址或 IP 地址不可获知的情况下才用,而全部为 1 的主机地址通常作为广播地址。因此,在分配的时候,要去掉这两种情况(这就是为什么上面都做了-2的处理)。
子网掩码
很显然,如果以上面 A、B、C 三类来划分子网的话,存在着 IP 地址的浪费,全世界 IP 地址的上限是 43 亿(2的32次方),如果按照 A 类来划分,全世界只能划分出 128 个子网(2的7次方),这显然不够;如果是办公室、学校这样的局域网来说,B 类地址的主机承载容量显得太大;如果是在家庭这种小型的局域网,即使是 C 类地址都有着极大的浪费。
因此,为了解决上述问题,我们通过一种叫做「子网掩码」的识别码将子网网络地址细分为比 A、B、C 类粒度更小的网络。这种方式会将原来的 A、B、C 类主机地址的一部分也作为网络地址,从而让 IP 地址的网络地址和主机地址不再受限于 IP 地址的分类,将原有网络划分为更多的子网。
引入子网以后,原始的 IP 地址就要通过两部分来识别,一种是 IP 地址本身,一种是标识网络地址部分的子网掩码:
子网掩码和 IP 地址一样也是由 32 位二进制数表示,格式和 IP 地址类似,只不过其对应 IP 地址网络地址部分的位都是 1,主机地址部分的位都是 0,我们将 IP 地址与子网掩码做按位与运算,就可以计算出该 IP 地址的网络地址部分。
对于子网掩码,一般常见的有两种表示方式,一种是上面这种分两行的表示方式,还有一种是在 IP 地址后面追加网络地址位数,并通过 / 分隔开:
192.168.31.218/24
有了子网掩码,我们就可以按照需要将子网按照任何维度进行划分了。
在此基础上,为了解决全世界 IPv4 地址数量有限的问题,还诞生了 CIDR(无类型域间选路)和 VLSM(可变长子网掩码)技术,但是 IPv4 地址绝对数本身有限的事实无法改变,因此又有了 IPv6 地址。
公网 IP 和私有 IP诞生的初衷也是为了解决 IPv4 地址不够用的问题,不同局域网之间的私有 IP 可以重复。
IPv6 地址简介
IPv6 是为了从根本上解决 IPv4 地址耗尽的问题而被标准化的网际协议。
IPv4 的长度是 4 个 8 位字节,总共 32 位,IPv6 的长度是其 4 倍,即 128 位,一般写成 8 个 16 位字节:
其中 inet6 后面就是 IPv6 的地址。
IPv6 地址可以容纳的设备数是个天文数字(2的128次方),足以满足可预见的未来人类对 IP 地址的需求。但是从 IPv4 切换到 IPv6 是一件极其耗时的事情,需要将所有主机和路由器的 IP 地址进行重新设置。因此,现在主流的 IP 地址还都是 IPv4 地址。
广播地址和环回地址
广播地址用于在同一个局域网中相互连接的主机之间发送数据。IP 地址中的主机地址部分全部设置为 1,就成为了广播地址。本地广播会被路由器屏蔽,不会到达外部网络。
环回地址是在同一台计算机内部的程序之间进行网络通信时所使用的默认地址,一般使用一个特殊的 IP 地址 127.0.0.1 作为环回地址,该地址还有一个与之具有相同意义的主机名 localhost,使用这个 IP 地址或主机名,数据包不会流向网络。
评论区