『TCP/IP详解——卷一:协议』读书笔记——09
2013-08-22 12:42:26
- 3.4 子网寻址
子网编码:不是把IP地址看成由单纯的网络号和主机号组成,我们把主机号再分成子网号和主机号。这样做是因为,A、B类地址为主机号分配了太多的空间,可分别容纳的主机数为224-2和216-2(由于全0和全1的主机号都是无效的,所以我们把总数减2)。但是这么多主机肯定用不完,所以我们把这个蛋糕再切小一点。这种新的分配方法由管理员来定。
上图是一个B类网络地址,原本16位主机号被分成了8位子网号和8位主机号,于是就有了254个子网和254台主机。但是我们并不要求一定要按字节(8 + 8)来分配,我们可以按位随意分配(但是子网号和主机号都不能少于2位)。
Q:30个C类地址,和包含30个子网的B类地址那个比较好用呢?
A:我们不说那一个好用,各有各的优点。但是相比于30个C类地址,分成子网后的B类地址,肯定会比部分之前损失一些可使用的地址(分网后主机号全0和全1的不能用了)。但子网对外部路由器来说隐蔽了内部网络组织的细节(外网不知到内网是怎么分的,因为外网的数据报是先发给网关gateway,然后网关解析子网地址,发给相应的主机),这对信息安全有一定的意义。其次,子网划分缩减了路由表的规模(在10.8小结,介绍用C类地址也可以所见路由表的技术)。例如,B类地址140.252被分成了若干子网的事实对于所有子网以外Internet路由器都是透明的。为了到达IP地址开始部分为140.252的主机,外部路由器只需要知道通往IP地址140.252.104.1(gateway)的路径。这就是说,对于网络140.252只需一个路由表目,而如果采用30个C类地址,则需要30个路由表目。
(粗线——以太网,虚线——点对点链路)
如上图所示:一份来自Internet的数据报到达gateway,它的目的地值是140.252.57.1。路由器gateway需要知道子网号是57,然后把它送到kpno。同样,kpno必须把数据报送到R55,最后由R55把它送到R57。
- 3.5 子网掩码
Q:主机是怎么知道自己的IP地址的?
A:任何主机在开机的时候都会进行‘指定主机IP地址’的工作,大多数系统把IP地址存在一个磁盘文件里供引导时读用。在第5章中,我们会介绍对于一个没有磁盘保存这种文件的系统是如何在引导时知道自己的IP地址的。
子网掩码:除了IP地址之外,主机还需知道有多少比特用于子网号及多少比特用于主机号。这是在引导过程中通过子网掩码来确定的。子网掩码是一个32bit的值,其中值为1的比特留给网络号和子网号,为0的比特留给主机号。子网掩码经常采用十六进制来表示,特别是当界限不是一个字节时。
给定IP地址和子网掩码后,主机就可以确定IP数据报的目的是:(1)本子网上的主机;(2)本网络中其他子网中的主机;(3)其他网路的主机。如果知道本机的IP地址,那么就知道它是否为A类、B类或C类地址(从IP地址的高位可以得知),也就知道网络号和子网号之间的分界线。而根据子网掩码就可知道子网号与主机号之间的分界线。下图为举例:
- 3.6 特殊情况的IP地址
上图中:0表示全0,-1表示全1,netid、subnetid和hostid分别表示不为全0或全1的对应字段。子网号栏为空表示该地址没有进行子网划分。
我们把表分成3部分:头两项为特殊的源地址、中间项为环回地址、最后四项为广播地址。
源地址:网络号为0,是主机在用BOOTP协议确定本机IP地址过程中的初始地址。
广播地址:12章会讲~
- 3.7 一个子网的例子
这个例子是文中采用的子网,以及如何使用两个不同的子网掩码。本例中,数据报经过140.252.104.1的路由器传进来,到经过140.252.1的子网,进入我们例子中要讨论的140.252.13的子网。但是这个子网中包含两个网络——以太网和SLIP子网,这样的话原来的子网划分就无法区分这两个网络,为了不让主机跨越不同的网络就要使用不同的子网号,我们的解决方法是将子网号从8位扩充为11位,把主机号减为5位。这就叫做变长子网,我们的第二个子网掩码是255.255.255.224。
11位子网号中的前8bit始终是13。在剩下的3bit中,我们用二进制001表示以太网,010表示点对点SLIP链路。这个变长子网掩码在140.252网络中不会给其他主机和路由器带来问题——只要目的是子网140.252.13的所有数据报都传给路由器sun(IP地址是140.252.1.29),如上图所示。如果sun知道子网13中的主机有11bit子网号,那么一切都好办了。请看下表:
我们看到sun和bsdi都有两个IP地址,因为它们既是主机又是路由器,所以各有两个接口。这个表中的最后一行是图3-10中的广播地址140.252.13.63:它根据以太网子网号(140.252.13.32)和图3-11中的低5位置1(16+8+4+2+1=31)得来的,这个地址被称作以子网为目的的广播地址(subnet-directed broadcast address)。