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