首页 理论教育计算机网络技术:IP层转发分组流程

计算机网络技术:IP层转发分组流程

【摘要】:分组转发又称为分组交付,是指互联网中路由器转发IP 分组的物理传输和转发交付机制。当IP 分组到达与目的主机所在网络的路由器时,进行直接交付,随后分组到达目的主机,在中间路由器的存储转发过程结束。图6.8未划分子网的分组转发以路由器R2 的路由表为例,其路由表中的表项如图6.8所示。图6.9划分子网的分组转发路由器R1 收到这个分组后,就在其路由表中逐行寻找有无匹配的网络地址。

分组转发又称为分组交付,是指互联网路由器转发IP 分组的物理传输和转发交付机制。分组交付有两种:直接交付和间接交付。路由器根据IP 分组的源地址和目的地址是否属于同一个网络,以此来判断是直接交付还是间接交付。当源主机和目的主机处于同一个网络时,或者当目的路由器向目的主机传送分组时,分组被直接交付。如果源主机和目的主机不在同一个网络,那么分组就间接交付。在间接交付时,路由器从路由表中查找到下一跳路由器的IP 地址,再将分组转发给下一跳路由器。当IP 分组到达与目的主机所在网络的路由器时,进行直接交付,随后分组到达目的主机,在中间路由器的存储转发过程结束。下面讨论互联网中进行分组交付的三种分组转发机制。

(1)未划分子网的分组转发

下面通过一个例子说明路由器是如何进行分组转发的。

在如图6.7所示的网络拓扑中,有四个B 类网络通过三个路由器连接在一起。每个网络上都可能拥有成千台主机。为了使路由器中路由表的项数不至于太庞大,路由器通过各个网络的网络地址对路由表进行组织和管理。这样,针对图6.8 中的拓扑结构,每个路由器的路由表就只包含四个项目。

为了分组能够交付,路由表中的每项都应至少包括两部分信息:目的网络地址和下一跳地址。路由器根据目的网络地址进行项的匹配,根据项的下一跳交付数据。路由表中表项的内容可以由网络管理员根据情况静态配置,也可以根据动态路由选择算法动态生成。无论如何,路由器中路由表的表项体现了整个网络的拓扑结构。

图6.8 未划分子网的分组转发

以路由器R2 的路由表为例,其路由表中的表项如图6.8所示。由于R2 同时连接网络2和网络3,若目的主机在网络2 或网络3 上,则路由器均可通过其接口0 或接口1 直接交付;若目的主机在网络1 中,则下一跳路由器应为R1,相应端口的IP 地址为139.10.0.2。同理,若目的主机在网络4 中,则下一跳路由器应为R3,相应端口的IP 地址为149.10.0.1。

当然,实际路由器中路由表的项并非仅包括目的主机所在的网络及下一跳地址这两个内容,还会有其他(如标志、接口、使用情况等)信息,这里是为了简便地描述分组交付过程,只给出分组交付最重要的两部分内容。

虽然互联网中所有路由器的表项大多数都是基于目的主机所在的网络,但也可以对特定的目的主机指明一个路由,即特定主机路由。采用特定主机路由可使网络管理员更方便地控制网络和测试网络,也可以在需要考虑某种安全问题时采用特定主机路由。因此,在对网络连接或路由表排错时,采用特定主机路由是十分有用的。

为了减少路由表的占用空间和搜索时间,还可以用默认路由来代替所有具有相同“下一跳地址”的表项。当一个网络只有很少的对外连接时,使用默认路由相对简便很多。例如,一个小型网络只用一个路由器和互联网相连,无论这个小型网络中的哪个分组经过路由器出网,都要经过一个端口进行分组转发。这种情况下,采用默认路由是比较合理的。默认路由一般部署在网络边缘或者互联网出口,方便配置和管理。

未划分子网时,路由器转发分组的算法步骤为:

①从IP 数据报首部提取目的主机IP 地址D,得出目的主机的网络地址N。

②若N 是与此路由器直接相连的某个网络,则进行直接交付;否则就是间接交付,执行下一步。

③若路由表中有目的主机IP 地址为D 的特定主机路由,则进行特定主机路由的转发;否则,执行下一步。

④若路由表中有目的网络地址为N 的表项,则按照此表项指明的下一跳转发分组;否则,执行下一步。

⑤若路由表中有默认路由,则按照默认路由的项转发分组;否则,报告分组出错。

(2)划分子网的分组转发

在划分子网的情况下,只知道目的主机的IP 地址D,是不能真正得到目的主机所在的网络号的,这是因为划分子网时还要确定此目的主机所在的子网号,才能最终确定其网络号,这样就需要用到子网掩码。也就是说,子网掩码可以标识目的主机的子网号,是能够确定目的主机网络号的重要信息。这样,路由表中的表项应该包括至少三项内容:目的主机网络地址、子网掩码和下一跳路由器地址(或转发接口)。

