路由器结构
- 输入端口:接收链路中的数据,查询转发表
- 交换结构:将路由器的输入端口连接到它的输出端口。包含在路由器当中
- 输出端口:存储从交换结构接收的分组,并交到链路层和物理链路上。当一条链路是双向的时(即承载两个方向的流 量),输出端口通常与该链路的输入端口成对出现在同一线路卡上。
- 路由选择处理器:路由选择处理器执行控制平面功能。在传统的路由器中,它执行路由选择协议,维护路由选择表与关联链路状态 信息,并为该路由器计算转发表。
在SDN路由器中,路由选择处理器(在其他活动中)负责与远程控制器通信,目的是接收由远程控制器计算的转发表项,并在该路由器的输入端口安装这些表项。路由选择处理器还执行网络管理功能。
路由器的输入端口、输出端口和交换结构几乎总是用硬件实现,硬件处理要比软件快非常多。
当数据平面以纳秒时间尺度运行时,路由器的控制功能以毫秒或秒时间尺度运行,这 些控制功能包括执行路由选择协议、对上线或下线的连接链路进行响应、 与远程控制器通 信(在SDN场合)和执行管理功能。
因而这些控制平面(control plane) 的功能通常用软件实现并在路由选择处理器(通常是一种传统的CPU)上执行。
4.2.1 输入端口处理和基于目的地转发
输入端口中执行的查找对于路由器运行是至关重要的
正是在这个地方,路由器使用转发表来查找输出端口,使得到达的分组能经过交换结构转发到该输出端口。
转发表
转发表是由路由选择处理器计算和更新的(使用路由选择协议与其他网络路由器中的路由选择处理器进行交互),或者转发表接收来自远程SDN控制器的内容
转发表从路由选择处理器经过独立总线(例如一个PCI总线)复制到线路卡,使用在每个输入端口的影子副本,转发决策能在每个输入端口本地做出,无须基于每个分组调用集中式路由选择处理器,因此避免了集中式处理的瓶颈
转发表使用最长前缀匹配规则(longest prefix matching rule);
地址范围分配如下图
则前缀匹配如下
高效的硬件实现
这种查找必须在纳秒级执行(回想我们前面10Gbps链路和一个64字节IP数据报的例子)。因此,不仅必须要用硬件执行查找,而且需要对大型转发表使用超出简单线性搜索的技术;
实践中也经常使用三态内容可寻址存储器(Tenary Content Address Memory, TCAM)来查找,
一旦通过查找确定了某分组的输出端口,则该分组就能够发送进入交换结构。
输入端口的其他作用
输入端口除了具有查询的作用
- 必须出现物理层和链路层处理
- 必须检查分组的版本号、检验和以及寿命字段,并且重写后两个字段
- 必须更新用于网络管理的计数器(如接收到的IP数据报的数目)
4.2.2 交换
从一个输入端口到输出端口,这是一个核心部位
有三种不同的实现方式
1.经内存交换
在输入端口与输出端口之间的交换是在CPU (路由选择处理器)的直接控制下完成的。
像IO设备一样。该分组从输入端口处被复制到处理器内存中。处理器判断逻辑,在转发表中找出适当的输出端口,并将该分组复制到输出端口的缓存中。
现代多是经共享内存转发分组,类似零拷贝。
2.经总线交换
经一根共享总线将分组直接传送到输出端口,不需要路由选择处理器的干预。
如果多个分组同时到达路由器,每个位于不同的输出端口,除了一个分组外所有其他分组必须等待,因为一次只有一个分组能够跨越总线。因为每个分组必须跨过单一总线,故路由器的交换带宽受总线速率的限制。
对于运行在小型局域网和企业网中的路由器来说,通过总线交换通常足够用了
3.经互联网络交换
克服单一、共享式总线带宽限制的一种方法是,使用一个更复杂的互联网络
纵横式交换机就是一种由2/V条总线组成的互联网络,它连接/V个输入端口与N个输岀端口,交叉点通过交换结构控制器(其逻辑是交换结构自身的一部分)
纵横式网络能够并行转发多个分组。纵横式交换机是非阻塞的(non-blocking) ,即只要没有其他分组当前被转发到该输出端>口,转发到输出端口的分组将不会被到达输出端口的分组阻塞。然而,如果来自两个不同输入端口的两个分组其目的地为根同的输出端口,则一个分组必须在输入端等待,因为在某个时刻经给定总线仅能够发送一个分组。
扩展
更为复杂的互联网络使用多级交换元素,以使来自不同输入端口的分组通过交换结构同时朝着相同的输出端口前行。
在这种方法中,输入端口和输出端口被连接到并行运行的N个交换结构。一个输入端口将一个分组分成K个较小的块,并且通过N个交换结构中的K个发送(“喷射”)这些块到所选择的输出端口,输出端口再将K个块装配还原成初始的分组
4.2.3 输出端口处理
输出端口处理取出已经存放在输出端口内存中的分组并将其发送到输出链路上。包括选择和取岀排队的分组进行传输,执行所需的链路层和物理层传输功能。
4.2.4 何处出现排队
在输入端口和输出端口处都可以形成分组队列
排队的位置和程度(或者在输入端口排队,或者在输岀端口排队)将取决于流量负载、交换结构的相对速率和线路速率
1.输入排队
线路前部(Head-Of-the-Line, HOL)阻塞即在一个输入队列中排队的分组必须等待通过交换结构发送(即使输出端口是空闲
的),因为它被位于线路前部的另一个分组所阻塞。
由于HOL阻塞,只要输入链路上的分组到达速率达到其容的58%, 在某些假设前提下,输入队列长度就将无限制地增大
2.输出排队
交换足够快,那分组就会就会在输出阻塞,输出内存就会耗尽
当没有足够的内存来缓存一个入分组时,就必须做出决定:要么丢弃到达的分组(采用一种称为弃尾(drop tail)的策略),要么删除一个或多个已排队的分组为新来的分组腾出空间。在某些情况下,在缓存填满之前便丢弃一个分组(或在其首部加上标记)的做法是有利的,这些策略统称为主动队列管理(Active Queue Management ,AQM)算法。随机早期检测(Random Early Detection, RED)算法是得到最广泛研究和实现的 AQM 算法之一 [Christiansen 2001; Floyd 2016]
一个计算缓存的公式:B=RTT·C
B 缓存
RTT 往返时间
C 链路容量
一条具有250ms RTT的10Gbps链路需要的缓存量等于B=RTT·C=2.5Gb
当有大量TCP流(N条)流经链路的时候,公式B = RTT - C/√N
4.2.5 分组调度
讲的就是当遇到阻塞的时候,怎么处理顺序的问题。
1.先进先出(FIFO)的链路调度规则
当缓存无法再容纳分组的时候,则根据丢弃策略来丢弃分组(丢掉新来的或者丢掉组内一个)
2.优先权排队
网络操作员可以配置一个队列,这样携带网络管理信息的分组(例如,由源或目的TCP/UDP端口号所标识)获得超过用户流量的优先权
此外,基于IP的实时话音分组可能获得超过非实时流量(如SMTP或IMAP电子邮件分组)的优先权
每个优先权类通常都有自己的队列。当选择一个分组传输时,优先权排队规则将从队列为非空(也就是有分组等待传输)的最高优先权类中传输一个分组。在同一优先权类的分组之间的选择通常以FIFO方式完成
在非抢占式优先权排队(non-preemptive priority queuing)规则下,一旦分组开始传输,就不能打断。
3.循环和加权公平排队
在循环排队规则(nnmcl robin queuing discipline)下,分组像使用优先权排队那样被分类。然而,在类之间不存在严格的服务优先权,循环调度器在这些类之间轮流提供服务。这是一种 保持工作排队的规则
保持工作排队(work-conserving queuing)规则在有(任何类的)分组排队等待传输时,不允许链路保持空闲。当寻找给定类的分组但是没有找到时,保持工作的循环规则将立即检查循环序列中的下一个类。
加权公平排队(Weighted Fair Queuing, WFQ )规则
其中,到达的分组被分类并在合适的每个类的等待区域排队。与使用循环调度一样,WFQ调度器也以循环的方式为各个类提供服务,即首先服务第1类,然后服务第2类,接着再服务第3类,然后(假设有3个类别)重复这种服务模式。WFQ也是一种保持工作排队规则,因此在发现一个空的类队列时,它立即移向服务序列中的下一个类
总结
输出端口,输出端口是一个复杂的结构,并不只是一个狭义的端口而已。
它们包含对接链路层的处理,包含有自己的缓存,以及对交换前后的逻辑处理(匹配出口等)
当数据阻塞,量多的时候,我们就要考虑它带来的问题。例如缓存占满,缓存中的顺序,以及优先权等,这衍生出一些列的解决策略