文章目录
4.1 网络层概述
网络层包含数据平面和控制平面两个部分,数据平面负责实际的数据传输和路由,而控制平面则处理路由表的构建和维护,以指导数据平面的操作。
4.1.1 转发和路由选择:数据平面和控制平面
网络层的作用从表面上看极为简单,即将分组从一台发送主机移动到一台接收主机。 为此,需要使用两种重要的网络层功能:
- 转发:当一个分组到达某路由器的一条输入链路时,该路由器必须将该分组移动 到适当的输出链路。
- 路由选择:当分组从发送方流向接收方时,网络层必须决定这些分组所采用的路由或路径。
转发和路由选择是完全不同的,转发是指将分组从输入链路转移到输出链路的路由器本地动作,而路由选择是分组从源目的地到目的地所选择的路径。简单来说就是分组通过单个路由器就是转发,通过多个路由器的过程就是路由选择
转发过程就是通过路由表实现的,路由器检査到达分组首部的一个或多个字段值,进而使用这些首部值在其转发表中索引,通过这种方法来转发分组。
4.1.2 网络服务模型
网络服务模型(network service model)定义了分组在发送与接收端系统之间的端到端运输特性。 我们现在考虑网络层能提供的某些可能的服务。这些服务部分如下:
-
确保交付:该服务确保分组将最终到达目的地。
-
具有时延上界的确保交付:该服务不仅确保分组的交付,而且在特定的主机到主机 时延上界内(例如在100ms内)交付。
-
有序分组交付:该服务确保分组以它们发送的顺序到达目的地。
-
确保最小带宽:这种网络层服务模仿在发送和接收主机之间一条特定比特率(例如 1 Mbps)的传输链路的行为。只要发送主机以低于特定比特率的速率传输比特(作 为分组的组成部分),则所有分组最终会交付到目的主机。
-
安全性:网络层能够在源加密所有数据报并在目的地解密这些分组,从而对所有运 输层报文段提供机密性。
因特网的网络层提供了单一的服务,称为尽力而为服务(best effort service)
4.2 路由器工作原理
下图显示了一个通用路由器体系结构的总体视图
可以发现路由器被抽象为了两个部分,控制平面和数据平面,而数据平面是用于实现转发功能的,通过硬件进行实现,将分组从输入端口通过交换结构转移到合适的输出端口。
为什么分组的转发要通过硬件实现而不是软件呢?因为输入链路到到分组的到达的速率非常的快,路由器必须在下一个分组到达之前就要对到达的数据进行处理,通过软件是无法实现的,所以通过硬件来进行处理。
4.2.1 输入端口处理和基于目的地转发
一个分组在输入端口会经过如下处理
输入端口的线路端接功能与链路层处理实现了用于各个输入链路的物理层和链路层。然后就是查找工作,查找就是通过转发表来查找对应的输出端口,使得到达的分组能经过交换结构转发到该输出端口。
下面是一种转发表的内容
路由器用分组目的地址的前缀(prefix)与该表中的表项进行最长前缀匹配,然后选择合适的输出端口。这个匹配的工作使用硬件完成,由于匹配速度要求在纳秒级,所以还需要使用一些用超出简单线性搜索的技术,如快速查找算法。
一旦通过查找确定了某分组的输出端口,则该分组就能够发送进入交换结构。但是当交换结构正在被使用的时候,那么该分组就必须进行排队等待。
4.2.2 交换
分组通过交换能实际地从一个输入端口交换(即转发)到一个输出端口中。交换可以用许多方式完成,如下
- 经内存交换:这种方式就是输入端将分组复制到内存,然后输出端再从内存进行内存拷贝。这样如果内存的处理速率是B,那么总的吞吐量就会小于B/2
- 经总线交换:输入端口经一根共享总线将分组直接传送到输出端口,不需要路由选择处理器的干预。这种方式同时只能有一个分组使用总线,其它分组必须等待。
- 经互联网络交换:这种算是对总线的一种扩展,由单根总线变为了N+M根总线(N和M代表输入端口和输出端口数量)。这种方式可以并行的发送多个分组,也就说明纵横式交换机是非阻塞的。
4.2.3 输出端口处理
输出端口处理取出已经存放在输出端口内存中的分组并将其发送到输出链路上。
4.2.4 如何出现排队
排队在输入端和输出端都有可能会出现,排队的位置和程度(或者在输入端口排队,或者在输岀端口排队)将取决于流量负载、交换结构的相对速率和线路速率。由于路由器的内存有限,当队列过长的时候就会导致没有足够的内存,从而出现丢包的情况。
- 输入排队: 当交换结构的处理速度慢于输入线路时,即输入端口的传输速率高于交换结构的处理速度,数据包就会在输入端口形成排队。输入排队可能导致数据包在输入端口的缓冲区等待进入交换结构,延长了数据包从输入到输出的传输时间。
- 输出排队: 当交换结构中有多个数据包同时要发送到相同的输出端口时,由于交换结构的处理速度通常远大于单个输出端口的处理速度,就可能导致输出端口排队。即使交换结构能够快速地传递数据包,但输出端口的处理速度可能成为瓶颈,导致多个数据包在输出端口排队等待发送。输出排队可能导致数据包在输出端口的缓冲区中等待,增加了传输的延迟。
4.2.5 分组调度
由于会出现排队,那么对于这个队列就会出现如何进行调度的问题,下面就是一些常见方式
-
先进先出