子网掩码快速算法及可变长掩码(VLSM)

再过十几天又到了网管员考试的时间,去年差一点就通过考试,我想今年我得根据自己的薄弱环节,进行有针对性的复习才行。分析了一下,自己对于IP地址与子网划分、交换机(路由器)配置命令等几块内容还是不太了解熟悉,所以这几天将针对它们进行强化复习。

找了一个不错的关于子网掩码的帖子,先发到上面,然后慢慢看。
子网掩码快速算法及可变长掩码(VLSM)

如果你希望每个子网中只有5个ip地址可以给机器用,那么你就最少需要准备给每个子网7个ip地址,因为需要加上两头的不可用的网络和广播ip,所以你需要选比7多的最近的那位,也就是8,为什么比7多的是8,不是9,10或者其它的呢?这是因为只能选择2的N次方,也就是0,2,4,8,16,32,64,128这几个数,就是说选每个子网8个ip。好,到这一步,你就可以算掩码了,这个方法就是:最后一位掩码就是256减去你每个子网所需要的ip地址的数量,那么这个例子就是256-8=248,那么算出这个,你就可以知道那些ip是不能用的了,看:0-7,8-15,16-23,24-31依此类推,写在上面的0、7、8、15、16、23、24、31(依此类推)都是不能用的,你应该用某两个数字之间的IP,那个就是一个子网可用的IP。
再拿200台机器分成4个子网来做例子吧。200台机器,4个子网,那么就是每个子网50台机器,设定为192.168.10.0,C类的IP,大子网掩码应为255.255.255.0,对巴,但是我们要分子网,所以按照上面的,我们用32个IP一个子网内不够,应该每个子网用64个IP(其中62位可用,足够了吧),然后用我的办法:子网掩码应该是256-64=192,那么总的子网掩码应该为:255.255.255.192。不相信?算算:0-63,64-127,128-191,192-255,这样你就可以把四个区域分别设定到四个子网的机器上了。

(256-掩码)就是分段后每段中的ip数,再计算已知IP在哪个段就可以了。其中段里面的IP第一个IP是网络地址,最后一个是广播地址。
比如100.100.100.100 255.255.255.240这个ip的网络号和广播地址,以及这个段中的其它地址的计算方法如下:
256-240=16,说明分成了几个段以后,每段中的IP地址数量是16个,其中第一个是网络号,最后一个是广播地址
100/16=6.x
说明100在16x6和16x7之间
16x6=96,16x7=112
说明100所在的段中第一个地址是96,最后一个是111
那就是100.100.100.100 255.255.255.240这个ip所在的网段的网络地址是100.100.100.96,广播地址是100.100.100.111
可用的IP是100.100.100.97到100.100.100.110

如果是一个无类地址172.38.3.40/25的话
25是255.255.255.128
256-128=128,每段128个,分别是0-127,128-255
40是属于第一段,所以网络位是172.38.3.0,广播是172.38.3.127,ip范围是172.38.3.1-172.38.3.126。
172.38.3.40/25是一个ip地址,该地址的网络地址是172.38.3.0,广播地址是172.38.3.127,该IP地址所在的段包含的地址范围是172.38.3.1-172.38.3.126,它是B类的,默认是16位的掩码,这里是25位,说明变长子网掩码,它被分为两段,172.138.3.0到172.38.3.127网络号为172.168.3.0,还有一段是172.38.3.128到172.38.3.255网络号为172.168.3.128,你的IP为172.38.3.40,属于172.38.3.0/127这一段的,所以网络号为172.168.3.0

155.46.16.88/27
子网掩码:255.255.255.224
256-224=32
所以分为这些段:0~32 33~65 66~98 99~131 132~164 165~197 198~230
每段的开头是网络地址
每段的结尾是广播地址

附:
A类 0-127 0 8位 24位
B类 128-191 10 16位 16位
C类 192-223 110 24位 8位
D类 224-239 1110 组播地址
E类 240-255 1111 保留试验使用

