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

IP层转发分组流程-计算机网络

时间:2023-11-09 理论教育 版权反馈
【摘要】:下面先用一个简单例子来说明路由器是怎样转发分组的。同理,若目的主机在网络4中,则路由器R2应把分组转发给IP地址为30.0.0.1的路由器R3。实际上,默认路由在主机发送IP数据报时往往更能显示出它的好处。图4-19路由器R1充当网络N1的默认路由器这里应当强调指出,在IP数据报的首部中没有地方可以用来指明“下一跳路由器的IP地址”。报告转发分组出错。

IP层转发分组流程-计算机网络

下面先用一个简单例子来说明路由器是怎样转发分组的。图4-18(a)所示的是一个路由表的简单例子。有4个A类网络通过3个路由器连接在一起。每一个网络上都可能有成千上万台主机(图中没有画出这些主机)。可以想象,若路由表指出到每一台主机应怎样转发,则所得出的路由表就会过于庞大(如果每一个网络有1万台主机,4个网络就有4万台主机,因而每一个路由表就有4万个项目,即4万行。每一行对应于一台主机)。但若路由表指出到某个网络应如何转发,则每个路由器中的路由表就只包含4个项目(即只有4行,每行对应于一个网络)。以路由器R2的路由表为例。由于R2同时连接在网络2和网络3上,因此只要目的主机在网络2或网络3上,都可通过接口0或1由路由器R2直接交付(当然还要利用ARP才能找到这些主机相应的硬件地址)。若目的主机在网络1中,则下一跳路由器应为R1,其IP地址为20.0.0.7。路由器R2和R1由于同时连接在网络2上,因此从路由器R2把分组转发到路由器R1是很容易的。同理,若目的主机在网络4中,则路由器R2应把分组转发给IP地址为30.0.0.1的路由器R3。应当注意到,图中的每一个路由器都有两个不同的IP地址。

可以把整个网络拓扑简化为如图4-18(b)所示。在简化图中,网络变成了一条链路,但每一个路由器旁边都注明其IP地址。使用这样的简化图,可以使人们不必关心某个网络内部的具体拓扑以及连接在该网络上有多少台主机,因为这些对于研究分组转发问题并没有什么关系。这样的简化图强调了在互联网上转发分组时,是从一个路由器转发到下一个路由器。总之,在路由表中,对每一条路由最主要的是目的网络地址和下一跳地址两个信息。

图4-18 路由表示意

(a)路由器R2的路由表;(b)把网络简化成一条链路

于是根据目的网络地址来确定下一跳路由器,这样做可得出以下结果:

(1)IP数据报最终一定可以找到目的主机所在目的网络上的路由器(可能要通过多次的间接交付)。

(2)只有到达最后一个路由器时,才试图向目的主机进行直接交付。

虽然互联网所有的分组转发都是基于目的主机所在的网络,但在大多数情况下都允许有这样的特例,即对特定的目的主机指明一个路由。这种路由叫作特定主机路由。采用特定主机路由可使网络管理人员更方便地控制网络和测试网络,同时也可在需要考虑某种安全问题时采用这种特定主机路由。在对网络的连接或路由表进行排错时,指明到某一台主机的特殊路由就十分有用。

路由器还可采用默认路由(Default Route)以减小路由表所占用的空间和搜索路由表所用的时间。这种转发方式在一个网络只有很少的对外连接时是很有用的。实际上,默认路由在主机发送IP数据报时往往更能显示出它的好处。前面已经讲过,主机在发送每一个IP数据报时都要查找自己的路由表。如果一台主机连接在一个小网络上,而这个网络只用一个路由器和互联网连接,那么在这种情况下使用默认路由是非常合适的。例如,在图4-19所示的互联网中,连接在网络N1上的任何一台主机中的路由表只需要3个项目。第一个项目就是到本网络主机的路由,其目的网络就是本网络N1,因此不需要路由器转发,而是直接交付。第二个项目是到网络N2的路由,对应的下一跳路由器是R2。第三个项目就是默认路由。只要目的网络是其他网络(不是网络N1或网络N2),就一律选择默认路由,把数据报先间接交付路由器R1,让R1再转发给互联网中的下一个路由器,一直转发到目的网络上的路由器,最后进行直接交付。在实际上的路由器中,图4-19所示路由表中的“直接”和“其他”的几个字符并没有出现在路由表中,而是被记为0.0.0.0。

