计算机网络第四章(3)——网络层《IPV4(子网划分、子网掩码)》
考试重中之重,会有70多道例题!!
一、子网划分
1)为什么要有子网划分
分析:
- 原因1:一个公司分到一个网络号之后,公司内部可能还要划分【各个部分】,【各个部门】应该拥有【自己部门的一个范围的ip地址】划分;
- 原因2:另外,即使使用C类ip地址(网络号占3字节,主机号最少),有的小公司依旧没有那么多的主机需要占用那么多ip的主机号,那样就会浪费这个网络号地址的主机分配
- 比如:A公司只有3台电脑,结果使用C类ip、占有了【192.168.1.0】这个ip网段,那么就3个设备却浪费【(2^8-2) - 3 = 251】个空余的ip地址
那么就诞生了子网划分,它的原理是在原有的【网络位】+【主机位】划分基础上,往【主机位】再【借n位】,从而能划分更多子网(划分的n位里每一位都可以是1、也可以是0)
总结:
2)子网划分的好处!!
主要注意的是,子网划分相当于原本把一个【路由器】连接的一个【广播域】:
- 拆分成N个小的【广播域】!!!!!
- (相当于局域网里划分 “虚拟局域网”一样,即使各个子网还是用集线器或交换机连接,但是逻辑上子网已经变成了一个【广播域】)
- 还未子网划分的网络叫【二级编址】,【一级网址】是网络号,【二级网址】是主机号
- 划分了子网的网络叫【三级编址】,【一级网址】是网络号,【二级网址】是子网号,【三级网址】是主机号
- 而【子网】仅仅在本网络内有效,对于外部网络的视角,依旧是【二级编址】
3)例题
二、子网掩码
1)子网掩码作用
一个发送方如果发信息,要先判断【目的IP地址】
- 如果发现是发给【别的网络】的主机,就需要把信息交给【默认网关】的路由器,再由路由器转发出去别的网络
- 而如果是发给【和自己同属一个网络】的主机,则不需要经过【默认网关】,直接精准送达给同网络的接收方
【在没进行子网划分的时候】
那么发送方在检查【接收方的目的地址】和自己是否同属于一个网络时,
只需要看【网络号】是不是一样
【进行子网划分的时候】
而进行了【子网划分】后,即使网络号相同也不一定是在一个网络内了
所以,发送方在检查【接收方的目的地址】和自己是否同属于一个网络时,
要连同【子网号】一起检查
;
;
- 但是要怎么从主机号范围提取出【子网号】?
- 一个公司获得【网络号】后只有【网络号】固定不变,【主机号】可以随意变,你怎么保证在【主机位】随机变化下【子网号】保持不变???
那么此时【子网掩码】就发挥作用了
那么你可以理解【子网掩码】是一把锁,他会锁住这一网段的【网络号 + 子网号】,允许剩下的主机号随意变化来分配ip地址
发送方使用它的规则是:
- 将自己的【源地址】跟【子网掩码】用二进制形式进行【逐位相 “与&”】,提取出【网络号 + 子网号】(后面统称为【网络前缀】)
- 再将接收方的【目的地址】跟【子网掩码】用二进制形式进行【逐位相 “与&”】,提取出【网络号 + 子网号】(后面统称为【网络前缀】)
- 然后进行判断【网络前缀】是否一致,一致则说明是一个子网内,不一致则要转发给【默认网关】
2)子网掩码怎么表示?
- 刚刚的例子我们知道了用【子网掩码】可以检测提取出【网络前缀】是不是同属一个子网,但是这个子网掩码究竟怎么得来的?
子网掩码也是一个4个字节(32bit)的二进制码,转化成十进制的话,每个字节跟ip地址同样都是0~255范围。
然后重点,他的表示形式就是:
- 【网络前缀(网络号 + 子网号)】固定死,所以子网掩码的【对应二进制位都是1】;
- 反之,可以变化、分配的【主机号部分】,子网掩码的【对应二进制位是0】
那么通过前面的解释可以发现,之所以子网掩码里【可变部分0】,是因为可变部分的ip地址不管是1还是0,和子网掩码【相与计算】后都是0,可以直接丢掉不管;而【不可变部分1】,就可以完整还原出【网络前缀(网络号 + 子网号)】
3)带子网划分的【IP地址完整形式】
我们前面已经知道了:【网络前缀】的二进制都是【1】,剩下的主机位都是【0】
- 那么专业的【IP地址完整形式】是:在最后加上【/ 子网掩码1的个数】
;
例子1:
- 假设一个C类ip地址是:192.168.1.1,子网掩码是:255.255.255.0
- 那么转换成二进制就是
- 网络地址是:11000000.10101000.00000001.00000001
- 子网掩码是:11111111.11111111.11111111.00000000
- 可以看到子网掩码有【24个1】,也就称为是一个24位掩码
- 然后现在把网络地址和24位掩码组合就是【IP地址完整形式】
那么也就是32位里有32 - 24 = 8位可以任意变,于是根据二进制算法可以得出共2^8=256 种可能
然后因为【主机号全是0的是网络地址】、【主机号全是1的是广播地址】不能用,所以可用的ip地址是 256 - 0 - 2 = 254 个
;
;
例子2:
- 还是C类的ip网络地址:192.168.1.1,子网掩码换成:255.255.254.0
- 那么转换成二进制就是
- 网络地址是:11000000.10101000.00000001.00000001
- 子网掩码是:11111111.11111111.11111110.00000000
- 所以子网掩码是23位掩码
- 【IP地址完整形式】就是:192.168.1.1 / 23
那么可变位是9位,一共就是 2^9 = 512 种可能,然后因为【0.0 (主机号全是0的是网络地址)】、【1.255 (主机号是255的是广播地址)】不能用,那么最终可用的ip是 512-2 = 510
4)注意【路由转发表】区别
【不支持子网划分的路由转发表】
就只有各个节点【ip地址】+【转发接口】
【支持子网划分的路由转发表】
有各个节点【ip地址】+【子网掩码】+【转发接口】
;
;
那么可以发现,这几个例子里,【支持子网划分】的网络里,【路由转发表】要怎么记录接了【不支持子网划分的】网络的接口信息呢?
- 只需要根据它是A、B、C哪一类网络,然后配上默认的子网掩码,这个默认子网掩码说白了就是固定【网络号位置全1、主机号位置全0】
;
;
这是【ABC三类标准IP地址】(不支持子网划分),对应的【默认子网掩码】的样子
【其他网络(不存在路由表的)ip地址】
那么还是这个图片例子,现在要发一个信息给这个地址【111.2.3.4】,压根不知道这地址是哪来的地址,可能是发给美国、南极、月球、天王星.......反正没一个路由表记录了这个接收方【目的地址】
那么我们前面提过。【ipv4的特殊地址】里,【网络号全0、主机号全0】是【本网络】,表示还没有记录这个节点的ip地址的时候默认的一个地址(任何地址一开始都可以是0.0.0.0)
那只需要对于【未知ip地址】,设置【默认网关是:0.0.0.0】,那么【相与计算】后的结果必然是【0.0.0.0】,这个地址就对应了【默认位置IP地址:0.0.0.0】
于是会从【对外接口】传出去,由别的路由器继续按这个步骤一直往外传,直到传到有记录了这个【111.2.3.4】未知地址的路由表的网络为止......
三、实际路由器的IP数据报转发过程
1、先看概括总结
2、结合交换机数据链路层MAC寻址回忆
1)网络层路由器IP寻址(开始状态)
(本人根据自己的总结叫豆包整理的)
2)数据链路层MAC寻址(开始状态)
那么数据链路层【数据帧】还会携带
- 【源地址】+【目的地址】的【IP地址】
- 发送方的【MAC地址】
- 但是接收方【MAC地址】未知,但可以设置成默认的广播信号【全1地址(48位)】
然后由交换机进入【学习模式】:
- 先把发送方的【mac地址】记录到【交换机存储转发表】
然后交换机通过【网络层的ARP协议】进入【泛洪模式】:
- 根据接收方的未知默认【广播信号】,向所有接口发出这个帧 (除了进来的接口)
3)接收方【网络层检查】+【数据链路层返回】
各个接口网络网络层会提取IP数据报的【目的地址IP地址】
- 来根据【子网掩码】判断是不是给自己当前子网的信息
- 如果这个IP地址是当前子网的,那么【ARP协议】根据数据链路层的【泛洪模式】发给各个主机
- 然后各个主机在广播完信息之后,检查【目的ip地址】是不是给自己的,是自己的就接收,不是给自己的就丢弃
- 当接收方发现该信息是给自己的之后,会接收、并马上响应ARP应答数据回去,而此时【接收方】就已经转变成了【发送方】
- 然后此时交换机将【发送方(刚才的接收方)MAC地址】记录入【存储转发表】
- 然后交换机的进入【转发模式】,开始根据【存储转发表】里记录的各个主机的MAC地址正式开始【点对点精准转发】
- 如果这个IP地址不是当前子网的,那么网络层的路由器再根据对应【网络前缀】的【网络号】的接口传出去,不用到达自己网络的数据链路层
- 如果压根【路由转发表】就没有这个接口信息,那也用【默认路由:0.0.0.0】发出去
4)总结
注意,ARP协议主体是路由器,他只是用于在数据链路层通过IP地址来寻找MAC地址
四、例题
这题跟上面一样,他没有给出一开始申请时的子网掩码的长度是多少,那么我就先按照ABC三类对比,很明显是C类又往后借了1位
题目明确给出了一开始申请ip地址块的时候就是22位的子网掩码,而且看ip地址是在128.0.0.0~191.0.0.0,所以这应该是在B类ip网络上的一个变形网段,我们只需要注意一点:如果后期要划分子网的话,我们只能在这个22位的基础上继续往后借位,而不是往前,这个子网掩码就是最初定好给这个公司的了
2)具体划分案例
先看下面这个例子
那么现在捋一下要求,我们可以知道:
- 1、我们现在至少要划分出3个子网用于给3个部门
- 2、其中一个部门最多的主机是50台,那么我们划分的每一个子网分配ip的数量至少不能少于50个
那么根据二进制算法(其实也是排列组合的知识点):
;
假如我们向主机位借N位作为子网号,那么至少可能有2^N种子网可能(包括了主机号全0、主机号全1的两个非用地址)
;
假如我们的主机位是M位,那么借了N位作为子网号,那就还剩M-N位是主机号,可分配的ip也就是2^(M-N) - 2个(不包括了主机号全0、主机号全1的两个非用地址)
;
所以,而划分的子网数量应该是:2^N >= 3,也就是N=2,就能得到00、01、10、11,4个子网完全够3各部门使用了
每个子网可划分的ip主机地址应该:2^(8-N) - 2 >= 50,也能得出N=2,主机号是6位,每个子网都有62个ip地址可分配,也够每个部门所有设备都分配得到了
3)确定新的子网掩码
再确定了划分几位为子网号之后,这借的的子网位也将重新归入到子网掩码里,还是刚刚的案例,一个C类的ip的子网掩码本来是24位(前3个字节),但是现在确定借了2位为子网位,所以现在新的子网掩码是:24 + 2 = 16位,对应的二进制和十进制如下图:
4)确定网络地址、广播地址
前面我们说过,网络地址就是主机号全0,广播地址就是主机号全1,那么那只是简单的概念,现在我们加入子网划分之后再来看
我们应该对应划分的几个子网,然后每一个子网的子网位不动,剩下的主机号全是0才是网络地址
最终这个公司ip地址分配就是这样