更详细的说明:
划分子网

  为了提高IP地址的使用效率,可将一个网络划分为子网:采用借位的方式,从主机位最高位开始借位变为新的子网位,所剩余的部分则仍为主机位。这使得IP地址的结构分为三部分:网络位、子网位和主机位。

  引入子网概念后,网络位加上子网位才能全局唯一地标识一个网络。把所有的网络位用1来标识,主机位用0来标识,就得到了子网掩码。如下图所示的子网掩码转换为十进制之后为:255.255.255.224

  子网编址使得IP地址具有一定的内部层次结构,这种层次结构便于IP地址分配和管理。
  它的使用关键在于选择合适的层次结构--如何既能适应各种现实的物理网络规模,又能充分地利用IP地址空间(即:从何处分隔子网号和主机号)。
在思科网络技术学院CCNA教学和考试当中,不少同学在进行IP地址规划时总是很头疼子网和掩码的计算。现在给大家一个小窍门,可以顺利的解决这个问题。

首先,我们看一个CCNA考试中常见的题型:一个主机的IP地址是202.112.14.137,掩码是255.255.255.224,要求计算这个主机所在网络的网络地址和广播地址。

  常规办法是把这个主机地址和子网掩码都换算成二进制数,两者进行逻辑与运算后即可得到网络地址。其实大家只要仔细想想,可以得到另一个方法:255.255.255.224的掩码所容纳的IP地址有256-224=32个(包括网络地址和广播地址),那么具有这种掩码的网络地址一定是32的倍数。而网络地址是子网IP地址的开始,广播地址是结束,可使用的主机地址在这个范围内,因此略小于137而又是32的倍数的只有128,所以得出网络地址是202.112.14.128。而广播地址就是下一个网络的网络地址减1。而下一个32的倍数是160,因此可以得到广播地址为202.112.14.159。

  CCNA考试中,还有一种题型,要你根据每个网络的主机数量进行子网地址的规划和计算子网掩码。这也可按上述原则进行计算。比如一个子网有10台主机,那么对于这个子网就需要10+1+1+1=13个IP地址。(注意加的第一个1是指这个网络连接时所需的网关地址,接着的两个1分别是指网络地址和广播地址。)13小于16(16等于2的4次方),所以主机位为4位。而256-16=240,所以该子网掩码为255.255.255.240。

  如果一个子网有14台主机,不少同学常犯的错误是:依然分配具有16个地址空间的子网,而忘记了给网关分配地址。这样就错误了,因为14+1+1+1=17 ,大于16,所以我们只能分配具有32个地址(32等于2的5次方)空间的子网。这时子网掩码为:255.255.255.224。

无类的内部域路由(CIDR)
  子网掩码 CIDR值
  255.0.0.0 /8
  255.127.0.0 /9
  255.192.0.0 /10
  255.224.0.0 /11
  255.240.0.0 /12
  255.248.0.0 /13
  255.252.0.0 /14
  255.254.0.0 /15
  255.255.0.0 /16
  255.255.128.0 /17
  255.255.192.0 /18
  255.255.224.0 /19
  255.255.240.0 /20
  255.255.248.0 /21
  255.255.252.0 /22
  255.255.254.0 /23
  255.255.255.0 /24
  255.255.255.128 /25
  255.255.255.192 /26
  255.255.255.224 /27
  255.255.255.240 /28
  255.255.255.248 /29
  255.255.255.252 /30

C类地址的子网划分
  在一个C类地址中,只有八位是可以用来定义主机的。记住,子网位必须是由左到右进行定义的,这中间,不能跳过某些位。也就是说,C类子网掩码只能是:
  二进制 十进制 速记
  10000000 128 /25
  11000000 192 /26
  11100000 224 /27
  11110000 240 /28
  11111000 248 /29
  11111100 252 /30
  11111110 254 /31(无效)

