路由器结构概况
高层面(非常简化的)通用路由器体系架构
- 路由:运行路由选择算法 / 协议(RIP, OSPF, BGP)-生成路由表
- 转发:从输入到输出链路交换数据报-根据路由表进行分组的转发
【路由器的组成包括以下几个方面:输入端口、输出端口、把输入端口和输出端口连在一起的是交换机Fabric,从输入可以转到一个合适的输出,完成一个局部的转发;转发完之后,通过链路传到另外一个路由器的输入端口,转发和转发的相互配合最后完成源主机到目标主机的端到端的分组交付。】
【Fabric根据路由处理器运行的路由协议的实体,就是运行当中的一个软件,把运算出来的路由表到达各个输入端口,输入端口根据到来分组做局部的转发】
【路由处理器上面的路由协议实体实现了路由的这种控制平面的功能,控制平面功能的实现的结果是路由表给输入端口的网络层】
【输入输出端口的三个框分别表示:红色:网络层实体;蓝色:链路层实体;绿色:物理层实体】
【现实中输入端口和输出端口通常是整合在一起的,他能完成双向的;没有一个独立的输入端口,也没有一个独立的输出端口,现在分开来只是为了便于讲解原理】
【把路由器控制平面的功能和数据平面的功能粘连在一起的是路由表,每个路由器都是独立的算路由表,而且是分布式的去算。在SDN的情况下是集中式的计算,在网络操作系统的网络应用上去算,算完之后的流表交给所有的SDN交换机,网络在SDN的情况下是可编程的;在传统的模式下,IP的模式下是不可编程的】
基于目标的转发
【传统方式:路由器转发分组的依据就是IP分组当中的目标IP地址】
Q:但是如果地址范围没有划分的特别规整,会发生什么?【影响用户上网效率,不利于局域网网络的稳定运行?】
最长前缀匹配
longest prefix matching:当给定目标地址查找转发表时,采用最长地址前缀匹配的目标地址表项
- 最长前缀匹配:在路由器中经常采用TCAMs(ternary content addressable memories)硬件来完成
- 内容可寻址:将地址交给TCAM,它可以在一个时钟周期内检索出地址,不管表空间有多大【通过匹配IP地址的最长前缀对所有IP地址进行分组】
- Cisco Catalyst系列路由器:在TCAM中可以存储多达1百万条路由表项
输入端口功能
【物理层的line termination(链路终端)完成链路上的物理信号转化成数字信号的功能,转完之后交给数据链路层,数据链路层判断哪里是帧头、帧尾然后check一下,用差错控制编码来检查有没有出错,然后判断帧当中的目标mac和我的网卡的mac地址是否一致,判断是否要收,收完之后,把帧当中的数据部分取出来,就是一个IP的分组,交给网络层的实体,到网络层实体后在链路当中排队,排到对头,按照路由处理器交下来的路由表,找到合适的端口把它放出去,通过fabric做一个局部的交换,从输入端口转到输出端口】
【有缓冲区的目的是为了匹配瞬间的输入速率和输出速率的不一致性,防止头端阻塞】
输入端口缓存
- 当交换机构的速率小于输入端口的汇聚速率时➡️在输入端口可能要排队
- 排队延迟以及由于输入缓存溢出造成丢失!
- Head-of-Line(HOL)blocking:排在队头的数据报阻止了队列中其他数据报向前移动
【有些分组在路由器中传着传着会丢就是因为缓冲区溢出了,可能发生在输入端口,也可能发生在输出端口】
交换结构
【Fabric如何输入端口转到输出端口,有三种常见的Fabric的工作方式:基于memory、基于bus、基于crossbar】
- 将分组从输入缓冲区传输到合适的输出端口
- 交换速率:分组可以按照该速率从输入传输到输出
- 运行速度经常是输入/输出链路速率的若干倍
- N个输入端口:交换机构的交换速度是输入线路速度的N倍比较理想,才不会成为瓶颈【不管是哪种交换结构,他的交换速率都要 ≥ N倍输入速度(N是输入端口数量)】【一般来说分组交换叫ppm,package per minute,每分钟交换分组的数量,假设接了3个输入输出端口,进来的数量是1000ppm,那么交换速率应该3000以上,否则本身Fabric就会成为瓶颈】
- 3种典型的交换机构
通过内存交换【基于memory】
第一代路由器:
【PC机、通用计算机通过软件的方式来实现路由,然后两端插入网卡,通过网卡收来一个分组,通过系统bus(系统总线)把分组交给路由软件,路由软件匹配路由表,然后决定通过哪个网卡发出去,然后网卡把分组封装成帧发出去】
- 在CPU直接控制下的交换,采用传统的计算机
- 分组被拷贝到系统内存,CPU从分组的头部提取出目标地址,查找转发表,找到对应的输出端口,拷贝到输出端口
- 转发速率被内存的带宽限制(数据报通过BUS两遍)【package要过系统总线两次,所以系统总线本身就会成为Fabric交换速度的瓶颈,所以他的带宽每分钟交换转发分组的速率不是那么高】
- 一次只能转发一个分组
通过总线交换【不是系统总线】
第二代路由器:
【输入端口输出端口挂在Fabric,Fabric体现形式就是bus,分组通过bus所有的输出端口都能读到,分组通过bus的时候要加上输出端口的地址,所有输出端口都能拿到,拿到之后匹配一下,如果是我的就收下然后转走,不是就丢掉】
【这种交换结构屏蔽了基于memory的路由器的问题——经过system bus两次;而基于bus的经过总线只有1次,所以交换速率要比基于memory的交换速率大很多】
- 数据报通过共享总线,从输入端口转发到输出端口
- 总线竞争:交换速度受限于总线带宽
- 1次处理一个分组
- 1 Gbps bus, Cisco 1900; 32 Gbps bus, Cisco 5600; 对于接入或企业级路由器,速度足够(但不适合区域或骨干网络)
通过互联网络(crossbar等)的交换
- 同时并发转发多个分组,克服总线带宽限制
- Banyan(榕树)网络,crossbar(纵横)和其它的互联网络被开发,将多个处理器连接成多处理器【A向Y转发的同时B也可以向Z转发】
- 当分组从端口A到达,转给端口y;控制器短接相应的两个总线【所以他的交换速度要比基于bus的快很多,n倍于它】
- 高级设计:将数据报分片为固定长度的信元,通过交换网络交换【把数据报分成定长的之后还会还原会原来的数据报】
- Cisco12000:以60Gbps的交换速率通过互联网络
输出端口
- 当数据报从交换机构的到达速度比传输速率快就需要输出端口缓存
- 由调度规则选择排队的数据报进行传输
优先权调度-谁会获得最优性能,网络中立?【不是先到的先传,根据调度机制来选择传哪个分组】
输出端口排队
- 假设交换速率R_switch是R_line的N倍(N:输入端口的数量)
- 当多个输入端口同时向输出端口发送时,缓冲该分组(当通过交换网络到达的速率超过输出速率则缓存)
- 排队带来延迟,由于输出端口缓存溢出则丢弃数据报!
需要多少缓存?
- RFC 3439 拇指规则(经验性规则):平均缓存 = 典型的RTT(例如:250ms)倍于链路容量C
- e.g. , C = 10 Gbps link
- 250ms * 10Gbps = 2.5 Gbit buffer
- 最近的一些推荐:有N(非常大)个流,缓存大小等于
调度机制
- 调度:选择下一个要通过链路传输的分组
- FIFO(first in first out) scheduling:按照分组到来的次序发送
- 现实例子?
- 丢弃策略:如果分组到达一个满的队列,哪个分组将会被抛弃?
- tail drop: 丢弃刚到达的分组
- priority: 根据优先权丢失/移除分组
- random: 随机地丢弃/移除
调度策略:优先权
优先权调度:发送最高优先权的分组
- 多类,不同类别有不同的优先权
- 类别可能依赖于标记或者其他的头部字段,e.g. IP source/dest, port numbers, ds, etc.
- 先传高优先级的队列中的分组,除非没有
- 高(低)优先权中的分组传输次序:FIFO
- 现实生活中的例子?
调度策略:其他的
Round Robin(RR)scheduling:
- 多类
- 循环扫描不同类型的队列,发送完一类的一个分组,再发送下一个类的一个分组,循环所有类
- 现实例子?
Weighted Fair Queuing(WEQ):
- 一般化的Round Robin
- 在一段时间内,每个队列得到的服务时间是:W_i / (XIGMA(W_i)) * t,和权重成正比
- 每个类在每一个循环中获得不同权重的服务量
- 现实例子