在网络课堂上有一个经常问的问题是“为什么我们不把所有设备都放在同一个子网之中?这样就不用再担心路由的问题。”这个原因很简单。每一次当某个系统需要通讯时,无论他是一台主机还是另一台路由器,他们都需要发送一个ARP(地址解析协议)请求。此外,还有一些非ARP的广播数据包,这些讯息网络中所有人的都可以接收到。当一个24位子网中只有255台设备的时候,这些广播数据包算是比较有限的。在网络中一个很重要的问题就是让这个数字保持在一个较低的状态,因为任何主机在收到一条专发给它的信息或广播信息时,主机必须要处理这个数据包。这需要创建一个硬中断,而且操作系统内核必须要阅读足够的数据以便这个数据包是否要进行进一步处理。
广播风暴时有发生,这种情况的主因是2层拓扑环路。我们在前面的文章里已经接触到一些2层拓扑的问题。当数千个数据包同时涌向你的计算机时,你的机器运行速度会变得非常缓慢。操作系统内核需要把大量的时间用于处理中断,再也腾不出时间处理其它进程。所以,这就是子网为什么非常重要的原因。子网也称作广播域,它可以限制你能够收到的广播范围。
那么,创建一个子网的要点是什么?我如何记住这些看起来怪怪的子网掩码?这与IPv6地址如何配合工作?本期讲座将扩展以前关于子网和CIDR那篇教程的内容,以便让你更全面的理解子网的相关概念。
下一个问题是从一台主机的角度如何来看待广播地址和子网掩码。我们可以理解一台主机需要了解在同一个子网上有什么计算机。这些IP地址能够直接对话,而无需路由器。当子网掩码或者广播地址配置不正确时,你很快就会发现无法访问某些主机。
最常见的设置错误经常出现在当没有同时指定子网掩码和广播地址时设置一个IP地址的时候,由于一些原因,虽然可以通过这其中的一个的值算出另一个,但大多数操作系统并不负责主动更新它们,例如当你运行“ifconfig eth0 130.211.0.1 netmask 255.255.255.0”时,你可能以为一切都会按你预想的方式运行。遗憾的是,你的广播地址很可能被设置为255.255.0.0。这主要依赖于路由器的设置,但是,这个结果通常会导致所有的广播数据包丢失。相反,如果一个子网掩码设置的不正确,这个计算机就不知道这个子网的开始和结束地址。如果一台计算机认为另一个主机在同一个子网中而实际上并非如此,当需要与之通信时这台计算机就会直接向网络中发送ARP请求而不去请求路由器。当然你也可以设置路由器处理这种情况并且让路由器替代目标主机做出ARP应答(称作“ARP代理”,这时可以进行正常的通信),不过,大多数情况下这种情况的结果是无法访问主机。
理解子网掩码的设置原理就可以避免出现上面提到的问题。当你记住子网掩码的含义是“掩盖一些二进制位”时,算出这个网络地址和广播地址并不非常困难。解密一些子网掩码的含义可以加深你对子网掩码原理的理解。一个24位网络地址的子网掩码是255.255.255.0。这很简单。但是,255.255.240.0代表什么意思?破解这个地址的最佳方法就是从掩码掩盖的部分开始。把这个地址与一个标准24位网络地址进行比较。标准 24位网络地址有三个字节被掩盖了,我们看到255.255.240.0有二个字节被掩盖了,另一个8位字节被掩盖了一部分。我们知道这是在一个16位网络地址和一个24位网络地址之间。我们必须要理解二进制,并且算出有多少位被掩盖了。这最前面的16个字节显然是网段的一部分。第三个8位字节240让 16位的网络地址扩展子网掩码,分析这个数字你可以发现这个字节有4个二进制位没被掩盖(256-240=16,16等于2的4次方)。剩下的4个二进制位加上用于前两个字节中的16个二进制位这意味着我们在处理一个20位的网络地址。
1.0.0.0/255.255.255.248是什么意思?我们确实是在一个小于24位子网的网络中。如果我们查看最后的8位字节中的剩余的字节,我们能够看到有8个可用的IP地址。要记住,只有2的3 次方能够等于8,所以,我们使用除了最后一个字节中的三个二进制位以外的全部作为网络地址。这是一个29位网络。当然,简单的地址是非常清楚的:与24位网络相比,255.255.255.128允许的主机地址数量是最后一个8位字节的一半。所以,这是一个25位网络。
关于容易混淆的子网掩码的话题,IPv6地址肯定占有一席之地。这个子网掩码实际上并不是一个问题,因为同样的原则在这里也适用。只是需要记住更多的数字。地址中的真正问题是地址本身的表达方式,IETF(互联网工程任务组)似乎为其制造混乱而感到骄傲。IPv6地址一般以16进制表示。我们的老朋友IPv4也可以用16 进制表示一个IP地址,例如用B.B.B.B代表网络地址11.11.11.11。遗憾的是,IPv6地址起来更让人容易迷惑。要表达一个128位地址,IPv6通常把地址分为8个16位字段。
一个IPv6地址看起来是这样的:2013:4567:0000:CDEF:0000:0000:00AD:0000。这个地址确实更容易一些。例如,前面的零不用写,连续的四个零可以简写为::。然而,后面的零必须要显示出来。这有一点混乱。但是,这个规则适用于一个没有歧义的IP地址。每四个零中的第一个零可以删除,但是,零的连续字段的简写每个地址只能进行一次。上述地址把零缩写之后是这样的:2013:4567:0000:CDEF::AD:0000。IPv6提供的地址数量是2的128次方,足够地球每平方米使用大约1000个IP地址。
如果你记住了二进制的规则,IPv6表示地址的规则和一些简单的子网参考,你将成为子网大师。朋友们会请你提供帮助。
小结
•子网对于把广播通信量减少到最小程度是非常重要的。
•用计数被掩盖的二进制位,是推测陌生的子网掩码的最简单的方法。
•IPv6地址在分割为子网方面与IPv4相同。只要你记住表达地址的规则,就可以把混乱减少到最低的程度。