使用可变长掩码(Variable Length Subnet Mask,VLSM)就是指一个网络可以用不同的掩码进行配置。这样做的目的是为了使把一个网络划分成多个子网更加方便。在没有VLSM的情况下,一个网络只能使用一种子网掩码,这就限制了在给定的子网数目条件下主机的数目。例如你被分配了一个C类地址,网络号为192.168.10.0,而你现在需要将其划分为三个子网,其中一个子网有100台主机,其余的两个子网有50台主机。我们知道一个C类地址有254个可用地址,那么你如何选择子网掩码呢?从上表中我们发现,当我们在所有子网中都使用一个子网掩码时这一问题是无法解决的。此时VLSM就派上了用场,我们可以在100个主机的子网使用255.255.255.128这一掩码,它可以使用192.168.10.0到192.168.10.127这128个IP地址,其中可用主机号为126个。我们再把剩下的192.168.10.128到192.168.10.255这128个IP地址分成两个子网,子网掩码为255.255.255.192。其中一个子网的地址从192.168.10.128到192.168.10.191,另一子网的地址从192.168.10.192到192.168.10.255。子网掩码为255.255.255.192每个子网的可用主机地址都为62个,这样就达到了要求。可以看出合理使用子网掩码,可以使IP地址更加便于管理和控制。

某公司有两个主要部门:市场部和技术部。技术部又分为硬件部和软件部两个部门。该公司申请到了一个完整的C类IP地址段:210.31.233.0,子网掩码255.255.255.0。为了便于分级管理,该公司采用了VLSM技术,将原主网络划分称为两级子网(未考虑全0和全1子网)。
市场部分得了一级子网中的第1个子网,即210.31.233.64,子网掩码255.255.255.192,该一级子网共有62个IP地址可供分配。
技术部将所分得的一级子网中的第2个子网210.31.233.128,子网掩码255.255.255.192又进一步划分成了两个二级子网。其中第1个二级子网210.31.233.128,子网掩码255.255.255.224划分给技术部的下属分部-硬件部,该二级子网共有30个IP地址可供分配。技术部的下属分部-软件部分得了第2个二级子网210.31.233.160,子网掩码255.255.255.224,该二级子网共有30个IP地址可供分配。
在实际工程实践中,可以进一步将网络划分成三级或者更多级子网。同时,可以考虑使用全0和全1子网以节省网络地址空间。

简单的说,可变长无非就是借位。而借位的基础是在A,B,C三类的基础上而来的。
打一个最简单的比方。172.16.0.0/16的网络公司要划分六个子网,首先算出要借几位才能得到六个子网。借一位就是2的1次方,借2位就是2的2次方,依次来推,借六个子网只有2的3次方=8能得到自己所需的六个子网在NA里面不能同时为0或为1所以要减2就是2的3次方减2=6。
然后在写出子网掩码。因为/16是B类网络掩码是255.255.0.0/16借了3位就应该是255.255.224.0/19
写二进制清楚点就是:11111111.11111111.00000000.00000000/16
11111111.11111111.11100000.00000000/19
要算多少个主机的话就看后面有多少个0这里是32-19=13这里的主机就是有2的13次方-2得到有多少主机地址。
接着在来算有哪些合法的子网。用256减去借位得来的224就是256-224=32这也叫分段的基数。32也就是第一个子网了。第二个子网就是32+32=64,第三个就是64+32=96依次算六个出来就OK了。
那么172.16.32.0/19就是第一个网段了。172.16.64.0/19就是第二个了。
第一个网段内的第一个主机就是172.16.32.1;最后一个主机就是172.16.63.254了广播是172.16.63.255.这样就可以得出来你所要的了。

