图1 路由器的基本组成
输入端口是物理链路和输入包的进口处。端口通常由线卡提供,一块线卡一般支持4、8或16个端口,一个输入端口具有许多功能。第一个功能是进行数据链路层的封装和解封装。第二个功能是在转发表中查找输入包目的地址从而决定目的端口(称为路由查找),路由查找可以使用一般的硬件来实现,或者通过在每块线卡上嵌入一个微处理器来完成。第三,为了提供QoS(服务质量),端口要对收到的数据包进行业务分类,分成几个预定义的服务级别。第四,端口可能需要运行诸如SLIP(串行线网际协议)和PPP(点对点协议)这样的数据链路级协议或者诸如PPTP(点对点隧道协议)这样的网络级协议。一旦路由查找完成,必须用交换开关将包送到其输出端口。如果路由器是输入端加队列的,则有几个输入端共享同一个交换开关。这样输入端口的最后一项功能是参加对公共资源(如交换开关)的仲裁协议。普通路由器中该部分的功能完全由路由器的中央处理器来执行,制约了数据包的转发速率(每秒几千到几万个数据包)。高端路由器中普遍实现了分布式硬件处理,接口部分有强大的CPU处理器和大容量的高速缓存,使接口数据速率达到10Gbps,满足了高速骨干网络的传输要求。
路由器的转发机制对路由器的性能影响很大,常见的转发方式有:进程转发、快速转发、优化转发、分布式快速转发。进程转发将数据包从接口缓存拷贝到处理器的缓存中进行处理,先查看路由表再查看ARP表,重新封装数据包后将数据包拷贝到接口缓存中准备传送出去,两次查表和拷贝数据极大的占用CPU的处理时间,所以这是最慢的交换方式,只在低档路由器中使用。快速交换将两次查表的结果作了缓存,无需拷贝数据,所以CPU处理数据包的时间缩短了。优化交换在快速交换的基础上略作改进,将缓存表的数据结构作了改变,用深度为4的256叉树代替了深度为32的2叉树或哈希表(hash),CPU的查找时间进一步缩短。这两种转发方式在中高档路由器中普遍加以应用。在骨干路由器中由于路由表条目的成倍增加,路由表或ARP表的任何变化都会引起大部分路由缓冲失效,以前的交换方式都不再适用,最新的交换方式是分布式快速交换,它在每个接口处理板上构建一个镜像(mirror)路由表和MAC地址表相结合的转发表,该表是深度为4的256叉树,但每个节点的数据部分是指向另一个称为邻接表的指针,邻接表中含有路由器成帧所需要的全部信息。这种结构使得转发表完全由路由表和ARP表来同步更新,本身不再需要额外的老化进程,克服了其它交换方式需要不断对缓存表进行老化的缺陷。
交换结构最常见的有总线型、共享内存型、Cross-bar空分结构型。总线型结构最简单,所有输入和输出接口挂在一个总线上,同一时间只有两个接口通过总线交换数据。其缺点是其交换容量受限于总线的容量以及为共享总线仲裁所带来的额外开销。在调度共享数据传输通道上必须花费一定的开销,而且总线带宽的扩展受到限制,制约了交换容量的扩张,一般在中档路由器中使用这种结构。共享内存型结构中,进来的包被存贮在共享存贮器中,所交换的仅是包的指针,这提高了交换容量,但它受限于内存的访问速度和存储器的管理效率,尽管存贮器容量每18个月能够翻一番,但存贮器的存取时间每年仅降低5%,这是共享存贮器交换开关的一个固有限制。共享内存型结构在早期的中低档路由器中普遍应用。Cross-bar空分结构相当于多条并行工作的总线,具有N×N个交叉点的交叉开关可以被认为具有2N条总线。如果一个交叉是闭合,输入总线上的数据在输出总线上可用,否则不可用。对流经它的数据不断进行开关切换,可见开关速度决定了交换容量,随着各种高速器件的不断涌现,这种结构的交换容量普遍达到几十Gbps以上,成为目前高端路由器和交换机的首选交换结构。
路由计算或处理部分主要是运行动态路由协议。接收和发送路由信息,计算出路由表,为数据包的转发提供依据。各种档次的路由器的路由表条目的大小存在很大差异,从几千条到几百万条不等,因此高端路由器的路由表的构造对路由查找速度影响很大,其路由表的数据结构常采用二叉树的形式,查找与更新的速度都比较快。
输出端口在包被发送到输出链路之前对包存贮,可以实现复杂的调度算法以支持优先等级要求。与输入端口一样,输出端口同样要能支持数据链路层的封装和解封装,以及许多较高级协议。
一般而言,路由器对一个数据包的交换要经过一系列的复杂处理,主要有以下几个方面:
1)压缩和解压缩
2)加密和解密
3)用输入/输出访问列表进行报文过滤
4)输入速率限制
5)进行网络地址翻译(NAT)
6)处理影响本报文的任何策略路由
7)应用防火墙特性对包进行检查
8)处理Web页缓冲的重定向
9)物理广播处理,如帮助性地址(ip help address)
10)利用启用的QoS机制对数据包排队
11)TTL值的处理
12)处理IP头部中的任选项
13)检查数据包的完整性
1、进程:由执行特定任务的独立线程和相关的数据组成,如系统配置维护的telnet守护进程、客户端进程,FTP进程、TFTP进程,SNMP进程,各种协议进程:IP、TCP、UDP、RIP、OSPF、BGP、ARP、ICMP、IGMP,其它有加解密进程、报文过滤进程、NAT进程等。
2、内核:为系统的其它部分提供基本的系统服务,如存储器管理、进程调度、定时器和时钟管理。它为进程提供了硬件(CPU和存储器)资源的管理。
3、报文缓冲:用来存放将要被交换的报文。
4、设备驱动程序:控制网络接口硬件设备及其它外围设备(如Flash)。设备驱动程序接口位于进程、内核、硬件之间,同时与交换控制软件有接口。
5、交换控制软件:根据转发方式控制报文的交换,在高端线速路由器中该部分功能由硬件实现。
路由器工作在OSI参考模型第三层——网络层,是一种实现网络服务的设备,它以不同的速度为大量链路和子网提供接口。路由器是有源的且具有智能的网络节点,从而能够参与网络管理。
被动路由协议(routed protocols):指任何在网络层地址中提供了足够信息的网络协议,该网络协议允许将数据包从一个主机转发到以寻址方案为基础的另一个主机。被动路由协议定义了数据包内各字段的格式和用途。数据包一般都从一个端系统传动到另一个端系统。IP协议就是一个被动路由协议。
路由选择协议(routing protocol):通过提供共享路由选择信息机制来支持被动路由协议。路由选择协议消息在路由器之间传送。路由选择协议允许路由器与其他路由器通信来修改和维护路由选择表。路由选择协议有:RIP、OSPF、IGRP等。如图4-3说明了被动路由协议和路由选择协议的关系。
图3 被动路由协议用于引导信息,路由选择协议用在路由器之间维护路由表
2、网络层协议的工作
当一台主机上的应用需要向另一个网络上的目的主机发送数据包时,路由器的一个接口会收到一个数据链路帧。网络层进程通过检查数据包报头来确定目的网络,然后查询与网络出口的接口相联系的路由表,如图4。
数据包重新封装在选定接口的数据链路帧中,排队等待分发到路径的下一站路由器(hop)。
在数据包通过另一个路由器交换时都要发生这个过程,在与包含目的主机的网络相连接的路由器中,数据包再次封装成目的LAN数据链路帧的类型并被发送到目的主机。
图4 每个路由器都为其上层功能提供其各种服务
3、静态路由、动态路由、缺省路由
由系统管理员事先设置好固定的路由称之为静态(static)路由,一般是在系统安装时就根据网络的配置情况预先设定的,它不会随未来网络拓扑结构的改变而改变。此时网络的可达性不依赖于网络自身的存在和状态,不管目的网络存在或不存在,静态路由都会保存在路由转发表中,IP业务量仍然向着目的地发送。静态路由允许互联网管理员指定在有限的划分中哪些是可以公开的。当一个网络只能通过一个路径到达时,对这个网络用静态路由就足够了,这种划分称为存根(stub)网络。对一个存根网络配置
静态路由选择,避免了动态路由选择的开销。如图5显示了静态路由的用途
图5 静态路由
动态(Dynamic)路由是路由器根据网络系统的运行情况而自动调整的路由。路由器根据路由选择协议(Routing Protocol)提供的功能,自动学习和记忆网络运行情况,在需要时自动计算数据传输的最佳路径。此时网络可达性依赖于网络的存在和状态。如果一个目的地不存在,则路由会从路由转发表中消失,IP包业务量不会向该目的地发送。使用动态路由可以很好的适应拓扑结构的变化。它可以在网络的不同路径间改变流量方向。
缺省路由是一个路由表入口,用来指明一些在下一跳没有明确地列于路由表中的帧。缺省路由可以说是管理员的静态配置的结果。如图6显示了缺省路由的用途
图6缺省路由
度量的计算可以基于路径的一个特征,或是将几个特征结合起来计算出更复杂的度量。如图所示,用于度量计算的几个路径特征。路由器中最常用的度量如下:
1)跳数(hop count):数据包到达目的必须通过的路由器数。跳数越少,该路由越好。路径长被用于描述到达目的的跳数;
2)带宽(Bandwidth):链路的数据能力。如:一个10Mb/s的T1链路优于64kb/s的专线;
3)时延(delay):把数据包从源送到目的地所需的时间;
4)负荷(load):网络资源如路由器和链路上的活动数量;
5)可靠性(reliability):指每条网络链路上的差错率;
6)滴答数(Ticks):用IBM PC的时钟滴答(大约55ms)计数的数据链路延迟;
7)开销(cost):是一个变化的值,通常基于带宽、花费的钱数或其他由网络管理员指定的单位。