前段时间在写python游戏有段时间没有更了,这就来报道~~
在刚学习计算机网络的朋友,应该对ip地址和子网掩码会有困惑,感觉这两个东西就两个字——恶心
这就为大家理解一下
ip地址我相信大家其实都大概有一个概念,就是这个子网掩码不了解到底是什么东西,它和ip地址之间又有什么特殊的关系,下面就来扒一扒它们之间的关系
先来一个问题
为什么要子网
很简单,因为IP地址的设计却是不够合理:
找了一些资料,但还是书上说得好,所以就把课本知识搬过来了
1、IP地址空间的利用率有时候很低
比如,每一个A类地址网络可连接的主机超过1000万,而每一个B类地址的网络可连接的主机数也超过了6万,比如说你现在你的单位申请了一个A类的网络,但是你不可能你单位的主机数超过1000万吧…
2、每一个物理网络分配一个网络号会使得路由表变得太大而使网络性能变坏
3、两级IP不够灵活
具体不灵活在比如一个单位需要在新的地点马上开通一个新的网络,但是由于刚申请到的网络是不可能连接到互联网上工作的,所以就很不灵活,不太方便
针对大致以上三点就足以需要一个新的东西来拯救一下了,在1985年起在IP地址中又增加 另一个字段,叫做“子网号字段”,这就使得了原本两级的IP地址变成了三级IP地址
ip地址表示方法
最后就变成了:(三级)
IP={<网络号>,<子网号>,<主机号>}
记住一点:划分子网只是把IP地址的主机号部分进行再划分(这样就减少浪费了),而不改变IP地址原来的网络号,简单来说你从IP地址这样看过去,好像没什么变化一样,也就是我们说的你无法从IP地址看出这个源主机或者目的主机所连接的网络是否进行了子网的划分
举个非常简单的例子:
给你一个IP地址:192.168.100.1
你知道这个192.168.100.1是否进行了子网划分吗???
答:在32位IP地址本身以及包括数据报首部都没有任何的关于有关子网划分的信息,我知道实际上你可能已经划分了,但是你需要让别人知道 你 划分了,这就是子网掩码的作用
子网掩码
了解子网掩码的作用之后,举个
总结一下要点:
假设有一个网络145.13.0.0,从别人看来好像就是一个普通的B类网络,但是一旦当这个网络进入到路由器里面后,路由器就看到了许多网络(即也就是划分了子网后的许多网络),额…就是想说,我们看到的和实际其实不一样
在这里我们也习惯这样写:
例如可能很多人都会看到这种写法:
192.168.100.1\25
这个意思就是前25号是网络号,后面的32-25=7位是主机号,这其实也是CIRD(超网)在作怪,详细的往下看吧~~~~
可变长的子网
老规矩,先说为什么要这玩意儿,理由相信很多人也意识到了:
虽然说划分子网在一定程度上缓解了互联网的压力,但是,但是,但是
由于互联网上的路由表中的项目数急剧增长(从以前的几千个增长到几万甚至几十万个)
加上当时整个IPv4地址空间即将全部耗尽
种种压迫之下,就出现了——无分类的编址方法来解决问题
简单来说,也就是可变长的子网掩码,简单来说就是——不要浪费任何的空间,所有的空间都要利用起来,这个时候,IP地址的通式又变成了:
IP= {<网络前缀>,<主机号>}
可以看到又有三级变成了两级模式
具体的理解直接看:
假如有一个网络地址192.199.170.82/27
那么这个网络地址不仅代表IP地址为192.199.170.82,而且还表示这个地址块的网络前缀有27块(剩下的5位就是主机号啦)
那么也可以得到这个地址块有32位(2^5=32)
最小地址、最大地址
继续上面不要紧张
还是上面那个小栗子,通过上面的192.199.170.82/27
可以知道前面的27位为网络号,那么这个最小地址也就是主机号全部为零的情况
比如根据上面的那就是:
192.199.170.82转成二进制:
11000000.11000111.10101010.1010010
那么最小地址:
11000000.11000111.10101010.1000000
转成十进制:
192.199.170.64
同理,最大地址:
11000000.11000111.10101010.1011111
转成十进制:
192.199.170.95
构成超网
说完前面,就可以知道由于一个CIDR地址块中有很多地址,所以在路由表中就是利用CIDR地址块来查找目的网络,这种地址的聚合成为“路由聚合”,路由聚合也称为“构成超网”
网络地址
说了这么多,其实就是为了它,是的——网络地址
这里不做太多解释,直接一句话:将子网掩码和IP地址进行逐位“与”运算就可以得到网络地址
没有什么很特别的地方在这里,就是知道这两个直接运算就行,来到下一个重点——
知道IP地址求子网掩码
还是以上面的192.168.100.1\25为例子,求它的子网掩码,先将它转成二进制:
11000000,10101000,1100100,00000001
\25代表前25位是网络号
即:
11000000,10101000,1100100,00000001
然后由于这是一个C类的网络,它的子网掩码默认的是:
255.255.255.0
现在就重点那个\25它在我这里的理解非常简单:
11111111,11111111,11111111,10000000
直接看最后一组是不是在前面的24个1之后又多了一个1,其实这个在我这里的意思就是有多少个1的意思,25,那就是25个1,然后再转换成十进制即得结果:
255.255.255.128