CIDR(发音为“cider”)
从网络位借位给主机,和vlsm正好相反,允许一组ip网络对其他的路由器看来好象为一个实体,只有 网络位 和 主机位 来区别不同的IP 不考虑分类(A,B,C,D,E),ISP常用这样的方法给客户分配地址,ISP提供给客户1个块,类似192.168.10.32/28
无类域间路由(Classless Inter-Domain Routing,CIDR)在RFC 1517~RFC 1520中都有描述。提出CIDR的初衷是为了解决IP地址空间即将耗尽(特别是B类地址)的问题。CIDR并不使用传统的有类网络地址的概念,即不再区分A、B、C类网络地址。在分配IP地址段时也不再按照有类网络地址的类别进行分配,而是将IP网络地址空间看成是一个整体,并划分成连续的地址块。然后,采用分块的方法进行分配。

在CIDR技术中,常使用子网掩码中表示网络号二进制位的长度来区分一个网络地址块的大小,称为CIDR前缀。如IP地址210.31.233.1,子网掩码255.255.255.0可表示成210.31.233.1/24;IP地址166.133.67.98,子网掩码255.255.0.0可表示成166.133.67.98/16;IP地址192.168.0.1,子网掩码255.255.255.240可表示成192.168.0.1/28等。

CIDR可以用来做IP地址汇总(或称超网,Super netting)。在未作地址汇总之前,路由器需要对外声明所有的内部网络IP地址空间段。这将导致Internet核心路由器中的路由条目非常庞大(接近10万条)。采用CIDR地址汇总后,可以将连续的地址空间块总结成一条路由条目。路由器不再需要对外声明内部网络的所有IP地址空间段。这样,就大大减小了路由表中路由条目的数量。

例如,某公司申请到了1个网络地址块(共8个C类网络地址):210.31.224.0/24-210.31.231.0/24,为了对这8个C类网络地址块进行汇总,采用了新的子网掩码255.255.248.0,CIDR前缀为/21。如图2所示。

可以看出,CIDR实际上是借用部分网络号充当主机号的方法。在图2中,因为8个C类地址网络号的前21位完全相同,变化的只是最后3位网络号。因此,可以将网络号的后3位看成是主机号,选择新的子网掩码为255.255.248.0 (1111,1000),将这8个C类网络地址汇总成为210.31.224.0/21。

利用CIDR实现地址汇总有两个基本条件:

待汇总地址的网络号拥有相同的高位。如图2-2-8中8个待汇总的网络地址的第3个位域的前5位完全相等,均为11100。待汇总的网络地址数目必须是2n,如2个、4个、8个、16个等等。否则,可能会导致路由黑洞(汇总后的网络可能包含实际中并不存在的子网)。

CIDR作用用于帮助减缓IP地址耗尽和路由表增大问题的一项技术。CIDR的理念是多个C类地址块可以被组合或聚合在一起以生成更大的无类别IP地址集。这些多个C类地址可以在路由表中被归纳,从而减少了路由通告。
CIDR举例从192.168.8.0/24到192.168.15.0/24的C类网络地址被使用,并且被通告到ISP的路由器。当ISP路由器向外界通告路由时,它能够将这些C类网络的路由归纳为一条路由而不必分别通告这8个C类网络。通过通告路由192.168.8.0/21,ISP路由器指明他能够到达与地址192.168.8.0的前21比特相同的所有目的地址。
http://www.pcshow.net/bbs/viewthread.php?tid=350597772
这贴有CCNP的教材,头大头大

几个公式变量的说明:
Subnet_block:可分配子网块大小,指在某一子网掩码下的子网的块数。
Subnet_num:实际可分配子网数,指可分配子网块中要剔除首、尾两块,这是某一子网掩码下可分配的实际子网数量,它等于Subnet_block-2。
IP_block:每个子网可分配的IP地址块大小。
IP_num:每个子网实际可分配的IP地址数,因为每个子网的首、尾IP地址必须保留(一个为网络地址,一个为广播地址),所以它等于IP_block-2,IP_num也用于计算主机段
M:子网掩码(net mask)。
它们之间的公式如下:
M=256-IP_block
IP_block=256/Subnet_block,反之Subnet_block=256/IP_block
IP_num=IP_block-2
Subnet_num=Subnet_block-2
2的冥数:要熟练掌握2^8(256)以内的2的冥代表的十进制数,如128=2^7、64=2^6…,这可使我们立即推算出Subnet_block和IP_block数。
现在我们举一些例子:
一、 已知所需子网数12,求实际子网数
解:这里实际子网数指Subnet_num,由于12最接近2的冥为16(2^4),即 Subnet_block=16,那么Subnet_num=16-2=14,故实际子网数为14。

