1.概述
1.1 转发和路由选择
网络层的作用就是将分组从一台发送主机移动到一台接收主机。因此需要两个重要的网络层功能:
- 转发:当一个分组达到路由器的一条输入链路时,路由器必须将该分组移动到适当的输出链路。比如来自主机A到路由器的一个分组,必须向在目的主机B路径上的下一台路由器转发。
- 路由选择:当分组从发送方流向接收方时,网络层必须决定这些分组所采用的路由或路径。计算这些路径的算法被称为路由选择算法。
每台路由器具有一张转发表。路由器通过检查到达分组的首部字段值来转发分组,然后使用该值在该路由器的转发表中索引查询。如下图所示:
图中一个首部字段为0111的分组到达路由器,路由器在转发表中索引,决定该分组的输出链路接口是接口2,然后路由器在内部将该分组转发到接口2。路由选择算法决定了插入路由器的转发表的值。路由选择算法可能是集中式的(如算法在某个中心场点执行,并向每台路由器下载路由选择信息),或者是分布式的(使用运行在每台路由器上的分布式路由选择算法的一部分)。
分组交换机是指一台通用分组交换设备,根据分组首部字段的值,从输入链路接口到输出链路接口转移分组。链路层交换机是基于链路层字段中的值做转发决定。路由器是基于网络层字段中的值做转发决定。
除了转发和路由选择,还有一个重要的功能:连接建立。某些网络层体系结构要求从源到目的地沿着所选择的路径彼此握手,以便在给定源到目的地连接中的网络层数据分组能开始流动前建立起状态。
1.2 网络服务模型
在发送主机中,当运输层向网络层传递一个分组时,能由网络层提供的特定服务如下:(因特网的网络层提供了单一的服务,称为尽力而为服务):
- 确保交付:确保分组最终到达目的地。
- 具有延时上界的确保交付:不仅确保分组的交付,而且在特定的主机到主机时延上界内交付。
- 有序分组交付:确保分组以它们的发送顺序到达。
- 确保最小带宽:只要发送主机以低于特定比特率的速率传输比特,则分组不会丢失,且每个分组会在预定时延内到达。
- 确保最大时延抖动:确保两个相继分组间的时间量等于在目的地接收到它们间的时间量。
- 安全性服务:使用仅源和目的主机知道的一个密钥。网络层还能提供数据完整性和源鉴别服务。
2.虚电路和数据报网络
运输层为应用程序提供了无连接服务UDP和面向连接服务TCP两种服务。同样,网络层也能为主机间提供无连接和面向连接的两种服务,但是不同时提供。仅在网络层提供连接服务的计算机网络称为虚电路网络;仅在网络层提供连接无服务的计算机网络称为数据报网络。网络层连接服务除了在端系统中(运输层面向连接服务是在位于网络边缘的端系统中实现),也位于网络核心的路由器中实现。
2.1 虚电路网络
一个虚电路的组成如下:
- 源和目的主机间的路径(即一系列链路和路由器)
- VC号,沿着该路径的每段链路的一个号码
- 沿着该路径的每台路由器中的转发表项
如下图所示,假设主机A请求该网络为它和主机B间创建一条虚电路,同时假定该网络为虚电路选择路径A-R1-R2-B,并为这条路径上的三条链路分配VC号12,22,32。虚电路分组离开A时,该分组首部的VC字段是12,离开R1时该值是22,离开R2时该值是32。
对于虚电路网络,每台路由器的转发表包括了VC号的转换,下图为R1的转发表:
当跨越一台路由器创建一条新的虚电路时,转发表就增加一个新表项。终止一条虚电路时,沿着该路径每个表中的相应项将被删除。
为什么不简单的保持相同的VC号?
- 逐链路代替减少了分组首部中VC字段的长度。
- 大大简化了虚电路的建立。如果沿着某路径的所有链路要求一个共同的VC号,路由器将不得不交换并处理大量的报文,以约定一个共同的VC号(比如一个没有被路由器任何其他现有虚电路使用的号码)用于一次连接。
虚电路有3个不同的阶段:
- 虚电路的建立:在建立阶段,发送运输层与网络层联系,指定接收方地址,等待网络建立虚电路。网络层决定发送方和接收方间的路径,也为沿着该路径的每条链路决定一个VC号。最后为路径上每台路由器的转发表增加一个表项。
- 数据传送:如下图所示
- 虚电路拆除:当发送方(接受方)通知网络层它希望终止该虚电路时,就启动该阶段。需要更新路径上每台分组路由器的转发表。
运输层的连接建立只涉及到两个端系统,这两个系统独自决定运输层连接的参数(如初始序号,流量控制窗口长度),网络中的路由器对这些并不知道。而对于虚电路网络层,路径上的路由器都要参与虚电路的建立,且每台路由器都知道经过它的所有虚电路。
2.2 数据报网络
在数据报网络中,每当一个端系统要发送分组时,它就为该分组加上目的端系统的地址,然后将分组推进该网络。这些路由器每台都使用分组的目的地址来转发该分组,且每台路由器有一个将目的地址映射到链路接口的转发表。
转发表的蛮力实现对每个目的地址有个表项,所以会有超过40亿可能的表项,这是不可能的。所以将分组改为下图的方式:
这样,转发表就没必要有那么多项,可能只需要4项:
路由器用分组的目的地址的前缀与该表中的表项进行匹配。比如目的地址是11001000 00010111 00010110 10100001,该地址的前21位匹配第一行,所以路由器向接口0转发该分组。但是可能一个目的地址可以与多个表项匹配,比如11001000 00010111 00011000 10101010的前24位与第二项匹配,且前21位同第三项匹配。此时要使用最长前缀匹配原则,即在该表中寻址最长的匹配项。