5.1.2 路由器的工作机制
下面通过介绍一个封装着IP报文的数据帧经过路由器进行路由转发的过程来详细地介绍路由器的工作机制,图5-2给出了路由器对流入的帧进行处理的工作流程,具体步骤如下:
1.接收帧,获取IP报文
路由器的一个重要功能是对进入其端口的帧根据路由表信息进行转发。当封装有IP报文的数据帧通过某种物理介质达到路由器的某个端口时,路由器底层驱动程序按照相应的数据链路层协议接收该帧,并去除帧的头部,得到IP报文,然后将该IP报文交给IP层协议作进一步处理。
图5-2 路由器的工作流程
2.对IP报文头部进行合法性验证
在路由器对IP报文进行转发之前,必须先对其头部进行合法性验证,以确保被处理的IP报文是有意义的。对IP报文头部的合法性检查主要包括以下几方面的内容:
● 接收的链路层帧长度必须足够大,以容纳最小的合法的IP报文(20字节)。
● IP报文校验和必须正确。
● IP报文的IP协议版本必须为4。
● IP报文的报头长度必须足够大,以容纳最小的合法IP报文(20字节)。
● IP报文的总长度也必须足够大,以容纳IP报文头部。
如果在对IP报文头部的合法性检查中发现某个IP报文不符合以上条件,路由器将丢弃该IP报文,并进行错误统计。
3.IP报文选项的处理
路由器在对IP报文进行处理的过程中,需要对IP报文中的部分选项进行处理,以记录相关的信息,这些选项主要有:
● 路由选项。路由器将自己的IP地址记录到IP报文中的路由选项数据域中。
● 时间戳选项。路由器将自己的IP地址和当前的系统时间写入IP报文中的时间戳选项中。
● 源路由选项。路由器先写入自己的IP地址,该选项还要在后面作进一步处理。
4.IP数据包本地提交和转发
当路由器接收到一个IP报文时,必须决定应该将该IP报文进行本地提交还是向前转发。向前转发操作是将接收到的IP报文从路由器的某个端口转发出去,而不对IP报文进行更高层次的处理,路由器对大部分IP报文都进行向前转发操作。本地提交操作实际上是将IP报文交给路由器的高层协议进行进一步处理,而不将其从路由器的任何端口转发出去,对路由器进行访问的IP报文一般都进行本地提交。
对IP报文进行本地提交或向前转发操作的选择时,主要遵循以下几种规则:
● 当IP报文中有一个源路由选项时,该IP报文将被向前转发而不进行本地提交。
● 当IP报文中的目的地址或其非转发组播地址中的某一个地址与路由器的某个端口地址相符时,将对该IP报文进行本地提交。
● 当IP报文中的目的地址是一个广播地址,或者是一个既要向前转发又要本地提交的组播地址时,将同时对该IP报文进行本地提交和向前转发两种操作。
5.转发寻径
当路由器决定对一个IP报文进行转发时,需要选择下一个路由器的地址,实际上就是选择应该将该IP报文从该路由器的哪个端口转发出去。如果该IP报文中含有源路由选项且验证其合法时,那么下一个路由器的地址取自其地址列表中的相应项;否则,路由器将根据目的网络地址查找路由器的路由表,得到一个候选路由集。如果候选路由集为空,那么将根据路由器中是否设置了缺省路由来决定对报文的处理,在设置了缺省路由的情况下,将报文根据缺省路由进行转发,在没有设置缺省路由的情况下,该报文将被丢弃。如果候选路由集中含有多个路由时,路由器将根据一定的路由修剪算法去除多余的路由而得到一个最佳路由。在众多的路由修剪算法中,最为常用的是最长匹配法。该算法的主要思想是选择与目的IP地址从高到低匹配位最多的路由地址,例如,某IP报文的目的地址为142.10.4.63,候选路由集中包含了142.10.0.0和142.10.4.0两个网络的路由,那么根据最长匹配法将选择142.10.4.0作为目的IP地址为142.10.4.63的报文的最佳路由。
6.转发验证
在路由器对IP报文进行转发之前,路由器通常还会对报文进行有所选择的转发验证工作,以确定是否对其进行转发。这些转发验证工作主要包括:对IP报文的源地址和目的地址进行合法性检测,丢弃含有非法地址的报文;丢弃非法的广播和组播报文;依据访问控制列表对IP报文的转发进行检验,如果访问控制列表不允许转发某个报文,则将丢弃该报文。只有通过了这些转发验证的报文才能够由路由器进行转发。
7.TTL域的处理
在IP报文的头部,有一个被称为TTL(Time To Live)的域,该域用于限制IP报文的生存时间,其长度为一个字节,也就是说TTL域的取值范围为0~255。
路由器对IP报文中的TTL域的处理主要有两方面:其一,当IP报文经过每个路由器时,路由器将TTL值作减1处理;其二,如果TTL值减1后结果等于0,那么路由器将丢弃该IP报文,并且在目的地址不为组播地址的情况下,向该IP报文的源站点发送一个ICM P超时控制报文。利用这种机制,可以防止由于存在路由回路而产生过多的重复报文。
8.数据帧的分段
由于路由器是用于连接不同类型网络的设备,不同类型的物理网络对帧的传输有不同的要求,其中最为重要的是每种类型的物理网络对传输的帧都有长度上的限制,即规定了最大传输单元M TU(Maximum Transfer Unit),要求网络中传输的帧的长度不能超过其M TU值。因此,当路由器在不同类型的网络之间转发数据帧时,必须考虑到M TU的限制。如果发现长度超过M TU值的数据帧,那么路由器将对其进行分段处理。
路由器对数据帧进行分段时,要遵循提高网络传输效率、节省带宽的原则。当前Internet中通常使用的数据帧分段技术有:
● 第一个分段的长度与M TU值一致,其他分段的长度则是比M TU小的一个平均值。
● 除了最后一个分段的长度小于等于M TU值以外,其他分段的长度均等于M TU值。
● 将数据帧拆分成一个个长度不超过576个字节的分段,这样在通过后面的路由器时,再也不需要对其进行新的分段,减轻了路由器的计算负担,但会增加目的主机对分段进行重组的负担,也增加了网络的传输负荷。
9.链路层寻址
经过前面一系列的操作后,路由器将IP报文交给某个端口进行最后的发送。发送IP报文时,需要进行一些数据链路层的操作。以以太网为例,路由器端口需要将IP报文封装在以太网帧内,在帧的头部需要填入源M AC地址和目的M AC地址。源M AC地址就是路由器端口的M AC地址,可以直接从端口的硬件中读取,而目的M AC地址则需要通过ARP协议来获得。数据帧组织完成后就可以由数据链路层交给路由器端口的物理层进行发送了。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。