15_子网掩码
网络协议那些事儿
内容简介 前言 子网掩码 与子网掩码相关的问题 总结 1. 前言 上一课,我们说到 OSI 第 3 层的作用是 “互连网络”。
内容简介
- 前言
上一课,我们说到 OSI 第 3 层的作用是 “互连网络”。
我们也开始了 IP 的学习,IP 是 Internet Protocol 的缩写,表示 “互联网协议”,这个协议是本专栏的主要的协议簇。
OSI 第 3 层的重要地址是 IP 地址。IP 地址实际上包含两个部分,一部分是网络地址,另一部分是机器地址。
-
网络地址:英语是 Network Address,network 是网络的意思,address 是地址的意思。这个网络就是机器所在的网络。
-
机器地址:英语是 Host Address,host 是主机的意思,因此机器地址也被称为主机地址。在计算机领域,一般把与互联网相连的任何一台机器都称为主机(host)。因此我们接下去会用主机地址这个术语来替代机器地址。
我们在互联网上定位一个主机,就类似去一个小区找人:首先通过网络地址找到这个人是哪个小区的;然后,再用主机地址从这个小区中找到这个人。
我们上一课最后提出了一个问题:“我们怎么知道 IP 地址的哪个部分代表什么呢?”
这一课我们就来回答这个问题吧。
- 子网掩码
实际上,除了 IP 地址,我们还需要一个额外的信息,这个额外的信息就是:子网掩码。
子网掩码的英语是 subnet mask。subnet 是 “子网” 的意思,mask 是 “面具,掩盖,遮盖,遮罩” 的意思。你会在下面的学习中体会到子网掩码这个术语中 mask(“遮盖,掩盖”)的含义,因为它就类似面具一样,可以 “掩盖” 一部分信息,“显露”一部分信息,从而划分不同的信息部分。
IP 地址和子网掩码这两个信息是密不可分的,因为正是子网掩码指明了 IP 地址的哪一部分是网络地址,哪一部分是主机地址。
还记得我们上一章的实践课,曾用 ifconfig 命令(在 Unix、Linux、macOS 中)或 ipconfig(在 Windows 中)命令来查看过网络接口的信息吗?
那时候我们只关注了网络接口的信息中的 MAC 地址,其实 ifconfig 或 ipconfig 的输出里,也可能会包含 IP 地址和子网掩码。例如我在 Linux 里面运行 ifconfig:

上图中,enp0s3 是有线连接的网络接口,也就是以太网卡的接口。我用红框圈出的区域,inet 代表 IP 地址(此处我圈出的是 IPv4 格式的 IP 地址。在它下面可以看到 IPv6 格式的 IP 地址(此处是 fe80::eae1::1a5c::4c80::e9e0),对于 IPv6 的 IP 地址来说,是没有子网掩码的,因为不需要。可以参看子网掩码的 百度百科),此处是 10.0.2.15。netmask 表示子网掩码,此处是 255.255.255.0。
可以看到,因为子网掩码只是用于和 IPv4 格式的 IP 地址配合,IPv6 格式的地址不需要子网掩码,所以子网掩码和 IPv4 的 IP 地址的格式是一样的,也是 4 个 字节(32 位,因为一个字节(Byte)是 8 位二进制,也就是 8 个 bit(比特)),用点分十进制来表示(当然,用点分二进制来表示也是可以的,就和 IPv4 格式的 IP 地址一样)。
定义:子网掩码中为 1 的二进制位代表 IP 地址的网络部分(网络地址)。
二进制只由 0 和 1 这两种数字组成,因此我们可以推论出另一个定义:子网掩码中为 0 的二进制位代表 IP 地址的主机部分(主机地址)。
我们举个例子:把 IP 地址 192.168.0.1 与子网掩码 255.255.0.0 相关联。
我们以二进制形式写出这两个地址(关于二进制和十进制的转换,可以用类似这样的在线网站:进制转换 ),以便你可以更清楚地看到 0 和 1 的排列:
255.255.0.0 -> 11111111.11111111.00000000.00000000
192.168.0.1 -> 11000000.10101000.00000000.00000001
子网掩码告诉我们,为 1 的二进制位代表 IP 地址的网络地址(下图中绿色标明的部分):

子网掩码还告诉我们,为 0 的二进制位代表 IP 地址的主机地址(下图中红色标明的部分):

因此,这个 IP 地址的网络地址为 192.168(对应的二进制表示是 11000000.10101000),而主机地址为 0.1(对应的二进制表示是 00000000.00000001)。
好极了,我们掌握了子网掩码!
当然,目前只是差不多掌握了…
我们刚才所做的练习非常容易,因为 IP 地址的两部分(网络地址和主机地址)之间的分割正好位于两个字节(第 2 和第 3 字节)之间。
然而,分割经常会发生在一个字节的中间,在这种情况下,问题就变得复杂起来了。
例如,如果我们使用 255.255.240.0 作为子网掩码,而 IP 地址还是上一个例子中的 192.168.0.1,此时这个 IP 地址的网络地址和主机地址又分别是多少呢?
- 与子网掩码相关的问题
事实证明,与子网掩码相关的计算非常麻烦… 这很困难,因为计算机是以二进制来做运算的,而可怜的我们(人类)则是以十进制来做日常运算的。从十进制转换为二进制并不总是那么容易。让我们举个例子。
计算 IP 地址的网络地址和主机地址
我们继续上面的例子, IP 地址 192.168.0.1 和子网掩码 255.255.240.0 相关联。
这次,IP 地址的两部分(网络地址和主机地址)之间的分割不是在两个单独的字节之间,而是在一个字节(第 3 个字节)的中间。
首先,让我们将这两串数字转换为二进制:
255.255.240.0 -> 11111111.11111111.11110000.00000000
192.168.0.1 -> 11000000.10101000.00000000.00000001
这次,子网掩码所表示的网络地址和主机地址的分割是这样的(下图中绿色表示网络部分,红色表示主机部分):

按照上面的子网掩码,我们可以推断出 IP 地址中的网络地址和主机地址(下图中绿色表示网络地址,红色表示主机地址):

这次,因为分割位于一个字节的中间,我们不能转回十进制表示了。我们不能只写半个字节或一部分字节,只能用二进制来表示了。
所以,这个 IP 地址的网络地址为 11000000.10101000.0000,主机地址为 0000.00000001。
只要分割发生在一个字节的中间,就不能用二进制以外的方式表示 IP 地址的网络地址和主机地址了。
今天的课就到这里了。
下一课,我们继续学习子网掩码的知识,我们将看到子网掩码中字节可以取的值是特定的,这是由于子网掩码中 0 和 1 的排列造成的。
当然了,下一课还有其他的知识点等待着我们。
一起加油吧~
- 总结
-
IP 地址和子网掩码是密不可分的,正是子网掩码指明了 IP 地址的哪一部分是网络地址,哪一部分是主机地址。
-
子网掩码中为 1 的二进制位代表 IP 地址的网络部分(网络地址),
为 0 的二进制位代表 IP 地址的主机部分(主机地址)。
}如果您想了解更多技术资源,欢迎加入点击这里钉钉群交流IT技术资源查看“IT技术交流群一”群的钉钉群号: 129605002953