Chapter4
- 4.1 网络层概述
- 4.1.1 网络层服务
- 4.1.2 网络层的主要功能
- 转发(局部)
- 路由选择(全局)
- 4.1.3 控制平面和数据平面
- 传统方式
- SDN方式
- 4.1.4 网络服务模型
- 4.2 路由器组成
- 4.2.1 路由器结构概况
- 4.2.2 转发方式
- 4.2.3 输入端口处理与基于目的地的转发
- 基于目的地的转发
- 输入端口处理
- 4.2.4 交换结构
- 4.2.5 输出端口处理
- 丢弃策略
- 调度策略
4.1 网络层概述
4.1.1 网络层服务
网络层为上层(传输层)提供的服务为:在发送端,将报文段封装为数据报并交由下层(数据链路层),在接收端,将数据包解封装为段并交由上层的传输层实体,实现主机到主机的通讯。
不同于传输层协议(只存在于主机中),网络层的协议存在于每一个主机和路由器上,于是它在每一台路由器上都维护了主机与主机之间的通信,属于有连接的服务(与TCP面向连接不同,TCP只在两台端系统中维护通信信息)。
4.1.2 网络层的主要功能
转发(局部)
当一个分组到达某台路由器的输入链路时,该路由器必须将该分组转发到设当的输出链路中。(查转发表)
路由选择(全局)
使用路由算法来决定分组从发送主机到目标接收主机的路径。(计算出转发表)
4.1.3 控制平面和数据平面
控制平面主要的功能是利用路由选择算法计算转发表,决定端到端的路径,数据平面主要做转发工作。分为传统方式和SDN(Software-Defined Networking)方式。
传统方式
传统方式中的控制平面为每-路由器(Per-router)控制平面,每一个路由器单独运行路由选择算法,通过与其他路由器路由算法的通信,决定端到端的路径。
传统方式的数据平面所实现的转发基于目标ip地址和转发表。
SDN方式
SDN方式中的控制平面为逻辑集中的控制平面,使用一个远程控制服务器实现转发表的计算,并将转发表分发到各台路由器中。
SDN方式中的数据平面所实现的转发基于多个字段和转发表,且功能更多。
4.1.4 网络服务模型
网络服务模型定义了分组在发送与接收端系统之间的端到端运输特性。可能包括以下服务:
- 对于单个数据报而言
- 可靠传送
- 延迟保证
- 对于数据报流而言
- 保证数据报传送
- 保证流的最小带宽
- 分组之间的延迟差
以下为不同网络架构的服务模型,因特网提供的是尽力而为的服务,说白了就是什么都不保证。
4.2 路由器组成
4.2.1 路由器结构概况
路由器的大致组成如下图所示:
-
输入端口:功能为接收到来的物理层信号,通过链路层功能将物理层信号转换为链路层的帧(frame),再通过网络层提取帧中的数据报,最后根据转发表决定前往的输出端口。(这里的端口,指的是路由器的物理输入和输出接口,与第2、3章所讲的与套接字相关的软件端口不同)
-
交换结构(high-seed switching fabric):将路由器的输入端口连接到其输出端口。
-
输出端口:输出端口存储从交换结构中接收的分组,并经过链路层和物理层在输出链路上传输。
-
路由选择处理器(routing processor):路由选择处理器执行控制平面功能。它运行路由选择协议,为路由器计算出转发表(传统方式),或者负责与远程控制器通信(SDN方式)。还进行网络管理功能。
其中,输入端口,输出端口与交换结构属于数据平面,它们通常使用硬件实现,并运行在纳秒级时间尺寸上;路由选择处理器属于控制平面,它通常使用软件实现,并运行在毫秒级时间尺寸上。
4.2.2 转发方式
转发方式大致分为两种,基于目的地转发与通用转发。
- 基于目的地转发:仅依赖于IP数据报的目标IP地址(传统方式)
- 通用转发: 基于头部字段的任意集合进行转发(SDN方式)
4.2.3 输入端口处理与基于目的地的转发
基于目的地的转发
转发表如果蛮力维护每一个IP地址到每一个端口的映射关系的话,那么表将会异常庞大(32位IP地址有
2
32
2^{32}
232个取值)。
于是,转发表所维护的表项是一个IP地址范围到端口的映射关系,如下图例子所示。
由于IP地址范围可能有公共的前缀,故实际维护表项时只需要维护一个前缀即可,如下图所示。
当某个IP地址与多个前缀相匹配时,路由器使用最长前缀匹配规则,即在该表中寻找最长的匹配项。例如地址:
11001000 00010011 00011000 10101010
的前24比特与上表中的第二项匹配,而该地址的前21比特与表中的第三项匹配,则选择第二项所对应的端口放出。在下一节会讲述采用最长前缀匹配规则的原理。
在路由器中,经常使用三态内容可寻址存储器(Tenary Content Address Memory,TCAM)来查找转发表中的表项。
输入端口处理
更详细的输入处理图如下所示,在该图中可以看到,输入端口维护了一个分组的队列,以处理输出拥塞的问题。
拥塞问题:
- 当交换结构的速率小于输入端口的汇聚速率时,在输入端口可能需要排队(引起排队延迟以及丢包),但是一般设计的时候都会满足交换速率较大,故可以忽略。
- 当目标端口存在竞争关系时(两个数据报前往同一个端口),排在队头的数据报阻止了队列中其他数据报的移动,如下图
4.2.4 交换结构
交换结构位于路由器的核心部位,将分组从输入缓冲区传输到合适的输出端口,交换速率一般比较快(比如有 N N N个输入端口,那么交换速率是输入链路速率的 N N N倍才比较理想),才不会称为瓶颈。
三种典型的交换结构:
- 经内存交换:输入端口中的分组被拷贝进内存,CPU提取分组头部信息之后,查找转发表相应表项,再将分组拷贝到输出端口;该方式需要经过系统总线两次,转发速率受内存的带宽限制,且一次只能转发一个分组。
- 经总线交换:输入端口经一根共享总线直接连接到输出端口进行传送,不需要经过CPU;受总线带宽限制,一次只能转发一个分组。(具体的实现方法是,在输入端口中为分组指定输出端口标签,然后经由总线向所有的输出端口转发,输出端口收到分组之后,标签一致的保留)
- 经互联网络交换(crossbar等):同时并发转发多个分组,克服总线带宽限制。
4.2.5 输出端口处理
当数据报从交换结构的到达速率比传输速率快时,输出端口就需要排队缓存;当缓冲区中存在多个分组时,需要由调度策略选择排队的数据报进行传输;当缓冲区满时,由丢弃策略选择排队的数据报进行丢弃(产生丢包)。
丢弃策略
- tail drop:丢弃刚刚到达的分组
- priority:根据优先级丢弃
- random:随机丢弃
调度策略
常见的调度策略有:
- 先进先出(first in first out, FIFO):按照分组到达的次序传输。
- 优先级调度:按照优先级分类,发送优先级最高的类中的所有分组,再发送优先级低的分类。
- 循环排队规则:循环扫描不同类型的队列,每一类发送一个分组之后发送下一类。
- 加权公平队列:在循环的基础上,每个类给予不同权重,权重高的服务量较多。