二、已知一个B类子网每个子网主机数要达到60x255(约相当于X.Y.0.1--X.Y.59.254的数量)个,求子网掩码。
解:1、60接近2的冥为64(2^6),即,IP_block=64
2、子网掩码M=256-IP_block
=256-64=192
3、子网掩码格式B类是:255.255.M.0.
所以子网掩码为:255.255.192.0
三、 如果所需子网数为7,求子网掩码 (仔细看这里,和我们考试的差不多)
解:1、7最接近2的冥为8,但8个Subnet_block因为要保留首、尾2个子网块,即 8-2=6<7,并不能达到所需子网数,所以应取2的冥为16,即Subnet_block=16
2、IP_block=256/Subnet_block=256/16=16
3、子网掩码M=256-IP_block=256-16=240。
四、 已知网络地址为211.134.12.0,要有4个子网,求子网掩码及主机段。
解:1、211.y.y.y是一个C类网,子网掩码格式为255.255.255.M
2、4个子网,4接近2的冥是8(2^3),所以Subnet_block=8
Subnet_num=8-2=6
3、IP_block=256/Subnet_block=256/8=32
4、子网掩码M=256-IP_block=256-32=224
5、所以子网掩码表示为255.255.255.224
6、因为子网块(Subnet_block)的首、尾两块不能使用,所以可分配6个子网块(Subnet_num),每块32个可分配主机块(IP_block)
即:32-63、64-95、96-127、128-159、160-191、192-223
首块(0-31)和尾块(224-255)不能使用
7、每个子网块中的可分配主机块又有首、尾两个不能使用(一个是子网网络地址,一个 是子网广播地址),所以主机段分别为:
33-62、65-94、97-126、129-158、161-190、193-222
8、所以子网掩码为255.255.255.224
主机段共6段为:211.134.12.33--211.134.12.62
211.134.12.65--211.134.12.94
211.134.12.97--211.134.12.126
211.134.12.129--211.134.12.158
211.134.12.161--211.134.12.190
211.134.12.193--211.134.12.222
可以任选其中的4段作为4个子网。


A类地址必须以0开头,如:0XXXXXXX.XXXXXXXX.XXXXXXXX.XXXXXXXX
B类地址必须以10开头,如:10XXXXXX.XXXXXXXX.XXXXXXXX.XXXXXXXX
C类地址必须以110开头,如:110XXXXX.XXXXXXXX.XXXXXXXX.XXXXXXXX
D类地址必须以1110开头,如:1110XXXX.XXXXXXXX.XXXXXXXX.XXXXXXXX


举例说明该算法。
  例:给定一 class c address : 192.168.5.0 ,要求划分20个子网,每个子网5
  个主机。

  解:因为4 <5 < 8 ,用256-8=248 ――>即是所求的子网掩码,对应的子网数
  也就出来了。这是针对C类地址。老师也只讲了针对C类地址的做法。下面是我自
  己推出来的针对B类地址的做法。

  对于B类地址,假如主机数小于或等于254,与C类地址算法相同。
  对于主机数大于254的,如需主机 700台,50个子网(相当大了),
   512 < 700< 1024 
  256-(1024/256)=256-4=252 ――>即是所求的子网掩码,对应的子网数也就
  出来了。

  上面256-4中的4(2的2次幂)是指主机数用2进制表示时超过8位的位数,即超过
  2位,掩码为剩余的前6位,即子网数为2(6)-2=62个。


