preface
计算机网络中最基础的协议之一就是 TCP/IP 协议,今天复习一下关于 IP 地址的一些东西。大型网络都是基于 TCP/IP 的思路来设计的,就是由一些小的子网,通过路由器连接起来组成一个大的网络。这里的子网可以理解 为用集线器连接起来的几台计算机,我们将它看作一个单位,称为子网。 将子网通过路由器连接起来,就形成了一个网络。
在网络中,所有的设备都会被分配一个地址。这个地址就相当于现实 中某条路上的 “×× 号 ×× 室” 。 其中 “号” 对应的号码是分配给整个子网的,而 “室” 对应的号码是分配给子网中的计算机的,这就是网络中的地址。“号” 对应的号码称为网络号,“室” 对应的号码称为主机号,这个地址的整体称为 IP 地址,也就是说,IP 地址是由网络号和主机号共同组成的。
子网掩码
在 IP 地址的规则 中,网络号和主机号连起来总共是 32bit,但这两部分的具体结构是不固定的。在组建网络时,用户可以自行决定它们之间的分配关系,也就是说仅凭这 32bit 我们无法区分哪部分是网络号,哪部分是主机号。因此,我们还需要另外的附加信息来表示 IP 地址的内部结构,这个附加信息就是子网掩码
子网掩码不能单独存在,它必须结合IP地址一起使用。子网掩码的格式是一 串与 IP 地址长度相同的 32bit 数字,其左边都是 1,右边都是 0,通过子网掩码,就可以判断两个 IP 在不在一个局域网内部。
e.g. 11111111.11111111.11111111.00000000 # 255.255.255.0
其中,子网掩码为 1 的部分表示网络号,子网掩码为 0 的部分表示主机号。将子网掩码按照和 IP 地址一样的方式以每 8bit 为单位用圆点分组后 写在 IP 地址的右侧,这是一种表示方法,但这种写法太长,我们也可以把 1 的部分的 bit 数用十进制表示并写在 IP 地址的右侧,代表子网掩码有多少个 bit 为 1,用 32 减去这个数字就是主机号的 bit 数,就能知道这个子网有多少台主机
顺带一提,主机号部分的 bit 全部为 0 或者全部为 1 时代表两种特殊的含义。主机号部分全都为 0 代表整个子网而不是子网中的某台设备,称作网络地址。 此外,主机号部分全都为 1 代表向子网上所有设备发送包,即广播地址。
应用
- 将 IP 地址和子网掩码换算为二进制,子网掩码连续全 1 的是网络地址,后面的是主机地址
- IP 地址和子网掩码进行逻辑与运算,结果是网络地址(即主机号全 0 是网络地址)
- 将运算结果中的网络地址不变,主机地址的 0 变为 1,结果就是广播地址
- 地址范围就是含在本网段内的所有主机,数量为 (2^主机号bit数 -2) ,因为不包括网络地址和广播地址
一个主机的 IP 地址是 202.112.14.137,掩码是 255.255.255.224,计算这个主机所在网络的网络地址和广播地址
将子网掩码转换成二进制为 11111111 11111111 11111111 11100000,所以主机号为 5,网络号为 27
网络地址:202.112.14.128
11001010 01110000 00001110 10001001 # 202.112.14.137
11111111 11111111 11111111 11100000 # 255.255.255.224
逻辑与运算
11001010 01110000 00001110 10000000 # 202.112.14.128
广播地址:202.112.14.159,也就是将主机地址全变成1,最后 8bit 就是 10011111,为 159
主机数:30,因为这个子网只有 5 位主机地址,所以最多主机数为 (2^5 - 2 = 30),其中主机地址全为 1 是广播地址,全为 0 是网络地址
reference
《计算机是怎样连接的》 – 户根勤
https://blog.csdn.net/gatieme/article/details/50989257