如图6.9所示为划分子网时的拓扑结构。图中三个子网通过两个路由器互联,主机H1、H2、H3 分别连接在这三个子网上,各个子网由其子网掩码确定所在的网络号。假设主机H1要与主机H2 通信,则数据处理过程如下:首先,源主机H1 要判断所发送的分组是否在本子网中,因此,源主机H1 将本子网的子网掩码“255.255.255.128”与目的主机H2 的IP 地址“129.30.33.138”逐位相“与”,得出运算结果“129.30.33.128”,它不等于H1 的网络地址(129.30.33.0)。这说明H2 与H1 不在同一个子网上,H1 不能将分组直接交付,必须交给子网上的路由器R1 进行转发。

图6.9 划分子网的分组转发(www.chuimin.cn)

路由器R1 收到这个分组后,就在其路由表中逐行寻找有无匹配的网络地址。

R1 路由器取路由表的第一个表项的子网掩码“255.255.255.128”和收到的分组的目的地址“129.30.33.138”逐位相“与”,得结果“129.30.33.128”,然后和这个表项给出的网络地址“129.30.33.0”进行比较,结果不一致,需要继续查找第二个表项。路由器用同样的方法处理第二个表项,用其子网掩码“255.255.255.128 ”和该分组的目的地址“129.30.33.138”逐位相“与”,得结果“129.30.33.128”。这个结果和第二个表项的网络地址一致,则匹配成功。这说明第二个表项所标识的网络就是分组所要寻找的目的网络,路由器则不需要再继续查找,只需要将此分组从接口1 转发出去,进行直接交付到达主机H2。

划分子网时,路由器转发分组的算法步骤为:

①从IP 数据报首部提取目的主机IP 地址D。

②判断是否能够直接交付。对路由器直接相连的网络逐个进行检查;用各网络的子网掩码和D 逐位进行“与”运算,检查是否运算结果与相应的网络地址相匹配。若匹配成功,则将该分组直接交付;否则,进行间接交付,执行下一步。

③若路由表中有目的主机IP 地址为D 的特定主机路由,则进行特定主机路由的转发;否则,执行下一步。

④对路由表中的每一个表项,用其中的子网掩码和D 逐位进行“与”运算,其结果为N。若N 与该表项的目的网络地址相匹配,则由此表项转发分组;否则,执行下一步。

⑤若路由表中有默认路由,则按照默认路由的表项,转发分组;否则,报告分组出错。

(3)使用CIDR 的分组转发

使用CIDR 时路由器转发分组的算法与上述过程相似,只是此时IP 地址是由网络前缀和主机号两部分组成,因此,路由表中的表项内容也应该作相应的改动,即路由表的每一个表项内容为“网络前缀”和“下一跳地址”。另外,在查找路由表时会出现不止一个匹配结果,因而就存在如何从这些匹配表项中选择某一条进行路由的问题。

实际上,路由器应该从匹配结果中选择具有最长网络前缀的路由,即最长前缀匹配。这是因为网络前缀越长,对应网络的地址块就越小,所指明的路由就越具体。

例如,在如图6.10所示的拓扑结构中,某ISP 已拥有地址块202.117.64.0/18(相当于拥有64 个C 类网络),而某大学仅需要800 个IP 地址。在使用CIDR 时,ISP 可以给该大学分配一个地址块202.117.68.0/22,它包含1 024 个IP 地址,相当于4 个连续的C 类/24 地址块。在此基础上,这个大学还可以自主将所得地址块再划分给下属的各个系使用。

图6.10 使用CIDR 的网络

假设该大学有四个系,则进一步分配IP 地址为:一系地址块为202.117.68.0/23,包含的IP地址为512 个;二系地址块为202.117.70.0/24,包含的IP 地址为256 个;三系地址块为202.117.71.0/24,包含的IP 地址为256 个;四系地址块为202.117.71.128/25,包含的IP 地址为128 个。

按照一般的做法,在ISP 路由器的路由表中,有该大学的一个表项,负责将发送到该大学的数据报都传送至该大学,然后再下送到各个系。但是,现假设大学下属的四系希望将发往该系的数据报直达而不经过大学的路由器转发,同时又要求不改变原来使用的IP 地址块。为了达到此要求,在ISP 路由器的路由表中应包含该大学的两个表项,即202.117.68.0/22(大学)和202.117.71.128/25(四系)。

现假设ISP 路由器收到的一个数据报,其目的IP 地址D =202.117.71.130。此时,将D与路由表中的这两个表项的地址掩码进行逐位“与”运算,得结果如下:

D 与11111111 11111111 11111100 00000000 逐位相“与”,得207.117.68.0/22,说明D 与该大学的网络地址是匹配的。

D 与11111111 11111111 11111111 10000000 逐位“与”,得207.117.71.128/25,说明D 与四系的网络地址是匹配的。

可见,同一个IP 地址在路由表中找到两个网络相匹配。根据最长前缀匹配原则,选择后者,即将该数据报传送给四系的地址块。

使用CIDR 后,由于要寻找最长的前缀匹配,使得路由表的查找过程更加复杂,尤其是路由表的项数很大时,将大大增加查表的时间。为了缩短查表时间,可以在路由表中采用更好的数据结构存储表项,从而进一步寻求性能更优的查找算法。例如,通常将使用CIDR 的路由表存放在一种层次的数据结构中,形成线索二叉树,进一步提高查找效率