前面说过网络层的转发功能(forwarding function),就是将分组从一台路由器的入链路传输到出链路。其中是根据编址和最长前缀匹配来进行具体操做。算法
下图是通用路由器体系结构的视图。并标识了路由器的四个组成部分:输入端口、输出端口、交换结构、路由选择处理器。缓存
输入端口
输入端口会执行几项关键功能。上图显示了输入端口的三个方框,表明输入端口的三个重要功能。下面从左到右描述。
第一个方框所表示功能的是,将一条输入的物理链路与路由器相链接。
中间方框所表示的功能是,对数据链路层的数据进行处理。
第三个方框所表示的功能是,查找数据分组要转发的输出端口。
网络
交换结构
将路由器的输入端口和输出端口相链接。这种交换结构彻底被包含在路由器中,是一个路由器中的网络。dom
输出端口
存储从交换结构接收到的分组,并经过执行必要的物理层和数据链路层功能在输入链路上传输这些分组。当一条链路是双向的时,输入端口和输出端口常在同一线路卡上成对出现。函数
路由选择处理器
执行路由选择协议维护路由选择表以及链接的链路状态信息,并为路由器计算转发表。也能够执行网络管理功能。学习
下面咱们较深刻地介绍下路由器的具体功能。这里,假定一个数据报网络中的转发决定是基于分组的目的地址。操作系统
上图是输入端口较为详细的处理视图。
在输入端口处,路由器使用转发表查找输出端口,使到达的分组可以经过转发结构到该输出端口。
计算机网络
转发表是由路由选择处理器计算和更新的,转发表的一份副本会经过独立总线(例如一个PCI接口)复制到线路卡,即放到每一个输入端口处。(总线由路由器总视图的虚线所示)
blog
有了副本后,转发决策就能够在每一个输入端口作出,无需调用中央处理选择器,也就避免可集中式处理的瓶颈!接口
若是转发表已经存在,那咱们须要关注快速查找的算法和对内存的访问时间。
交换结构位于一台路由器的核心部位。正是经过这种交换结构,分组才能实际地从一个输入端口转发到一个输出端口。交换能够有多种方式,下面一一分讲。
最简单、最先的路由器是传统的计算机,在输入端口和输出端口之间的交换是在CPU(路由选择处理器)的直接控制下完成的直接控制下完成。
输入与输出端口的功能就像在传统操做系统中的I/O设备同样。一个分组到达输入端口时,该端口会
先经过中断方式向路由选择处理器发出信号。因而,该分组从输入端口处被复制处处理器内存中。
路由选择处理器提取出其目的地址,而后在转发表中查找适当的输出端口,并将该分组复制到输出端口的缓存中。
注意这里不能同时转发两个分组,由于共享系统总线一次仅能执行一个内存读/写.
在这种方法中,输入端口经一根共享总线将分组直接传送至输出端口,不须要路由选择处理器的干预。
按如下方式完成任务:
让输入端口为分组预先计划一个交换机内部标签(首部),指示本地输出端口,使该分组在总线上传递并传至输出端口。分组会被全部输出端口所接收,可是只有标签匹配的分组接收该分组,其他端口丢弃该分组。而后,内部标签去去掉。
这里,一次只有一个分组跨越总线,故路由器的交换带宽受总线速率的限制。
克服单1、共享式总线带宽限制的一种方法是,使用一个更复杂的互联网络。
如上图说示,是一个纵横式的交换结构。图中的交叉点被交换结构控制器所管理可以在任什么时候候开启或者关闭。
例如,若一个分组从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算法。
在这个算法中,为输出队列长度维护着一个加权平均值。
若是平均队列长度小于最小阈值min,则当一个分组到达时,直接被归入队列。
若是平均队列长度大于最大阈值max,则当一个分组到达时,该分组被标记或者被丢弃。
若是平均队列长度在[min,max],一个分组到达,该分组以某种几率被标记或丢弃,几率为平均队列长度,min,max的某种函数。
几率/标记函数在各类版本的RED中已实现。
《计算机网络自顶向下方法》学习笔记