5.2.11 IP分组的转发(二)IP分组转发算法
我们前面已经了解了路由器的结构以及直接交付和间接交付的概念,明白了路由器会根据路由协议生成路由表再根据路由表生成转发表,当路由器收到一个待转发的IP分组以后,会根据分组的转发算法,在转发表中为该分组寻找合适的出路。实际上在讨论路由选择的原理时,往往不去区分路由表和转发表的区别,在学习IP分组转发算法前我们先来认识路由表的结构。
一、路由表结构
路由表中,每一行成为一个路由表项,通常是由4列组成。分别是目的网络地址,子网掩码,下一跳路由器IP地址,接口如表
路由表项 | 目的网络地址 | 子网掩码 | 下一跳路由器IP地址 | 接口 |
---|---|---|---|---|
作用 | 指目的主机所在网络的网络地址 | 要想到达第一列对应的目的网络,必须要把该分组转发给的路由器的IP地址,如果是直接交付,则可以用一横杠表示。 | 要想把IP分组送达给该行第三列的下一跳路由器需要通过本路由器中对应某个接口的IP地址。指示通过本路由器的哪个接口送达给下一跳。 |
在明白了路由表结构以后我们就来学习IP分组的转发算法。
二、IP分组的转发算法
当一台路由器收到了一条待转发的IP分组以后,通过该算法为该分组如何去寻找合适的转发路径。算法如下
- 从待转发的IP分组首部中取出目的IP地址;
- 对路由表中的每一行都进行以下重复操作即**把取出的目的IP地址与路由表表项中子网掩码按位相“与”,**这里将结果设为N,这就像我们编程中的一个循环操作。
- 循环结束的判断条件是,结果N与第一列对应的目的网络地址是否相等,如果是相等就是找到了匹配项就跳出循环
- 跳出循环后就查看路由表项中的下一跳路由器IP地址,如果下一跳路由器IP地址指明的是直接交付,那就按照直接交付的方式送达给目的主机,否则就按照该行所指明的下一跳路由器的IP地址进行转发。
- 如果结果N与目的网络地址不匹配,从头到最后一行都检查过没有找到匹配项的情况下,对于路由器来说会把该IP分组丢弃,同时向被丢弃IP分组的源站发送一个ICMP的目的不可达的差错报告报文。
这里的算法相对好理解,根本原理还是目的主机的IP地址和每行对应的子网掩码相与,如果等于该行第一列的目的主机的IP地址,就相当于说找到了匹配项,就按照该行下一跳路由器进行转发,当然如果是下一跳没有的话就表明是直接交付。
三、两种特殊的路由
在日常业务中除了这种普通的到达目的网络地址的路由以外,还有两种特殊的路由即特定主机路由和默认路由。
(一)特定主机路由
特定主机路由:指出现在路由表第一列的不是一个网络地址,而是某台主机的IP地址。比如,在调试网络连接或路由表时,可能会需要为单个主机指定一条特殊路由。所以,特定主机路由主要用于网络测试,或者出于安全的考虑。
这里值得思考的是:对于特定主机路由来说,在路由表中应该如何表示呢?
根据特定主机路由的定义我们知道,路由表中第一列是一台主机的IP地址,就说明目的主机IP地址和第一列对应的表示特定主机的32位IP地址都要相同才算是匹配成功,也就是说该行对应的子网掩码应该是255.255.255.255,也就是全1的子网掩码。
(二)默认路由
我们来看另外一种情况,如果互联网中包含的物理网络很多,要想让路由表包含所有网络就会导致路由表表项数量变得很多从而使路由查找起来速度很慢,所以就引入了默认路由。
默认路由:是指如果互联网包含的物理网络很多,让路由表包含所有网络将使路由表表项数很多,查找起来速度较慢。于是把多个下一跳相同的表项合并成一个表项,即默认路由。
同理我们同样要思考的问题是:对于默认路由来说,在路由表中如何表示呢?
这里我们需要注意的是默认路由通常放在路由表的最后一行,并且该行对应的子网掩码为0.0.0.0,目的网络地址为0.0.0.0。如此以来在前面都没有匹配项的情况下无论目的IP地址是多少,因为目的地址要与子网掩码全0相与,最终的结果都是全零,也就是说肯定能够和该行匹配成功。
四、示例
例:某网络拓扑如图所示,从图中我们可以看出该网络拓扑中有两个局域网,由两台路由器,其中路由器R1有两个以太网口,分别是E1和E2连接了两个局域网,R1还有一个广域网的接口L0接了路由器R2,路由器R2的广域网接口L1接入了互联网,此外还有一个以太网口E0连接到了域名解析服务器DNS上,每个接口对应的IP地址都已经给出,对于局域网1、局域网2和路由器R1相连的两个以太网口E1和E2。
要求
-
将IP地址空间202.118.1.0/24划分为2个子网,分别分配给局域网1和局域网2,每个局域网需要分配的地址数据不少于120个。请给出子网划分结果。
分析:因为 2 7 − 2 = 126 > 120 2^7-2=126>120 27−2=126>120,所以每个地址块中主机号部分为7为,也就是子网好部分只能是1位。所以每个地址块的网络前缀长度为24+1=25。
答案:局域网1:202.118.1.00000000/25即202.118.1.0/25
局域网2:202.118.1.10000000/25即202.118.1.128/25
-
请写出R1的路由表,使其明确到局域网1、局域网2、域名服务器的路由和互联网的路由。
我们知道路由表结构如下,我们应对应网络拓扑结构填写路由表,按照例题中的要求是要写出四条路由
-
到局域网1的路由,从网络拓扑我们可以看出路由器R1到达局域网1属于直接交付,因为他他的以太网口和局域网1相连,从上个例题我们已经得到了局域网1和局域网2的网络地址,所以对于局域网1来说,我们刚刚分配给它的地址块是202.118.1.0/25所以其对应的子网掩码就是25个1和7个0,也就是255.255.255.128,因为对于路由器R1来说到达局域网1是直接交付,所以就没哟下一跳,从拓扑图中我们也能看出通过路由器R1的E1端口直接交付给局域网1。这里需要注意的是接口处应该写的是IP地址,但是拓扑图中没有给出,所以这里就直接用E1表示。
-
通过到局域网1的路由可以得出局域网2的路由。
-
到达域名服务器,这里我们知道域名服务器是一台主机也不是一个目的网络,很显然这是刚才我们提到的一个比较特殊的路由,即特定主机路由,也就是路由表中第三行我们需要填写的是一个到达特定主机的路由。所以第一列写的就是该主机的IP地址,子网掩码就是全1,而要想到达域名服务器,对路由器R1来说就必须把分组送交给R2右边的L0接口,所以下一跳路由器的IP地址当然就是R2路由器的L0接口,接口就要填写本路由器的连接接口,即R1的L0接口,也就是其IP地址。当然这里我们也注意到下一跳路由器IP地址跟本路由器的接口IP地址二者应该在同一网段上只有如此他们才能进行通信。
-
如何到达互联网,这里很多人就会有疑问互联网的网络地址,这个问题就是隐含着让我们填写默认路由,因为对于路由器R1来说要么到达局域网1,要么到达局域网2,要么到达域名服务器,剩下的通信都是要到达互联网,所以第四条就应该填写默认路由,这里需要强调的是,默认路由的目的网络IP地址和子网掩码都是全0,下一跳路由器IP地址、接口与到达域名解析服务器是一致的。
目的网络IP地址 子网掩码 下一跳路由IP地址 端口 202.118.1.0 255.255.255.128 — E1 202.118.1.128 255.255.255.128 — E2 202.118.3.2 255.255.255.255 202.118.2.2 202.118.2.1 0.0.0.0 0.0.0.0 202.118.2.2 202.118.2.1
-