子网掩码(Subnet Mask)又叫网络掩码、地址掩码,它是一种用来指明一个IP地址的哪些位标识的是主机所在的子网以及哪些位标识的是主机的位掩码。子网掩码只有一个作用,就是将某个IP地址划分成网络地址和主机地址两部分 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gWl8Vgn7-1569938178763)(https://s1.ax1x.com/2018/11/18/FSCeds.png#shadow)]
利用子网掩码可以计算某IP地址所在网段 同一个网段的中的计算机子网掩码相同,计算机的网关就就是到其他网段的出口,也就是路由器接口地址。路由器接口使用的地址可以是本网段中任何一个地址,不过通常使用该网段的第一个可用的地址或最后一个可用的地址,这是为了尽可能避免和网络中的计算机地址冲突
今天看来,在ARPANET的早期,IP地址的设计确实不够合理,有以下三点原因:
每一个A类地址网络可连接的主机数超过1000万台、而每一个B类网络可连接的主机数也超过6万台。然而**有些网络对连接在网络上计算机数目有限制,根本达不到这样的数值。**例如以太网10BASE-T规定其最大节点数只有1024个。另外有些单位考虑今后发展,会尽量申请B类地址,而非一个足够用的C类地址。IP地址的浪费,还会使IP地址空间的资源过早地被用完
每一个路由器都应当能够从路由表查处应怎样到达其他网络的下一跳路由器。因此,互联网中的网络数越多,路由器的路由表项目数越多,这样,即便我们拥有足够多的IP地址资源可以给每一个物理网络分配一个网络号,也会导致路由器中路由表中的项目数过多。这样不仅增加了路由器的成本(要求更多存储空间),而且使查找路由表耗时更多,同时使路由器之间定期交换路由信息量急剧增加,使路由器和整个因特网性能下降
有时情况紧急,一个单位需要在新的地点马上开通一个新的网络。但是在申请到一个新的IP地址之前,新增加的网络是不可能连接到因特网工作的。**我们希望有一种方法,使一个单位能够随时灵活地增加本单位的网络,而不必事先到因特网的管理机构去申请新的网络号。**原来的两级IP地址无法做得到这一点
为解决上述问题,从1985年起在IP地址中又增加了一个“子网号字段”,使两级IP地址变成为三级IP地址,它能够较好的解决上述问题,并且使用起来很灵活,这种做法叫作划分子网(subnetting),或子网寻址或子网路由选择。划分子网已成为因特网正式标准协议
下图表示某单位拥有一个B类IP地址,网络地址是145.13.0.0(网络号是145.13)。凡目的地址为145.13.x.x的数据报都被送到这个网络上的路由器R1 现在把上图的网络划分为三个子网(下图)。这里假定子网号占用8位,因此在增加了子网号后,主机号只有8位。所划分的三个子网分别是:145.13.3.0、145.13.7.0和145.13.21.0。在划分完子网后,整个网络对外部仍然表现为一个网络,其网络地址仍为145.13.0.0。网络145.13.0.0上的路由器R1在收到外来的数据报后,再根据数据报的目的地址把它转发到相应的子网 概括讲,当没有划分子网时,IP地址是两级结构,划分子网后IP地址变成了三级结构。划分子网只是把IP地址的主机号这部分进行再划分,而不改变IP地址原来的网络号
现在剩下的一个问题就是:假定有一个数据报(其目的地址是145.13.3.10)已经达到了路由器R1。那么这个路由器如何把它转发到子网145.13.3.0呢?我们知道,32位的IP地址本身及数据报首部都没有包含任何关于子网划分的信息,因此从IP数据报的首部是无法看出源主机或目的主机所连接的网络是否进行了子网的划分。必须,另想办法,这就是使用子网掩码(subnet mask) 图中第一行,IP地址为145.13.3.10的主机本来是两级IP地址结构,第二行是同一地址的三级IP地址结构,也就是说现在从原来的16位主机号中拿出8位作为子网号,而主机号由16位减小到8位。现在子网号为3的网络地址为145.13.3.0,不同于原来两级IP地址的网络地址145.13.0.0
表示R1把三级IP地址的子网掩码和收到的数据报的目的IP地址145.13.3.10逐位相与,得出了所要找的子网的网络地址145.13.3.0
**使用子网掩码的好处就是:**不管网络有没有划分子网,只要把子网掩码和IP地址进行逐位于运算,就立即得出网络地址来,这样在路由器处理到来的分组时就可以采用同样的算法
从网络145.13.0.0外面看,这就是一个普通的B类网络,其子网掩码为16个1后面跟上16个0。但进入这个网络内部后(即到了路由器R1),就看到了还有许多网络(即划分了子网后的许多网络),其网络地址是145.13.x.0(这里x表示不同的数值),而这些网络的子网掩码都是24个1和8个0。总之,这个B类网络的外部和里面,看到的网络是不一样的。其实就好像路标,到具体十字路口,再具体标明该去哪个乡镇。这里只有到R1,存储三级子网掩码才有意义
在不划分网络时,既然没有子网,为什么还有使用子网掩码?这就是为了便于查找路由表。现在因特网标准规定:所有的网络都必须使用子网掩码,同时在路由器的路由表中也必须有子网掩码这一栏。如果一个网络不划分子网,那么该网络的子网掩码就使用默认子网掩码。默认子网掩码中1的位置和IP地址中的网络号字段net-id正好相对应。因此,若使用默认子网掩码和某个不划分子网的IP地址逐位相“与”(AND),就应当能够得出该IP地址的网络地址来
由于是由主机号中拿出一部分,构成子网号,故若使用较少位数的子网号,则每一台子网上可连接的主机数就多。若使用位数较多的子网号,则子网数目较多,但是每个子网上可连接的主机数就少。因此,我们可以根据网络的具体情况,选择合适的子网掩码。
我们以一个B类网络为例,说明有多少种子网划分的方法。在采用固定长度子网时,所划分的所有子网的子网掩码都是相同的 在上图中,子网数是根据子网号subnet-id计算出来的,若subnet-id有n位,则共有 2 n 2^n 2n种可能的排列,除去全零和全1这两种情况,就得出表中的子网数。另外计算每个子网中主机数为 2 16 − n − 2 2^{16-n}- 2 216−n−2
IP地址中主机位归0就是该主机所在的网段。
判断192.168.0.101/26所属的子网。 判断192.168.0.101/27所属的子网
当划分子网后,路由表必须包含以下三项内容:目的网络地址、子网掩码和下一跳地址。在划分分组情况下,路由器转发分组的算法如下:
从收到的分组的首部提取目的 IP 地址 D先用各网络的子网掩码和 D 逐位相“与”,看是否和相应的网络地址匹配。若匹配,则将分组直接交付。否则就是间接交付,执行3若路由表中有目的地址为D的特定主机路由,则将 分组传送给指明的下一跳路由器;否则,执行4对路由表中的每一行的子网掩码和 D 逐位相“与”,若其结果与该行的目的网络地址匹配,则将分组传送 给该行指明的下一跳路由器;否则,执行5若路由表中有一个默认路由,则将分组传送给路由表中所指明的默认路由器;否则,执行6报告转发分组出错某企业有一个网段,该网段有200台计算机,使用192.168.0.0/24网段,后来计算机数量增加到400台 有没有更好的办法,让这两个C类网段的计算机认为在一个网段?这就需要将192.168.0.0/24和192.168.1.0/24 两个C类网络合并
实际上任何两个子网都能合并,只要使其与设置好的子网掩码相“与”得到的结果相同即可,这里所说的“能否合并”,更准确的定义应该是能否在只包含这些子网的情况下合并,举个例子,192.168.0.0和192.168.1.0就能刚好合并,设置子网掩码为255.255.254.0,但是192.168.1.0和192.168.3.0能否合并呢?
首先写出1和3的八位二进制表示
1 -> 00000001 3 -> 00000011如果要这两个子网合并,需要设置子网掩码为11111111 11111111 11111100 00000000,但是这样一来,192.168.1.0和192.168.1.2也和他俩同一网段了,所以192.168.1.0和192.168.3.0不能合并
**结论:**判断连续的2个网段是否能够合并,只要第一个网络号能被2整除,就能够通过左移1位子网掩码合并
子网掩码左移1位能够将能够合并两个网段,左移2位,能够合并四个网段,左移3位,能够合并8个网段
通过左移子网掩码合并多个网段,右移子网掩码将一个网段划分成多个子网,使得IP地址打破了传统的A类、B类、C类的界限
判断一个网段到底是子网还是超网,就要看该网段是A类网络、还是B类网络、还是C类网络,默认A类子网掩码/8,B类子网掩码是/16,C类子网掩码是/24
如果该网段的子网掩码比默认子网掩码长,就是子网,如果该网段的子网掩码比默认子网掩码短,则是超网
IP地址的第一部分是12,这是一个A类网络,A类地址默认子网掩码是/8,该网络的子网掩码是/16,比默认子网掩码长,所以说这是A类网的一个子网
222.3.0.0/16这是C类网络还是B类网络呢?是超网还是子网呢?IP地址的第一部分是222,这是一个C类网络,C类地址默认子网掩码是/24,该网络子网掩码是/16,比默认子网掩码短,所以这是C类网的一个超网