原文标题: IP subnetting made easy
原文地址: http://articles.techrepublic.com.com/5100-10878_11-6089187.html
IP网络工程师需要坚实地理解IP子网划分是如何工作的. 但是这个话题却常常被教导者忽略, 学生们对这个话题感到非常困惑和紧张. George Ou开发出了一个简单的, 图形化了的方法, 用通俗易懂的方式解释了IP子网划分.
IP子网划分是IP网络工程师需要理解的一个基础主题, 但是惯例地, 学生们掌握它却有点困难. 许多年以来, 我看到过学生们在学校里练习和处理子网划分时的挣扎, 因为从来没有人用一种容易学懂的方式来解释给他们. 我用我的图形化的方式帮助过无数的学生们学习子网划分是什么, 现在我把所有的经验都总结到了这篇文章中.
IP地址和子网
===============
尽管IP支持因特网协议, 其实它是一个适用范围小到一个私有网络, 大到全球的巨大的因特网的交流协议. 一个IP地址是在IP网络上的单个设备的独一无二的标示符. IP地址有一个32个二进制位的数字组成, 范围是从0到4294967295. 这意味着, 理论上因特网可以包含大致43亿个独特的对象. 但是为了使得这样大地址块更容易处理, 它被分成了4组8个二进制位的数字, 或者说是"八位位组", 中间用"."来分隔. 32个二进制位的数字很难读, 替代的方法是, 我们把它分成4组小于256的数字. 八位位组由范围从0到255的数字组成. 下面的数字展现出了IP地址是如何增长的.
0.0.0.0
0.0.0.1
...increment 252 hosts...
0.0.0.254
0.0.0.255
0.0.1.0
0.0.1.1
...increment 252 hosts...
0.0.1.254
0.0.1.255
0.0.2.0
0.0.2.1
...increment 4+ billion hosts...
255.255.255.255
单词subnet(子网)是sub network的简写, 意思是比大网络小一点的网络. 在子网内部没有更多子划分的最小的子网被认为是一个单独的"广播域(broadcast domain)", 广播域跟以太网交换机上的单独的LAN(local area network)段直接相关. 广播域提供一个重要的功能, 因为它是网络上的设备通过MAC地址与其他设备通信的场所. MAC地址不会通过多个子网来路由, MAC地址在整个internet上是唯一的. 基于MAC地址的通信仅局限于小规模的网络, 因为他们依赖于ARP广播来寻路, 广播的量会有一定的限制, 否则广播通讯的量可以使得整个网络瘫痪, 因为网络上充斥了纯粹的广播杂音. 基于这个原因, 最普通的最小子网是8个二进制位的, 精确地说是八位位组, 尽管最小子网还可以更小一点, 或者稍微再大一点点.
子网有一个开头和一个结尾, 开头的数字永远是偶数, 结尾数字永远是奇数. 开头数字就是"Network ID", 结尾的数字就是"Broadcast ID". 你不能使用这些数字, 因为他们两个都有特殊的意义, 这些特殊意义是为了特殊的目的而建立的. Network ID是某个子网的正式地址. Broadcast ID是子网上所有的设备监听的广播地址. 任何时候, 当你想要引用一个子网的时候, 你可以设置Network ID和它的子网掩码, 子网掩码定义了子网的大小. 任何时候, 当你想要想子网中的所有设备发送数据的时候, 你可以发送你的数据到指定的Broadcast ID. 稍后, 我会show给你简单的确定Network ID和Broadcast ID的数学方法和图形方法.
图形化的子网标尺
============
许多年以来, 我发现人们在IP子网划分问题上头痛不已, 我想要一个教授这个问题的更好的方法. 我很快意识到许多IT人员缺乏必要的数学背景知识, 并且对理解二进制数字的概念有困难. 为了弥补这个不足, 这里我展现了如图表A的图形化方法来说明子网划分的问题. 在这个例子中, 我们观察的目标是从10.0.0.0 到10.0.32.0的IP地址范围. 注意10.0.32.0这个结束IP地址本身实际上是下一个子网的开头地址. 这里的网络范围就结束在它的前一个, 也就是10.0.31.255.
图表A
注意, 子网尺寸每增长一个二进制位, 主机的数目就会跟随着翻倍. 最小的一个步长代表着8个二进制位, 8个二进制位中就包括了一个256个主机的子网-- 但是, 因为你不能用第一个和最后一个IP地址, 所以, 实际上网络上只有254个可用的主机. 计算一个子网中可用主机的数量最简单的方法是计算2的二进制位个数次方, 然后减2. 比如说9个二进制位, 我们就有510个可用主机, 因为2的9次幂是512, 但是我们要把开头和结尾去掉. 一直到13个二进制位, 在上图中的整个尺子上, 我们就有8190个可用的主机了.(224d = 11100000B)(255.255.224.0 = 11111111.11111111.11100000.00000000, 其中共13个0)
学会恰当的划分子网
================
子网可以被划分为更小的子网, 甚至再进一步更小的子网. 最重要的关于划分子网的一点是, 你不能任意地选定开始点和结束点. 这个划分必须符合干净的二进制划分. 学习这个最好的方法是看看我的子网尺, 还有就是看看合法的子网是什么样子. 在图表B中, 绿色的子网是合法的, 红色的是非法的.
图表B
这个尺子的构造跟其他的尺子差不多, 我们在中间把它一分为二. 然后, 我们二分了剩下的部分, 然后我们持续新一轮这样的二分法. 在上面的例子中, 我们有5轮的二分. 如果你仔细看看每个绿色的(合法的)子网块, 你会注意到子网中包含的所有刻度都不比边上的刻度大. 这里有一个数学原因, 我们稍后再细说, 但是这个图形化的解释使得稍后的数学解释更容易理解.
子网掩码的角色
==============
子网掩码扮演着一个定义子网尺寸的关键的角色. 看看图表C. 注意模式, 特别注意红色的数字. 无论何时, 当你在处理子网的时候, 这个表格迟早会派上用场, 帮助你回忆起八个处理子网掩码用的特殊数字. 它们是: 255, 254, 252, 248, 240, 224, 192, 和128. 你会在IP网络中一次又一次的看到这些数字, 记住他们会让你的生活更加容易.
图表C
我这里包含了三类尺寸. 你会看到头两类, 主机长度多数情况是从0到16个二进制位. 它对于从0到8二进制位范围内的DSL和T1的IP块是非常常见的. 专用网络典型工作在8到24个二进制位的范围内.
注意二进制掩码中0的个数是如何从右到左增长的. 二进制模式的子网掩码左边都是1, 右边都是0. 0的个数与子网的长度相同. 我只演示了八位位组里二进制子网掩码中有意思的部分, 因为所有右边的八位位组都由0组成, 而左边的都由1组成. 所以, 如果我们看看长度为11个二进制位的子网掩码, 那么完整的二进制子网掩码是11111111.11111111.11111000.00000000. 这个二进制子网掩码转译到256模式下, 就直接变成了255.255.248.0.
子网掩码中的"Mask"
===============
子网掩码不仅仅可以决定子网的尺寸, 还可以在没有某子网的任何IP地址的情况下帮助你精确定位子网的结束点. 它被命名为子网"掩码"的原因是, 它字面上地掩盖住了主机的二进制位, 只留下子网用于起始的地址, 即Network ID. 一旦你知道了一个子网是如何起始的, 还知道这个子网有多大, 你就可以确定子网的终点了, 子网终点也就是Broadcast ID.
为了计算Network ID, 你只要简单地拿那个子网中的IP地址与子网掩码进行"与"运算即可. 让我们用一个10.20.237.15的IP地址和一个255.255.248.0的子网掩码来做例子吧. 注意, 这也可以被简写为10.20.237.15/21, 因为子网掩码的长度是21(即255.255.248中有21个1). 图表D和图表E展现了与操作的十进制和二进制版本.
图表D
十进制版
图表E
十六进制版
二进制版展现了那么多的0是如何作为mask来掩盖掉顶部的IP地址的. 在masking box中, 0将顶部的所有的数字变成了0, 不管它是什么数字. 当你将结果转换回十进制是, 你就得到了10.20.232.0这个Network ID.
在教授子网划分的过程中, 我一直觉得不爽的是: 学生们没有接触到简单的方法来绕过与操作时的二进制转换. 我甚至看到相关领域的IT工作者使用这种又慢又麻烦的方式去转换到二进制数值, 然后进行与运算, 算完之后, 再使用Windows计算器转换回十进制. 事实上, 使用Windows计算器, 的确有一种简单的捷径可走, 因为与操作在十进制上, 是可以直接工作的. 仅仅按下237后, 按AND操作符, 然后键入248, 马上就会得到232. 我不理解为什么不把这点解释给学生听, 因为这样使用计算器会使得计算掩码变得容易很多.
因为子网掩码中有11个0, 所以子网是11个二进制的长度. 这意味着最多能有2^11, 也就是2048个主机在子网当中, 子网的最后一个IP地址是10.20.239.255. 你只要瞄一眼第三个八位位组中的三个0 , 你就可以快速地计算出这个结论了, 这意味着第三个八位位组中的IP地址可以有2^3, 即8个变化. 所以呢, 下一个一个子网开始的位置就是10.20.232+8.0, 也就是10.20.240.0了. 如果我们把它减1, 我们就得到了10.20.239.255, 这就是当前子网的结束点. 为了让你可以视觉化的感受一下这点, 请看我的子网尺吧.
图表F
IP类型简介
=============
为了对IP子网进行一些分类, 因特网的创立者选择将因特网分成几类. 注意这分类并不像子网计算那样重要, 这仅仅是表现一下因特网是如何摆开的. 因特网被分成A,B,C,D,E五类. A类占据了整个因特网的一半, B类占据了剩下一半里的一半, C类又占去B剩下的一半的一半, D类(多重广播)再占去剩下的一半中的一半, 剩下的就是E类的了. 我的学生告诉我, 他们一直受到记忆IP分类的困扰, 直到他们看到图表G. 这是因为你实际上不需要 记忆任何东西, 你只需要学习一下使用可用范围的一半来建立标尺的技术就OK了.
图表G
记住, 所有的子网都是从偶数开始的, 并且所有的子网结束点都是奇数. 注意, 0.0.0.0 到0.255.255.255(0.0.0.0/8)没被使用, 而且127.0.0.0 到127.255.255.255(127.0.0.0/8)被用来做了回路地址.
127.0.0.0/8被解释为, Network ID为127.0.0.0, 子网掩码为左边8个1, 右边是一堆0的子网
所有的A类地址的第一个八位位组的值是在1到126之间的, 因为127被保留做了回路地址. A类子网是24个bit长的, 意味着子网掩码只有8个二进制位那么长. 举个例子, GE拥有的3.0.0.0/8的子网(即3.0.0.0的Network ID, 11111111.0.0.0是子网掩码), 因为GE足够幸运, 很早就被赋予了16.8百万个地址. U.S.军队拥有6.0.0.0/8. Level 3 Communications 拥有 8.0.0.0/8. IBM 拥有9.0.0.0/8. AT&T 拥有 12.0.0.0/8. Xerox 拥有 13.0.0.0/8. HP 拥有15.0.0.0/8 和 16.0.0.0/8. Apple 拥有 17.0.0.0/8.
所有的B类地址第一个八位位组的值在128到191之间. B类子网是16个bit长, 意味着子网掩码是16个bit长. 举例, BBN Communications 拥有 128.1.0.0/16, 也就是 128.1.0.0 到128.1.255.255. Carnegie Mellon University 拥有 128.2.0.0/16.
所有的C类地址第一个八位iweizude值在192到233之间. C类子网是8个bit长, 所以子网掩码就是仅仅是24个bit长. 注意ARIN (负责管理Inernet地址的组织)只会将4个C类地址卖给单独的公司, 并且那个公司还得证明它确实需要1024个公开的IP地址. 如果你需要运行BGP才能使用多个ISP作为冗余, 那么你不得不拥有自己的IP地址块. 还要注意, 已经不是早些年了, 早年16.8百万个主机的A类地址基本不要任何代价就分配出去了. 现在你需要为一个1024个地址的子网IP块(子网掩码是255.255.252.0, 其中有22个1)每年付出一笔费用.
子网类别的概念可以在实际操作中带来麻烦. 我真实地见过人们忘记如何从老的Cisco路由器上关掉分类, 还见过当一写路由器添加进来的时候, 配置为动态路由的广域网上的巨大子网的路由器被劫持掉. 这因为Cisco路由器假设子网掩码是满/8 或 /16 或 /24的, 即使你定义这些范围内部的一个值. 所有的新一些的Cisco IOS软件版本关掉了子网分类的概念, 使用默认的无类别的路由方式. 这是通过默认的"IP无类别"命令完成的.
公共IP地址和私有IP地址
==================
除了上面提到的保留的IP地址(0.0.0.0/8 和127.0.0.0/8), 还有一类没有被公共因特网使用的地址. 这些私有子网由自由IP地址组成, 并且通常都在防火墙或者执行NAT(network address translation)的路由器的后面. 需要NAT是因为私有IP地址在公共因特网上是无法路由的, 所以他们在触及因特网前, 必须被翻译为共有IP地址. 私有IP永远不会被路由到是因为没有任何人实际上拥有它们. 正因为任何人都可以使用, 所以私有IP地址在公共的因特网上就没有正确的指向点. 私有IP地址多数用于局域网和广域网的环境下, 除非你足够幸运, 拥有一个A类或至少是B类地址块, 在这样的情形下, 你可以拥有足够的IP来为内部和外部的地址赋值.
下面的IP地址都是为私有网络分配的
- 10.0.0.0/8 (10.0.0.0 to 10.255.255.255)
- 172.16.0.0/12 (172.16.0.0 to 172.31.255.255)
- 192.168.0.0/16 (192.168.0.0 to 192.168.255.255)
- 169.254.0.0/16 (169.254.0.0 to 169.254.255.255)*
*注意, 169.254.0.0/16是一个私有IP地址块, 在DHCP服务器不可用的时候, 作为自我随即IP赋值之用.
10.0.0.0/8正常情况下是在比较大的网络上使用的, 因为这个块中有大致16.8百万个IP地址是可用的. 它们可以被分为很多更小规模的子网的组, 供不同地理位置的网络使用, 这些组还可以进一步被划分为更小的子网. 小一点的公司典型地会使用172.16.0.0/12 这个范围作为自己的私有IP地址, 然后再分为更小的子网, 虽然没有什么原因不让它们用10.0.0.0/8, 如果他们想用还是可以的. 家用网络一般会使用子网掩码为24个1的在192.168.0.0/16之内的子网.
对于私有IP地址和NAT的使用已经在IPv4中持续很久了, 在可预见的将来还会继续使用下去. 因为他们高效地允许了一个公有IP地址能带表几千个私有IP地址. 在当前IPv4地址被发放的速率下, 我们的IPv4的地址大概还够使用17年. ARIN已经在发放IP地址上非常吝啬了, 跟早年相比小块的IP地址已经非常昂贵, 那时Apple这样的公司很简单的就拿到了16.8百万大小的IP地址块. 下一代的IP地址, 叫做IPv6, 有一个128bit长, 比IPv4多出79千万亿万亿倍的地址. 即使你为地球上43亿人每人一个IP地址, 你还会剩下18百万万亿个IPv6地址呢.