一篇好文章:计算一个网段的广播地址

出于尊重他人的劳动成果,我保留了原文的作者和论坛地址,请版主别见怪。

cnph 于 2001-6-13 19:15:09 加贴在 绿盟科技论坛(bbs.nsfocus.com)--UNIX系统安全:

子网掩码及主机段的十进制算法
                                   cnph
    业务的发展常导致单位面临着这样一个问题:工作站数量越来越多,作为一个单一的大型网络,已变得越来越难以管理;相应地,网络广播数量也随之大增,导致网络越来越慢,那么如何解决这一系列问题呢? 子网划分是个好办法,将一个单一的大型网络划分为多个子网,每个子网都可以单独管理,如果在子网与子网之间采用路由器,则可以隔离网络广播,整个网络的性能将会明显地提高。
    要划分子网就需要计算子网掩码和分配相应的主机块,尽管采用二进制计算可以得出结论,但采用十进制计算方法看起来要比二进制方法简单许多,经过一番观察和总结,我终于得出了子网掩码及主机块的十进制算法。
    首先要明确一些概念:
        类范围:IP地址常采用点分十进制表示方法X.Y.Y.Y,在这里
              X=1--126时称为A类地址;
              X=128--191时称为B类地址;
              X=192--223时称为C类地址;
              如10.202.52.130因为X=10在1--126范围内所以称为A类地址
        类默认子网掩码:A类为 255.0.0.0
                        B类为 255.255.0.0
                        C类为 255.255.255.0
        当我们要划分子网用到子网掩码M时,类子网掩码的格式应为
                    A类为 255.M.0.0
                    B类为 255.255.M.0
                    C类为 255.255.255.M
        M是相应的子网掩码如:255.255.255.240
    十进制计算基数:256,等一下我们所有的十进制计算都要用256来进行。
    几个公式变量的说明:
        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个子网。
    总之,只要理解了公式中的逻辑关系,就能很快计算出子网掩码,从而得出可分配的主机段,参加MCSE和CCNA考试的朋友使用这种方法可以顺利地通过相关试题的考试,而不用象记9×9乘法口诀表一样去背什么二进制掩码表了。

cnph@163.net