路由器原理
路由器转发平面
- 实现转发功能的逻辑结构;
- 由一台路由器的输入端口,输出端口,交换结构共同实现;
- 路由器转发平面总由硬件实现;
- 转发平面以纳米时间尺度运行;
路由器控制平面
- 实现路由器控制功能的逻辑结构;
- 执行路由选择协议,响应上线或下线的连接链路,执行网络管理功能;
- 路由器控制平面通常用软件实现,运行在路由选择处理器上(常为传统CPU);
- 控制平面以毫秒或秒时间尺度运行;
- 网络范围的路由控制平面常常是分布式的,其不同部分执行在不同路由器上并通过彼此发送控制报文进行交互;
组成
-
输入端口
将一条输入物理链路与路由器相连接的物理层功能;
执行与位于入链路远端的数据链路层交换的链路层功能;
查询转发表以确定到达分组输出端口的查询功能; -
交换结构
将路由器的输入端口与输出端口相连,是路由器内部的网络; -
输出端口
存储从交换结构接收的分组;
执行必要的链路层,物理层功能以在输出链路上传输分组; -
路由选择处理器
执行路由选择协议;
维护路由选择表;
维护连接的状态信息;
为路由器计算转发表;
执行网络管理功能;
控制分组从输入端口转发到路由选择处理器;
对双向链路,链路的输入端口,输出端口通常在同一线路卡(与交换结构相连的一块印刷电路卡)上成对出现。
输入端口
graph LR
A[线路端接] --> B[数据链路处理]
B-->C[查找,转发,排队]
C-.->D{交换结构}
输入端口对分组的处理动作
- 物理层,链路层处理
- 检查分组版本号,校验和,寿命字段
- 更新分组校验和,寿命字段
- 更新用于网络管理的计数器
- 查找分组对应的输出端口
查找
查找分组对应的输出端口。
在每个输入端口,通常有转发表的一个影子副本(转发表由路由选择处理器计算和更新并通过独立总线发送到每个输入端口);
对达到分组中的目的地地址编码(ip),查找转发表中的一个最长前缀匹配;
分组通过查找确定其输出端口后,可进入交换结构;
交换结构可能被来自其它输入端口的分组占用,故分组回被交换结构阻塞,在输入端口处排队;
交换结构
将分组实际地从一个输入端口转发(交换)到一个输出端口
交换方式
-
经内存交换
- 早期简单路由器可由传统计算机实现。输入输出端口间的交换在CPU(路由选择处理器)的直接控制下完成。分组到达输入端口后,中断CPU以通知之,CPU将分组复制到内存,解析分组首部字段,决定将其复制到某个输出端口的缓存中。
- 许多现代路由器通过内存交换。与早期简单路由器的差别在于,目的地址的查找和将分组存储进适当内存位置是由输入线路卡处理的。
-
经总线交换
输入端口经一根共享总线将分组直接传送到输出端口,无需路由选择处理器的干预。
输入端将分组送上交换结构时,为其加上一个内部标签,所有输出端口都会收到该分组,但只有标签与之对应的输出端口才会接受该分组。 -
经互联网络交换
- 纵横式交换网络
使用纵横式的棋盘网络而非单一总线来交换分组。
对N个输入端,N个输出端的路由器,有2N条线路,N^2个线路交点,交点可动态开关;
对从输入端口A到输出端口B的分组,交换结构控制器通过闭合适当的线路交点以实现正确传送;
纵横式网络能并行交换多个分组; - 多级交换网络
较为复杂,可使来自不同输入端口的分组同时朝相同输出端口前行
- 纵横式交换网络
输出端口
取出存放在输出端口内存中的分组并将其发送到输出链路。
graph LR
A{交换结构}-.->B[排队,缓存]
B-->C[数据链路处理]
C-->D[线路端接]
分组排队
在路由器输入端,输出端都有可能形成分组队列。
队列的位置和长度取决于流量负载,交换结构相对速率,线路速率;
丢包
队列满时不得不丢弃分组
弃尾 策略丢弃新到达的分组
此外还有一些更复杂的策略
主动队列管理会在缓存未满时就选择性地丢包,以提示发送方发生了拥塞
缓存长度
路由器缓存可吸收流量负载的波动;
确定缓存大小的经验方法是,缓存大小B = 平均往返时延RTT * 链路容量C
对大量TCP流N通过的链路,缓存大小B = 平均往返时延RTT * 链路容量C / TCP数的平方根N^0.5
输出端分组调度
对输出端队列,分组调度程序需在队列中选出一个分组来发送;
通常可用先来先服务原则;
更复杂的调度规则可用实现公平性,服务质量保证等目标;