上一个更新的博文概述了网络层中的数据平面和控制平面,转发与路由选择之间的重要区别以及网络层的服务于功能,我们将注意力转移到网络层的转发功能,即实际将分组从一台路由器的入链路传送到适当的出链路.
下图显示了一个通用路由器体系结构的总体视图,其中标识了一个路由器的4个组件.
路由器的输入端口,输出端口和交换结构几乎总是用硬件实现.
在这里我们考虑一下分组转发需要什么样的信息
在输入端口中执行的查找对于路由器运行至关重要,正是在这个地方,路由器使用转发表来查找输出端口,是到达的分组能经过交换结构转发到该输出端口.
我们先考虑一个简单的情况:一个分组基于该分组的目的地址交换到输出端口,在32比特IP地址情况下,转发表蛮力实现将针对每个目的地址有一个表项,因此可能有超过40亿个可能的地址,这在实现上是不不可能的.使用这种风格的转发表,路由器使用分组目的地址的前缀与该表中的表项进行匹配.加入一个目的地址可能不止于其中一个表项相匹配,当有多个匹配时,路由器使用最长前缀匹配原则,就是在转发表中寻找最长的匹配项,并向与最长前缀匹配相关联的链路接口转发分组.
一旦通过查找确定了某个分组的输出端口,则该分组就能够发送进入交换结构.在某些射击中,如果来自其他输入端口的分组正在使用交换结构,一个分组可能会在进入交换结构是暂时被阻塞.因此一个被阻塞的分组必须在输入端口处排队,并等待稍后被即使调度以通过交换结构.尽管查找在输入端口可认为是最重要的动作,但必须采取其他许多动作:
我们用"匹配加动作"来描述路由器输入端口的作用
交换结构位于一台路由器的核心部位,正是通过交换结构,分组才能实际的从一个输入端口交换到一个输出端口.减缓有很多种方式可以完成:
输出端口处理取出已经存放在输出端口内存中的分组并将其发送到输出链路上.这些包括选择和取出排队的分组进行传输,执行所需的链路层和物理层传输功能
输入、输出端口都能形成分组队列,取决于流量负载、交换结构随着队列增长,路由器缓存空间会耗尽,出现丢包
输入排队
假如交换结构处理速率不够快那么可能就会在输入端口出现分组排队.
上图中,其中输入队列前端的两个分组要发往同一个右上角输出端口,假定交换结构决定发送左上角队列前端分组,这样左下角队列中的深色阴影分组必须等待,但是不仅他要等待,排在他后面的显色阴影的分组也必须等待即使其右侧输出端口无竞争这种现象叫做输入排队交换机中的线路前部(Head-Of-the_Line,HOL)阻塞
输出排队
假定同时有很多歌分组被转发到同意输出端口,但是在一个单位时间内他只能向外传输一个分组,name其他的分组就要排队(等待)经输出链路传输.
当没有足够内存缓存如分组时 就必须做出决定:要么丢弃到达分组(才起一种被称为弃尾的策略),要么删除一个或多个以排队分组为新到来的分组腾出空间.在某些情况下,在缓存填满之前边丢弃一个分组(或在其头部加上标记)的做法是有利的,这样可以向发送方通过一个拥塞信号.已经提出和分析了许多分组丢弃与标记策略,这些策略统称为主动队列管理算法.随机早起检测算法是得到最管饭研究和实现的算法之一.
关于输出缓存空间的大小,多年以来 用于缓存长度的经验方法是
少量TCP流:RTT * C(链路容量)
大量TCP流:RTT* C/ (N^1/2)
这里我们讨论排队的分组如何经过输出链路传输的问题.
3.循环加权公平排队:分组像使用优先权排队那样内分类,在类之间不存在严格的服务优先权,循环调度器在这些类之间轮流提供服务