标题：子网掩码
概述
  路由实验、子网划分及子网掩码子网掩码(subnet mask)是每个使用互联网的人必须要掌握的基础知识，只有掌握它，才能够真正理解TCP/IP协议的设置。以下就来深入浅出地讲解什么是子网掩码。
子网掩码——屏蔽一个IP地址的网络部分的“全1”比特模式。对于A类地址来说，默认的子网掩码是255.0.0.0；对于B类地址来说默认的子网掩码是255. 255.0.0；对于C类地址来说默认的子网掩码是255.255.255.0。利用子网掩码可以把大的网络划分成子网即VLSM（可变长子网掩码），也可以把小的网络归并成大的网络即超网。构成要想理解什么是子网掩码，就不能不了解IP地址的构成。互联网是由许多小型网络构成的，每个网络上都有许多主机，这样便构成了一个有层次的结构。IP地址在设计时就考虑到地址分配的层次特点，将每个IP地址都分割成网络号和主机号两部分，以便于IP地址的寻址操作。
IP地址的网络号和主机号各是多少位呢？如果不指定，就不知道哪些位是网络号、哪些是主机号，这就需要通过子网掩码来实现。规则子网掩码的设定必须遵循一定的规则。与二进制IP地址相同，子网掩码由1和0组成，且1和0分别连续。子网掩码的长度也是32位，左边是网络位，用二进制数字“1”表示，1的数目等于网络位的长度；右边是主机位，用二进制数字“0”表示，0的数目等于主机位的长度。这样做的目的是为了让掩码与ip地址做AND运算时用0遮住原主机数，而不改变原网络段数字，而且很容易通过0的位数确定子网的主机数（2的主机位数次方-2，因为主机号全为1时表示该网络广播地址，全为0时表示该网络的网络号，这是两个特殊地址）。只有通过子网掩码，才能表明一台主机所在的子网与其他子网的关系，使网络正常工作。
作用
子网掩码是一个32位地址，是与IP地址结合使用的一种技术。它的主要作用有两个，一是用于屏蔽IP地址的一部分以区别网络标识和主机标识，并说明该IP地址是在局域网上，还是在远程网上。二是用于将一个大的IP网络划分为若干小的子网络。
使用子网是为了减少IP的浪费。因为随着互联网的发展，越来越多的网络产生，有的网络多则几百台，有的只有区区几台，这样就浪费了很多IP地址，所以要划分子网。使用子网可以提高网络应用的效率。
通过IP 地址的二进制与子网掩码的二进制进行与运算，确定某个设备的网络地址和主机号，也就是说通过子网掩码分辨一个网络的网络部分和主机部分。子网掩码一旦设置，网络地址和主机地址就固定了。子网一个最显著的特征就是具有子网掩码。与IP地址相同，子网掩码的长度也是32位，也可以使用十进制的形式。例如，为二进制形式的子网掩码：1111 1111.1111 1111.1111 1111.0000 0000，采用十进制的形式为：255.255.255.0。
通过计算机的子网掩码判断两台计算机是否属于同一网段的方法是，将计算机十进制的IP地址和子网掩码转换为二进制的形式，然后进行二进制“与”(AND)计算（全1则得1，不全1则得0），如果得出的结果是相同的，那么这两台计算机就属于同一网段。
掩码位数
由于子网掩码的位数决定于可能的子网数目和每个子网的主机数目。在定义子网掩码前，必须弄清楚本来使用的子网数和主机数目。
1、定义子网掩码的步骤
A、确定哪些组地址归我们使用。比如我们申请到的网络号为“210.73.124.89”，该网络地址为C类IP地址，网络标识为“210.73.124”，主机标识为“89”。 
B、根据我们现 在所需的子网数以及将来可能扩充到的子网数，用宿主机的一些位来定义子网掩码。比如我们需要12个子网，将来可能需要16个。用子网掩码的第四个字节的前四位确定子网掩码（即255.255.255.0中的0）。前四位都置为“1”，即第四个字节为“11110000”，这个数我们暂且称作新的二进制子网掩码。
C、把对应初始网络的各个位都置为“1”，即前三个字节都置为“11111111”，第四个字节都置为“11110000”，则子网掩码的间断二进制形式为：“11111111.11111111.11111111.11110000”
D、把这个数转化为间断十进制形式为：“255.255.255.240”
这个数为该网络的子网掩码。[1]
2、利用子网数来计算
在求子网掩码之前必须先搞清楚要划分的子网数目，以及每个子网内的所需主机数目。 
1)将子网数目转化为二进制来表示
2)取得该二进制的位数，为 N 
3)取得该IP地址的类子网掩码，将其主机地址部分的的前N位置1 即得出该IP地址划分子网的子网掩码。
如欲将B类IP地址168.195.0.0划分成27个子网： 
1)27=11011 
2)该二进制为五位数，N = 5 
3)将B类地址的子网掩码255.255.0.0的主机地址前5位置1（B类地址的主机位包括后两个字节，所以这里要把第三个字节的前5位置1），得到 255.255.248.0 
即为划分成27个子网的B类IP地址 168.195.0.0的子网掩码（实际上是划成了32-2=30个子网）。
这一段介绍的是旧标准下计算的方法，关于旧的标准后文在介绍，在新标准中则可以先将27减去1，因为计算机是从0开始计算的，从0到27实际上是有28个，所以说如果需要27个就需要将27减去1。
3、利用主机数来计算
1)将主机数目转化为二进制来表示
2)如果主机数小于或等于254（注意去掉保留的两个IP地址），则取得该主机的二进制位数，为 N，这里肯定N<8。如果大于254，则 N>8，这就是说主机地址将占据不止8位。
3)使用255.255.255.255来将该类IP地址的主机地址位数全部置1，然后从后向前的将N位全部置为 0，即为子网掩码值。
如欲将B类IP地址168.195.0.0划分成若干子网，每个子网内有主机700台： 
1) 700=1010111100 
2)该二进制为十位数，N = 10 
3)将该B类地址的子网掩码255.255.0.0的主机地址全部置1，得到255.255.255.255 
然后再从后向前将后10位置0,即为： 11111111.11111111.11111100.00000000 
即255.255.252.0。这就是该欲划分成主机为700台的B类IP地址168.195.0.0的子网掩码。
4、子网ID增量计算法（即计算每个子网的IP范围）
其基本计算步骤如下：
第1步，将所需的子网数转换为二进制，如所需划分的子网数为“4”，则转换成成二进制为00000100； 
第2步，取子网数的二进制中有效位数，即为向缺省子网掩码中加入的位数（既向主机ID中借用的位数）。如前面的00000100，有效位为“100”，为3位（在新标准中只需要2位就可以了）；
第3步，决定子网掩码。如IP地址为B类129.20.0.0网络，则缺省子网掩码为：255.255.0.0，借用主机ID的3位以后变为：255.255.224（11100000）0，即将所借的位全表示为1，用作子网掩码。 
第4步，将所借位的主机ID的起始位段最右边的“1”转换为十进制，即为每个子网ID之间的增量，如前面的借位的主机ID起始位段为“11100000”，最右边的“1”，转换成十进制后为2^5=32（此为子网ID增量）。 
第5步，产生的子网ID数为：2^m-2 （m为向缺省子网掩码中加入的位数），如本例向子网掩码中添加的位数为3，则可用子网ID数为：2^3-2=6个； 
第6步，将上面产生的子网ID增量附在原网络ID之后的第一个位段，便形成第一个子网网络ID 129.20.32.0（即第一个子网的起始IP段）； 
第7步，重复上步操作，在原子网ID基础上加上一个子网ID增量，依次类推，直到子网ID中的最后位段为缺省子网掩码位用主机ID位之后的最后一个位段值，这样就可得到所有的子网网络ID。如缺省子网掩码位用主机ID位之后的子网ID为255.255.224.0，其中的“224”为借用主机ID后子网ID的最后一位段值，所以当子网ID通过以上增加增量的方法得到129.20.224.0时便终止，不要再添加了（只能用到129.20.223.0）。关于子网掩码的标准我们知道当主机ID为全0时表示网络ID，全1时表示广播地址。在RFC950标准中，不建议使用全0和全1的子网ID。
例如把最后一个字节的前3位借给网络ID，用后面的5位来表示主机ID，这样就会产生2^3=8个子网，子网ID就分别为000、001、010、011、100、101、110、111这样8个，在RFC950标准中只能使用中间的6个子网ID。
这么做的原因是：
设我们有一个网络：192.168.0.0/24（即子网掩码的前24位为1，255.255.255.0），我们现在需要两个子网，那么按照RFC950，应该使用/26而不是/25，得到两个可以使用的子网192.168.0.64和192.168.0.128
对于192.168.0.0/24，网络地址是192.168.0.0，广播地址是192.168.0.255
对于192.168.0.0/26，网络地址是192.168.0.0，广播地址是192.168.0.63　　对于192.168.0.64/26，网络地址是192.168.0.64，广播地址是192.168.0.127　　对于192.168.0.128/26，网络地址是192.168.0.128，广播地址是192.168.0.191　　对于192.168.0.192/26，网络地址是192.168.0.192，广播地址是192.168.0.255
你可以看出来，对于第一个子网，网络地址和主网络的网络地址是重叠的，对于最后一个子网，广播地址和主网络的广播地址也是重叠的。在CIDR流行以前，这样的重叠将导致极大的混乱。比如，一个发往192.168.0.255的广播是发给主网络的还是子网的？这就是为什么在当时不建议使用全0和全1子网。在今天，CIDR已经非常普及了，所以一般不需要再考虑这个问题。
标注方法
A、无子网的标注法
对无子网的IP地址，可写成主机号为0的掩码。如IP地址210.73.140.5，掩码为255.255.255.255，也可以缺省掩码，只写IP地址。
B、有子网的标注法
有子网时，一定要二者配对出现。以C类地址为例。
(以下一段没有指定掩码为27位,在掩码为27位的情况下才成立~~)
1．IP地址中的前3个字节表示网络号，后一个字节既表明子网号，又说明主机号，还说明两个IP地址是否属于同一个网段。如果属于同一网络区间，这两个地址间的信息交换就不通过路由器。如果不属同一网络区间，也就是子网号不同，两个地址的信息交换就要通过路由器进行。例如：对于IP地址为210.73.140.5的主机来说，其主机标识为00000101，对于IP地址为210.73.140.16的主机来说它的主机标识为00010000，以上两个主机标识的前面三位全是000，说明这两个IP地址在同一个网络区域中，这两台主机在交换信息时不需要通过路由器进行。210.73.60.1的主机标识为00000001，210.73.60.252的主机标识为11111100，这两个主机标识的前面三位000与111不同，说明二者在不同的网络区域，要交换信息需要通过路由器。其子网上主机号各为1和252。
2．掩码的功用是说明有子网和有几个子网，但子网数只能表示为一个范围，不能确切讲具体几个子网，掩码不说明具体子网号，有子网的掩码格式(对C类地址)。
表示方法
子网掩码通常有以下2种格式的表示方法：
1． 通过与IP地址格式相同的点分十进制表示
如：255.0.0.0 或255.255.255.128
2． 在IP地址后加上"/"符号以及1-32的数字，其中1-32的数字表示子网掩码中网络标识位的长度
如：192.168.1.1/24 的子网掩码也可以表示为255.255.255.0
子网掩码一般为255.255.255.0
地址判断
以下均为C类网 
子网掩码是用来判断任意两台计算机的IP地址是否属于同一子网络的根据。
最为简单的理解就是两台计算机各自的IP地址与子网掩码进行AND运算后，如果得出的结果是相同的，则说明这两台计算机是处于同一个子网络上的，可以进行直接的通讯。就这么简单。
运算示例
运算演示之一：aa 
I P 地址　192.168.0.1 
子网掩码　255.255.255.0 
AND运算(AND运算法则：1 与1 = 1 ,1 与0 = 0 ,0 与1 = 0 ,0 与0 = 0 ,即当对应位均为1时结果为1，其余为0。)
转化为二进制进行运算：
I P 地址　11000000.10101000.00000000.00000001 
子网掩码　11111111.11111111.11111111.00000000 
AND运算
11000000.10101000.00000000.00000000 
转化为十进制后为：
192.168.0.0 
运算演示之二：
I P 地址　192.168.0.254 
子网掩码　255.255.255.0 
AND运算
转化为二进制进行运算： 
I P 地址　11000000.10101000.00000000.11111110 
子网掩码　11111111.11111111.11111111.00000000 
AND运算
11000000.10101000.00000000.00000000 
转化为十进制后为：
192.168.0.0 
运算演示之三：
I P 地址　192.168.0.4 
子网掩码　255.255.255.0 
AND运算
转化为二进制进行运算： 
I P 地址　11000000.10101000.00000000.00000100 
子网掩码　11111111.11111111.11111111.00000000 
AND运算
11000000.10101000.00000000.00000000 
转化为十进制后为：
192.168.0.0 
通过以上对三组计算机IP地址与子网掩码的AND运算后，我们可以看到它运算结果是一样的。均为192.168.0.0 
所以计算机就会把这三台计算机视为是同一子网络，然后进行通讯的。 
也许你又要问，这样的子网掩码究竟有多少个IP地址可以用呢？你可以这样算。 
根据上面我们可以看出，局域网内部的ip地址是我们自己规定的（当然和其他的ip地址是一样的），这个是由子网掩码决定的通过对255.255.255.0的分析。可得出：
前三位IP码由分配下来的数字就只能固定为192.168.0　所以就只剩下了最后的一位了，那么显而易见了，ip地址只能有（2的8次方-2），即256-2=254，一般主机地址全为0或者1（二进制）有其特殊的作用。 
那么你可能要问了：如果我的子网掩码不是255.255.255.0呢？你也可以这样做啊假设你的子网掩码是255.255.128.0 
那么你的局域网内的ip地址的前两位肯定是固定的了
这样，你就可以按照下边的计算来看看同一个子网内到底能有多少台机器 
1．十进制128 = 二进制1000 0000 
2．IP码要和子网掩码进行AND运算
3． 
I P 地址　11000000.10101000.1*******.******** 
子网掩码　11111111.11111111.10000000.00000000 
AND运算
11000000.10101000.10000000.00000000 
转化为十进制后为：
192 . 168. 128 . 0 
4．可知我们内部网可用的IP地址为：
11000000.10101000.10000000.00000000 
到
11000000.10101000.11111111.11111111
(也可以是：11000000.10101000.00000000.00000000 到11000000.10101000.01111111.11111111)
5．转化为十进制：
192 . 168.128.0 到192 . 168.255.255 （或者192.168.0.0到192.168.127.255）
6．0和255通常作为网络的内部特殊用途。通常不使用。
7．于是最后的结果如下：我们单位所有可用的IP地址为： 
192.168.128.1-192.168.128.254 
192.168.129.1-192.168.129.254 
192.168.130.1-192.168.130.254 
192.168.131.1-192.168.131.254 
. . . . . . . . . . . . . 
192.168.139.1-192.168.139.254 
192.168.140.1-192.168.140.254 
192.168.141.1-192.168.141.254 
192.168.142.1-192.168.142.254 
192.168.143.1-192.168.143.254 
. . . . . . . . . . . . . 
192.168.254.1-192.168.254.254 
192.168.255.1-192.168.255.254 
8．总数为(255-128+1)*(254-1+1) =128 * 254 = 32512 
子网内包含的机器数目应该是2^n-2，比如说上面的子网掩码是255.255.128.0，那么他的网络号是17位，主机号是15位，只要主机号不全是0或者1就是可以的，所以ip地址是192.168.192.0(11000000.10101000.11000000.00000000)也允许，除掉全0全1，结果为2^15-2*(255-128+1)=32512
9．看看的结果是否正确
(1)、设定IP地址为192.168.128.1 
Ping 192.168.129.233通过测试
访问http://192.168.129.233可以显示出主页 
(2)、设定IP地址为192.168.255.254 
Ping 192.168.255.254 通过测试
访问http://192.168.255.254 可以显示出主页
10．结论 
以上证明我们的结论是对的。
现 在你就可以看你的子网中能有多少台机器了 
255.255.255.128 
分解：
11111111.11111111.11111111.10000000
所以你的内部网络的ip地址只能是 
xxxxxxxx.xxxxxxxx.xxxxxxxx.0??????? 
到
xxxxxxxx.xxxxxxxx.xxxxxxxx.01111111 
子网掩码
复用技术
子网TCP/IP网间网技术产生于大型主流机环境中，它能发展到今天的规模是当初的设计者们始料未及的。网间网规模的迅速扩展对IP地址模式的威胁并不是它不能保证主机地址的唯一性，而是会带来两方面的负担：第一，巨大的网络地址管理开销；第二，网关寻径急剧膨胀。其中第二点尤为突出，寻径表的膨胀不仅会降低网关寻径效率（甚至可能使寻径表溢出，从而造成寻径故障），更重要的是将增加内外部路径刷新时的开销，从而加重网络负担。
因此，迫切需要寻求新的技术，以应付网间网规模增长带来的问题。仔细分析发现，网间网规模的增长在内部主要表现为网络地址的增减，因此解决问题的思路集中在：如何减少网络地址。于是IP网络地址的多重复用技术应运而生。 
通过复用技术，使若干物理网络共享同一IP网络地址，无疑将减少网络地址数。
编址技术
子网编址（subnet addressing）技术，又叫子网寻径（subnet routing），英文简称subnetting，是最广泛使用的IP网络地址复用方式，已经标准化，并成为IP地址模式的一部分。一般的，32位的IP地址分为两部分，即网络号和主机号，我们分别把他们叫做IP地址的“网间网部分”和“本地部分”。子网编址技术将本地部分进一步划分为“物理网络”部分和“主机”部分，如图：网间网部分物理网络主机
|←网间网部分→|←————本地部分—————→| 
|←物理网络→|←—主机部分——→|
其中“物理网络”用于标识同一IP网络地址下的不同物理网络即是“子网”。
(2)子网掩码IP协议标准规定：每一个使用子网的网点都选择一个32位的位模式，若位模式中的某位置1，则对应IP地址中的某位为网络地址（包括网间网部分和物理网络号）中的一位；若位模式中的某位置0，则对应IP地址中的某位为主机地址中的一位。例如位模式： 
11111111 11111111 11111111 00000000中，前三个字节全1，代表对应IP地址中最高的三个字节为网络地址；后一个字节全0，代表对应IP地址中最后的一个字节为主机地址。这种位模式叫做子网模（subnet mask）或“子网掩码”。
为了使用的方便，常常使用“点分整数表示法”来表示一个IP地址和子网掩码，例如c类地址子网掩码（11111111 11111111 11111111 00000000）为：255.255.255.0 IP协议关于子网掩码的定义提供一种有趣的灵活性，允许子网掩码中的“0”和“1”位不连续。但是，这样的子网掩码给分配主机地址和理解寻径表都带来一定困难，并且，极少的路由器支持在子网中使用低序或无序的位，因此在实际应用中通常各网点采用连续方式的子网掩码。像255.255.255.64和255.255.255.160等一类的子网掩码不推荐使用。
(3)子网掩码与IP地址结合使用，可以区分出一个网络地址的网络号和主机号。 
例如：有一个C类地址为：192．9．200．13其缺省的子网掩码为：255．255．255．0则它的网络号和主机号可按如下方法得到：
①将IP地址192．9．200．13转换为二进制11000000 00001001 11001000 00001101 
②将子网掩码255．255．255．0转换为二进制11111111 11111111 11111111 00000000 
③将两个二进制数逻辑与（AND）运算后得出的结果即为网络部分
11000000 00001001 11001000 00001101 AND 11111111 11111111 11111111 00000000 
11000000 00001001 11001000 00000000结果为192.9.200.0，即网络号为192.9.200.0。
④将子网掩码取反再与IP地址逻辑与（AND）后得到的结果即为主机部分11000000 00001001 11001000 00001101 AND 00000000 00000000 00000000 11111111 结果为00000000 00000000 00000000 00001101转化为十进制得到0.0.0.13，即主机号为13。
掩码分类
子网掩码一共分为两类。一类是缺省（自动生成）子网掩码，一类是自定义子网掩码。缺省子网掩码即未划分子网，对应的网络号的位[2-3]都置1，主机号都置0。
A类网络缺省子网掩码：255.0.0.0
B类网络缺省子网掩码：255.255.0.0
C类网络缺省子网掩码：255.255.255.0
自定义子网掩码是将一个网络划分为几个子网，需要每一段使用不同的网络号或子网号，实际上我们可以认为是将主机号分为两个部分：子网号、子网主机号。形式如下：
未做子网划分的ip地址：网络号+主机号
做子网划分后的ip地址：网络号+子网号+子网主机号
也就是说ip地址在划分子网后，以前的主机号位置的一部分给了子网号，余下的是子网主机号。子网掩码是32位二进制数，它的子网主机标识用部分为全“0”。利用子网掩码可以判断两台主机是否在同一子网中。若两台主机的IP地址分别与它们的子网掩码相“与”后的结果相同，则说明这两台主机在同一子网中。
掩码变长
可变长子网掩码(VLSM)的作用：节约IP地址的空间；减少路由表大小。使用VLSM时，所采用的路由协议必须能够支持它,这些路由协议包括RIPv2,OSPF,EIGRP和BGP. 关于更多的VLSM知识，可以去Google搜索
划分捷径
1.会产生多少个子网
2的x次方-2(x代表掩码位,即2进制为1的部分，现 在的网络中，已经不需要-2，已经可以全部使用，不过需要加上相应的配置命令，例如CISCO路由器需要加上ip subnet zero命令就可以全部使用了。)
2.能有多少主机
2的y次方-2(y代表主机位，即2进制为0的部分)
3.有效子网是
有效子网号=256-10进制的子网掩码(结果叫做block size或base number)
4.子网的广播地址是
广播地址=下个子网号-1
5.有效主机分别是
忽略子网内全为0和全为1的地址剩下的就是有效主机地址。最后有效1个主机地址=下个子网号-2(即广播地址-1)