路由器工作原理
??前面说过网络层的转发功能(forwarding function),就是将分组从一台路由器的入链路传输到出链路。其中是根据编址和最长前缀匹配来进行具体操作。
??下图是通用路由器体系结构的视图。并标识了路由器的四个组成部分:输入端口、输出端口、交换结构、路由选择处理器。
????
输入端口
输入端口会执行几项关键功能。上图显示了输入端口的三个方框,代表输入端口的三个重要功能。下面从左到右描述。
第一个方框所表示功能的是,将一条输入的物理链路与路由器相连接。
中间方框所表示的功能是,对数据链路层的数据进行处理。
第三个方框所表示的功能是,查找数据分组要转发的输出端口。交换结构
将路由器的输入端口和输出端口相连接。这种交换结构完全被包含在路由器中,是一个路由器中的网络。输出端口
存储从交换结构接收到的分组,并通过执行必要的物理层和数据链路层功能在输入链路上传输这些分组。当一条链路是双向的时,输入端口和输出端口常在同一线路卡上成对出现。路由选择处理器
执行路由选择协议维护路由选择表以及连接的链路状态信息,并为路由器计算转发表。也可以执行网络管理功能。
路由器的功能
??下面我们较深入地介绍下路由器的具体功能。这里,假定一个数据报网络中的转发决定是基于分组的目的地址。
输入端口
????
上图是输入端口较为详细的处理视图。
在输入端口处,路由器使用转发表查找输出端口,使到达的分组能够通过转发结构到该输出端口。
转发表是由路由选择处理器计算和更新的,转发表的一份副本会通过独立总线(例如一个PCI接口)复制到线路卡,即放到每个输入端口处。(总线由路由器总视图的虚线所示)
有了副本后,转发决策就可以在每个输入端口做出,无需调用中央处理选择器,也就避免可集中式处理的瓶颈!
如果转发表已经存在,那我们需要关注快速查找的算法和对内存的访问时间。
交换结构
交换结构位于一台路由器的核心部位。正是通过这种交换结构,分组才能实际地从一个输入端口转发到一个输出端口。交换可以有多种方式,下面一一分讲。
经内存交换
最简单、最早的路由器是传统的计算机,在输入端口和输出端口之间的交换是在CPU(路由选择处理器)的直接控制下完成的直接控制下完成。
输入与输出端口的功能就像在传统操作系统中的I/O设备一样。一个分组到达输入端口时,该端口会
先通过中断方式向路由选择处理器发出信号。于是,该分组从输入端口处被复制到处理器内存中。
路由选择处理器提取出其目的地址,然后在转发表中查找适当的输出端口,并将该分组复制到输出端口的缓存中。
注意这里不能同时转发两个分组,因为共享系统总线一次仅能执行一个内存读/写.
经总线交换
在这种方法中,输入端口经一根共享总线将分组直接传送至输出端口,不需要路由选择处理器的干预。
按以下方式完成任务:
让输入端口为分组预先计划一个交换机内部标签(首部),指示本地输出端口,使该分组在总线上传递并传至输出端口。分组会被所有输出端口所接收,但是只有标签匹配的分组接收该分组,其余端口丢弃该分组。然后,内部标签去去掉。
这里,一次只有一个分组跨越总线,故路由器的交换带宽受总线速率的限制。
经互联网络交换
克服单一、共享式总线带宽限制的一种方法是,使用一个更复杂的互联网络。
如上图说示,是一个纵横式的交换结构。图中的交叉点被交换结构控制器所管理能够在任何时候开启或者关闭。
例如,若一个分组从A端口到达输出到Y端口。那么A到Y上面的交叉点都会被闭合,然后分组通过这条总线到达Y。如果此时有分组到达B要输出到X也是行的。但是,要注意,不同输入端口的分组同时被输出到同一输出端口,是不行的!需要等待。
输出端口
输出端口处理取出存放在输出端口内存中的分组并将其发送到输出链路上。这包括选择和取出排队的分组进行传输,执行所需的链路层个物理层传输功能。下图为输出端口处理视图。
??????
何处出现排队
通过对输入端口和输出端口的观察,在这儿两处都可能形成分组队列。当然,排队的位置和程度会取决于流量负载、交换结构的相对速率和线路速度。
一般来说在输入端口会形成微不足道的队列,分组会通过交换结构快速处理完毕(如果交换结构不能快速的处理的话在输入端口会形成队列,也可能形成线路前部阻塞(Head-Of-the-Line,HOL),多个输入端口的分组发送到同一输出端口,只有一个在分组在发送其余分组都要导致其余分组等待)。
在输出端口会形成长队列。如果众多分组是到达同一输出端口,那么排队数量会增长的很快,可能导致输出端口内容用尽,最终分组会被丢弃。
可以使用路由器缓存来吸收流量负载的波动
对缓存长度的经验方法是:缓存数量B = 平均往返时延RTT * 链路容量C
这是基于流量较少的TCP流的排队动态性分析得到。
当有大量TCP流(N)流过一条链路时:B = RTT * C/√N
分组调度程序选择分组发送
输出端口形成队列后,就需要一个分组调度程序来选择一个分组进行发送。这种选择原则可以是简单的先来先服务(FCFS)或者其他更复杂的调度原则,如加权公平排队(WFQ)。
丢弃分组
如果没有足够多的缓存来接收分组,就必须要做决定,丢弃分组(已排队的或者新到达的)腾出新的空间。
在某些情况下,在缓存填满前丢弃(或者在分组首部加标记)一个分组,以便向发送方提供一个拥塞信号。这种丢弃分组和标记策略统称为主动队列管理(Active Queue Management,AQM)算法 。其中随机早期检测算法(Random Early Detection,RED)算法是一种得到广泛研究和实现的AQM算法。
随机早期检测算法(Random Early Detection,RED)算法
在这个算法中,为输出队列长度维护着一个加权平均值。
如果平均队列长度小于最小阈值min,则当一个分组到达时,直接被纳入队列。
如果平均队列长度大于最大阈值max,则当一个分组到达时,该分组被标记或者被丢弃。
如果平均队列长度在[min,max],一个分组到达,该分组以某种概率被标记或丢弃,概率为平均队列长度,min,max的某种函数。
概率/标记函数在各种版本的RED中已实现。
《计算机网络自顶向下方法》学习笔记