需要进行子网规划一般两种情况:
一、 给定一个网络,整网络地址可知,需要将其划分为若干个小的子网
二、 全新网络,自由设计,需要自己指定整网络地址
后者多了一个根据主机数目确定主网络地址的过程,其他一样。

我们先来讨论第一种情况:

例:学院新建4个机房,每个房间有25台机器,给定一个网络地址空间:192.168.10.0,现在需要将其划分为4个子网。

分析:
192.168.10.0是一个C类的IP地址,标准掩码为:255.255.255.0

我们来看要求:4个机房,每个房间有25台机器,那就是需要4个子网,每个子网下面最少25台主机。

考虑扩展性,一般机房能容纳机器数量是固定的,建设好之后向机房增加机器的情况较少,增加新机房(新子网)情况较多。
(当然对于我们这题,考虑主机或子网最后的结果都是相同的,但如果要组建较大规模网络的时候,这点要特别注意。)

我们依据子网内最大主机数来确定借几位。
使用公式2n-2 >= 最大主机数

2n-2 >= 25
25-2 = 30 >= 25

所以主机位数n为:5
相对应的子网需要借3位

确定了子网部分,后面就简单了,前面的网络部分不变,看最后的这8位

得到6个可用的子网地址:
全部转换为点分十进制表示

11000000 10101000 0000101000100000 = 192.168.10.32
11000000 10101000 0000101001000000 = 192.168.10.64
11000000 10101000 0000101001100000 = 192.168.10.96
11000000 10101000 0000101010000000 = 192.168.10.128
11000000 10101000 0000101010100000 = 192.168.10.160
11000000 10101000 0000101011000000 = 192.168.10.192

子网掩码:11111111 11111111 1111111111100000 = 255.255.255.224

这就得出了所有子网的网络地址,那个子网的主机地址呢?
注意在一个网络中主机地址全为0的IP是网络地址,全为1的IP是网络广播地址,不可用
所以我们的子网地址和子网主机地址如下:

子网1: 192.168.10.32 掩码: 255.255.255.224
主机IP:192.168.10.33—62

子网2: 192.168.10.64 掩码: 255.255.255.224
主机IP:192.168.10.65—94

子网3: 192.168.10.96 掩码: 255.255.255.224
主机IP:192.168.10.97—126

子网4: 192.168.10.128 掩码: 255.255.255.224
主机IP:192.168.10.129—158

子网5: 192.168.10.160 掩码: 255.255.255.224
主机IP:192.168.10.161—190

子网6: 192.168.10.192 掩码: 255.255.255.224
主机IP:192.168.10.193—222

我们只要取出前面的4个子网就可以完成题目了。

我们再来讨论一下第二种情况:

全新的网络,需要自己来指定整网络地址,这就需要先考虑选择A类、B类或C类IP的问题,就像上例中的网络地址空间:192.168.10.0不给定,任由自己选择,那,有的同学可能会说,直接选择A类地址,有24位的主机位来随便借位。
当然可以,但那就会浪费N多的地址了,在局域网内当然可以随便你设置,但在广域网里可没有这么大的地址来给你分配,所以从开始就要养成个好的习惯。

那如何选择呢?

和划分子网的时候一样,通过公式计算(2n-2),我们知道划分的子网越多浪费的地址就越多。
还记得上面我们每个子网里面都有两个IP不能用吗?(主机位全为0或全为1)
每次划分子网一般都有两个子网的地址要浪费掉(子网部分全为0或全为1)

所以,如果我们需要建设一个拥有4个子网,每个子网内有25台主机的网络,那我们一共需要有(4+2)*(25+2)个IP数的网络来划分。

(4+2)*(25+2)=162

一个C类地址的网络可以拥有254的主机地址,所以我们选择C类的地址来作为整个网络的网络号。

如果现在我们有6个机房,每个机房里有50台主机呢?
(6+2)*(50+2)=416
显然,需要用到B类地址的网络了。
后面划分子网的步骤就和上面一样了,不多说。

Loekman

85后,处女座,拖延症患者。

暂无任何评论

评论已关闭