子网掩码
一、前言
网络把主机连接起来,而互联网是把多种不同的网络连接起来,因此互联网是网络的网络。
理解互联网中有多个网络而非只有一个网络对于理解子网掩码有很大的帮助。
换句话说,互联网是由许多小型网络构成的,每个网络上都有许多主机,这样便构成了一个有层次的结构。IP地址在设计时就考虑到地址分配的层次特点,将每个IP地址都分割成网络号和主机号两部分,以便于IP地址的寻址操作。
刚才我们也说了,IP地址是以网络号和主机号来标示网络上的主机的。
我们把网络号相同的主机称之为本地网络,网络号不相同的主机称之为远程网络主机。
本地网络中的主机可以直接相互通信,远程网络中的主机要相互通信必须通过本地网关(Gateway)来传递转发数据。
二、子网掩码概念
子网掩码 (subnet mask) 又叫网络掩码、地址掩码、子网络遮罩,它是一种用来指明一个 IP 地址的哪些位标识的是主机所在的子网,以及哪些位标识的是主机的位掩码。子网掩码不能单独存在,它必须结合 IP 地址一起使用。
它的主要作用有两个,一是用于屏蔽IP地址的一部分以区别网络标识和主机标识,并说明该IP地址是在局域网上,还是在远程网上。二是用于将一个大的IP网络划分为若干小的子网络。
Windows操作系统下,win + R 键运行 cmd 打开命令行,之后输入 ipconfig 指令查看我们自己主机所在网络的子网掩码与网关。
三、子网掩码构成
同 IP 地址一样,子网掩码是由长度为 32 位二进制数组成的一个地址。子网掩码 32 位与IP 地址 32 位相对应,IP 地址如果某位是网络地址,则子网掩码为1,否则为0。
比如:11111111.11111111.11111111.00000000
网络号的长度为 24(前三个字节),主机号长度为 8 (最后一个字节)
四、子网掩码表示方法
1. 点分十进制表示法:
二进制转换十进制,每8位用点号隔开
比如,将二进制的子网掩码 11111111.11111111.11111111.00000000 转换为十进制,即为 255.255.255.0
2. CIDR斜线记法:
IP地址/n
例子1 :192.168.1.100/24,其子网掩码表示为255.255.255.0,二进制表示为11111111.11111111.11111111.00000000
例子2 :172.16.198.12/20,其子网掩码表示为255.255.240.0,二进制表示为11111111.11111111.11110000.00000000
运营商ISP常用这样的方法给客户分配IP地址。
n 为 1 到 32 的数字,表示子网掩码中网络号的长度,通过 n 的个数确定子网的主机数=2^(32-n)-2(减去 2 的原因:主机位全为0时表示本网络的网络地址,主机位全为1时表示本网络的广播地址,这是两个特殊地址,不能被用户使用)。
五、使用子网掩码的意义
虽然在前文我们已经提及了子网掩码的两个作用,但是我相信还会有很多人跟我一样在最开始接触这个概念的时候,对于子网掩码的作用处于一个很懵b的状态。现在我们再来讨论一下为啥要有子网掩码这么个东西。
根据前面的叙述,我们已经知道了,子网掩码可以分离出IP地址中的网络地址和主机地址,那为什么要分离呢?因为两台主机要通信,首先要判断是否处于同一网段,即网络地址是否相同。如果相同,那么可以把数据包直接发送到目标主机,否则就需要路由网关将数据包转发送到目的地。
这就是我一开始为什么要说,网络将主机联系起来,而互联网将不同的网络联系起来,互联网是一种网络的网络。两个主机之间的通信过程需要区分是否在同一个网络当中。
可以这么简单的理解:
A 主机要与 B 主机通信,A 和 B 各自的 IP 地址与 A 主机的子网掩码进行与运算,我们来观察得出的结果:
1、结果如果相同,则说明这两台主机是处于同一个网段,这样 A 可以通过 ARP 广播发现 B 的 MAC 地址,B 也可以发现 A 的 MAC 地址来实现正常通信。
2、如果结果不同,ARP 广播会在本地网关终结,这时候 A 会把发给 B 的数据包先发给本地网关,网关再根据 B 主机的 IP 地址来查询路由表,再将数据包继续传递转发,最终送达到目的地 B。
还没完全搞懂?没事,接着看下面这个图
假如有这么四台主机,根据我们之前讨论的,不难看出
主机 A 与主机 B 处在同一个网络中,该网络的网络地址为 192.168.1.0 ,网关地址为 192.168.1.1
而主机 C 与主机 D 处在同一个网络中,该网络的网络地址为 192.168.2.0 ,网关地址为 192.168.2.1
所以 A 与 B,C 与 D,都可以直接相互通信(都是属于各自同一网段,不用经过路由器),但是 A 与 C,A 与 D,B 与 C,B 与 D 它们之间不属于同一网段,所以它们通信是要经过本地网关,然后路由器根据对方IP地址,在路由表中查找恰好有匹配到对方IP地址的直连路由,于是从另一边网关接口转发出去实现互连。
六、子网掩码的分类
1.默认子网掩码
即未划分子网,对应的网络号的位都置 1 ,主机号都置 0 。
未做子网划分的IP地址:网络号+主机号
A类网络缺省子网掩码: 255.0.0.0,用CIDR表示为/8
B类网络缺省子网掩码: 255.255.0.0,用CIDR表示为/16
C类网络缺省子网掩码: 255.255.255.0,用CIDR表示为/24
2.自定义子网掩码
将一个网络划分子网后,把原本的主机号位置的一部分给了子网号,余下的才是给了子网的主机号。其形式如下:
做子网划分后的IP地址:网络号+子网号+子网主机号
如:192.168.1.100/25,其子网掩码表示:255.255.255.128
意思就是将192.168.1.0这个网段的主机位的最高1位划分为了子网。
六、子网掩码与 IP 地址的关系
上面我们也说到了,通过观察两个 IP 地址与子网掩码做与运算的结果是否相同,可以得出两个 IP地址是否在一个网络中的结论。所以子网掩码可以用来判断任意两台主机的IP地址是否属于同一网络,就是拿双方主机的IP地址和自己主机的子网掩码做与运算,如结果为同一网络,就可以直接通信。
网关
在上面介绍子网掩码时,曾多起提及网关,那么网关到底是什么呢?
网关实质上是一个网络通向其他网络的 IP 地址。
比如有网络 A 和网络 B,
网络 A 的 IP 地址范围为 192.168.1.1~192.168.1.254,子网掩码为 255.255.255.0
网络 B 的 IP 地址范围为 192.168.2.1~192.168.2.254,子网掩码为 255.255.255.0
在没有路由器的情况下,两个网络之间是不能进行 TCP/IP 通信的,即使是两个网络连接在同一台交换机(或集线器)上,TCP/IP 协议也会根据子网掩码 (255.255.255.0) 判定两个网络中的主机是否处在不同的网络里。而要实现这两个网络之间的通信,则必须通过网关。
如果网络 A 中的主机发现数据包的目的主机不在本地网络中,就把数据包转发给它自己的网关,再由网关转发给网络 B 的网关,网络 B 的网关再转发给网络 B 的某个主机。
所以说,只有设置好网关的 IP 地址,TCP/IP 协议才能实现不同网络之间的相互通信。那么这个 IP 地址是哪台机器的 IP 地址呢?网关的 IP 地址是具有路由功能的设备的 IP 地址,具有路由功能的设备最典型的就是路由器,路由器接口使用的IP地址就是网关的地址,它可以是本网段中任何一个地址,不过通常使用该网段的第一个可用的地址或最后一个可用的地址,这是为了尽可能避免和本网段中的主机地址冲突。