图4-19 路由器R1充当网络N1的默认路由器

这里应当强调指出,在IP数据报的首部中没有地方可以用来指明“下一跳路由器的IP地址”。在IP数据报的首部写上的IP地址是源IP地址和目的IP地址,而没有中间经过的路由器的IP地址。既然IP数据报中没有下一跳路由器的IP地址,那么待转发的数据报又怎样能够找到下一跳路由器呢?(www.xing528.com)

当路由器收到一个待转发的数据报,再从路由表得出下一跳路由器的IP地址后,不是把这个地址填入IP数据报,而是送交数据链路层的网络接口软件。网络接口软件负责把下一跳路由器的IP地址转换成硬件地址(必须使用ARP),并将此硬件地址放在链路层的MAC帧的首部,然后根据这个硬件地址找到下一跳路由器。由此可见,当发送一连串的数据报时,上述的这种查找路由表、用ARP得到硬件地址、把硬件地址写入MAC帧的首部等过程,将不断地重复进行,这个过程增加了开销。

那么,能不能在路由表中不使用IP地址而直接使用硬件地址呢?不行。使用抽象的IP地址,本来就是为了隐蔽各种底层网络的复杂性而便于分析和研究问题,这样就不可避免地付出些代价,例如在选择路由时多了一些开销,但反过来,如果在路由表中直接使用硬件地址,那就会带来更多的麻烦。

综上所述,归纳出的分组转发算法如下:

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

(2)若N就是与此路由器直接相连的某个网络地址,则进行直接交付,不需要再经过其他的路由器,直接把数据报交付目的主机(这里包括把目的主机地址D转换为具体的硬件地址,把数据报封装为MAC帧,再发送此帧);否则就是间接交付,执行(3)。

(3)若路由表中有目的地址为D的特定主机路由,则把数据报传送给路由表中所指明的下一跳路由器;否则,执行(4)。

(4)若路由表中有到达网络N的路由,则把数据报传送给路由表中所指明的下一跳路由器;否则,执行(5)。

(5)若路由表中有一个默认路由,则把数据报传送给路由表中所指明的默认路由器;否则,执行(6)。

(6)报告转发分组出错。

这里再强调一下,路由表并没有给分组指明到某个网络的完整路径(即先经过哪一个路由器,然后再经过哪一个路由器,等等)。路由表指出,到某个网络应当先到某个路由器(即下一跳路由器),在到达下一跳路由器后,再继续查找其路由表,知道在下一步应当到哪个路由器。这样一步一步查找下去,直到最后到达目的网络。

可以用一个简单的比喻来说明查找路由表的作用。例如,一个人从家门口开车到机场,但没有地图,不知道应当走哪条路线。好在每个道路岔口都有一个警察可以询问。因此,每到一个岔口(相当于到了一个路由器),他就问:“到机场应当从哪个方向走?”(相当于查找路由表)。该警察既不指明到下一个岔口以后再应当如何走,也不指明还要经过几个岔口才到达机场。他仅仅指出下一个岔口的方向。其回答可能是:“向左转。”到了下一个岔口再询问到机场该往哪个方向走?其回答可能是:“直行。”这样,每到一个岔口,就询问下一步该如何走。因此,即使没有地图,但最终一定可以到达目的地——机场。

上面所讨论的是IP层怎样根据路由表的内容进行分组转发,而没有涉及路由表一开始如何建立以及路由表中的内容应如何进行更新,但是在进一步讨论路由选择之前,还要先介绍划分子网和构造超网这两个非常重要的概念。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