计算机网络协议系列 - 网络层 IP 协议篇:IP 地址详解

- 1 min

计算机网络协议系列(五)

上篇教程给大家介绍了 IP 地址的概念,已经常见的宽带上网是如何实现的,这一篇教程我们将深入探讨 IP 地址的格式、组成、分类、广播以及子网掩码等技术细节。

IP地址的格式

IP 地址目前分为 IPv4 和 IPv6 两种类型,目前主流的还是 IPv4 地址,后面的分享也主要基于 IPv4。

在计算机内部,IPv4 地址由 32 位二进制数字表示,为了方便人类识别,通常将其按照 8 位一组,分为 4 组,每组用 . 分隔,并将每组内的二进制数转化为十进制数,这样就有了我们常见的 IP 地址(IPv4)格式:

img

同时,这也是一个私有 IP 地址。

注:后面的分享中,我们默认约定 IP 地址就是代指 IPv4 地址。

IP 地址一般配置在网卡上,一般一块主机网卡会配置一个 IP 地址(也可以配置多个),而一台路由器通常会配置两块以上的网卡(因为路由器连接的是两个网段):

img

IP地址的组成

IP 地址由网络标识(网络地址)和主机标识(主机地址)两部分组成。

网络地址用于标识节点所属的数据链路,一般不同的局域网之间网络地址必须不同,而同一个局域网内的主机必须有相同的网络地址;主机地址则用于标识同一个局域网内的不同主机,它们的主机地址不能重复。这样综合起来,我们就可以通过设置网络地址和主机地址来确保在相互连接的网络中每个节点的 IP 地址都不会重复。

以上面图示的 IP 地址为例,192.168.31 是网络地址,218则是主机地址。起初,我们通过 IP 地址分类来区分网络地址和主机地址,现在通常通过子网掩码区分它们。下面我们就分别来介绍下 IP 地址分类和子网掩码。

IP地址的分类

按照网络层次和规划的子网大小,通常将 IP 地址分为以下4类:

img

要用比特位标识主机地址时,不可以全部为0或1,因为全部为0只有在表示对应的网络地址或IP地址不可获知的情况下才用,而全部为1的主机地址通常作为广播地址。因此,在分配的时候,要去掉这两种情况(这就是为什么上面都做了-2的处理)。

子网掩码

很显然,如果以上面 A、B、C 三类来划分子网的话,存在着 IP 地址的浪费,全世界 IP 地址的上限是 43 亿(232),如果按照 A 类来划分,全世界只能划分出 128 个子网(27),这显然不够;如果是办公室、学校这样的局域网来说,B 类地址的主机承载容量显得太大;如果是在家庭这种小型的局域网,即使是 C 类地址都有着极大的浪费。

因此,为了解决上述问题,我们通过一种叫做「子网掩码」的识别码将子网网络地址细分为比 A、B、C 类粒度更小的网络。这种方式会将原来的 A、B、C 类主机地址的一部分也作为网络地址,从而让 IP 地址的网络地址和主机地址不再受限于 IP 地址的分类,将原有网络划分为更多的子网。

引入子网以后,原始的 IP 地址就要通过两部分来识别,一种是 IP 地址本身,一种是标识网络地址部分的子网掩码:

img

子网掩码和 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位字节:

img

其中 inet6 后面就是 IPv6 的地址。

IPv6 地址可以容纳的设备数是个天文数字(2128),足以满足可预见的未来人类对 IP 地址的需求。但是从 IPv4 切换到 IPv6 是一件极其耗时的事情,需要将所有主机和路由器的 IP 地址进行重新设置。因此,现在主流的 IP 地址还都是 IPv6 地址。

广播地址和环回地址

广播地址用于在同一个局域网中相互连接的主机之间发送数据。IP 地址中的主机地址部分全部设置为1,就成为了广播地址。本地广播会被路由器屏蔽,不会到达外部网络。

环回地址是在同一台计算机内部的程序之间进行网络通信时所使用的默认地址,一般使用一个特殊的 IP 地址 127.0.0.1 作为环回地址,该地址还有一个与之具有相同意义的主机名 localhost,使用这个 IP 地址或主机名,数据包不会流向网络。

rss facebook twitter github gitlab youtube mail spotify lastfm instagram linkedin google google-plus pinterest medium vimeo stackoverflow reddit quora quora