本章学习网络层:数据平面
前一章中我们学习了运输层依赖于网络层的主机到主机的通信服务,提供了各种形式的进程到进程的通信。在本章中我们将看到与运输层和应用层不同的是,在网络中的每一台主机和路由器中都有一个网络层部分。
网络层能够被分解为两个相互作用的部分,即数据平面和控制平面。本章首先学习网络层的数据平面,即网络层中每台路由器的功能,该数据平面功能决定到达路由器输入链路之一的数据报(即网络层的分组)如何转发到该路由器的输出链路之一。
网络层概述
下图显示了一个简单网络,其中有两台主机H1,H2,在H1和H2之间的路径上有几台路由器。假设H1向H2发送信息,考虑这些主机与中间路由器的网络层所起的作用。H1的网络层取得来自H1运输层的报文段,将每个报文段封装成一个数据报,然后向相邻路由器R1发送该数据报。在接收方H2,网络层接收来自相邻路由器R2的数据报,提取出运输层报文段,并将其向上交付给H2的运输层。每台路由器的数据平面的主要作用是从其输入链路向其输出链路转发数据报;控制平面的主要作用是协调这些本地的每个路由器转发动作,使得数据报沿着源和目的地主机之间的路由器路径最终进行端到端传送。
转发和路由选择:数据平面和控制平面
网络层的作用从表面上极为简单——将分组从一台主机发送到另一台主机。需要使用两种重要的网络层功能:
- 转发。当一个分组到达某路由器的一条输入链路时,该路由器必须将该分组移动到合适的输出链路。转发是在数据平面中实现的唯一功能。
- 路由选择。当分组从发送方流向接收方时,网络层必须决定这些分组所采用的路由或路径,计算这些路径的算法被称为路由选择算法。例如再在上图中一个路由选择算法将决定分组从H1到H2流动所遵循的路径。路由选择算法在网络层的控制平面中实现。
转发是指将分组从一个输入链路接口转移到适当的输出链路接口的路由本地动作。转发发生的事件很短,通常用硬件来实现。
路由选择是指确定分组从源到目的地所采取的端到端路径的网络范围处理过程。路由选择发生的时间尺度长,通常用软件实现。
每台网络路由器中有一个关键元素是它的转发表。路由器检查到达分组首部的一个或多个字段值,进而使用这些首部值在其转发表中索引,通过这种方法来转发分组,这些值对应存储在转发表项中的值,指出该分组将被转发的路由器的输出链路接口。
控制平面:传统的方法(在路由器内实现)
路由器中的转发表一开始是如何配置的?这个问题揭示了路由选择和转发间的重要相互作用。路由选择算法运行在每台路由器中,并且在每台路由器中都包含转发和路由选择两种功能。在一台路由器中的路由选择算法与在其他路由器中的路由选择算法通信(通过根据路由选择协议交换包含路由选择信息的路由选择报文实现),以计算出它的转发表的值。
控制平面:SDN方法(在远程服务器上实现)
下图显示了从路由器物理上分离的另一种方法,远程控制器计算和分发转发表一共每台路由器使用。
图4-2和图4-3的数据平面组件是相同的。但在图4-3中,控制平面路由选择功能与物理的路由器是分离的,即路由选择设备仅执行转发,而远程控制器计算并分发转发表。
路由器和远程控制器通过交换包含转发表和其他路由选择信息的报文来实现通信,上图的控制平面方法是软件定义网络(Software-Defineed Networking,SDN)
网络服务模型
网络服务模型定义了分组在发送与接收端系统之间的端到端运输特性。
网络层能提供的某些可能的服务。这些服务可能包括:
- 确保交付。该服务确保分组将最终到达目的地
- 具有时延上界的确保交付。该服务不仅确保分组的交付,而且在特定的主机到主机时延上界内交付
- 有序分组交付。确保分组以它们发送的顺序到达目的地
- 确保最小带宽。只要发送主机以低于特定比特率的速率传输比特,则所有分组最终将会交付到目的主机
- 安全性。网络层能够在源加密所有数据并在目的地解密这些分组
因特网的网络层提供了单一的服务。称为尽力而为服务 。传送的分组既不能保证它们以它们发送的顺序被接受,也不能保证它们最终交付;既不能保证端到端时延,也不能保证有最小的带宽。
分组交换机是指一台通用分组交换设备,它根据分组首部字段中的值,从输入链路接口到输出链路接口转移分组.某些分组交换机称为链路层交换机,基于链路层帧中的字段值做出转发决定,这些交换机因此被称为链路层设备。其他分组交换机成为路由器,基于网络层数据报中的数据字段值做出转发决定,路由器是网络层设备。
路由器工作原理
下图显示了一个通用路由器体系结构视图。标识了一台路由器的4个组件
- 输入端口。在输入端口执行查找功能,通过查询转发表决定路由器的输出端口,到达的分组通过路由器的交换结构转发到输出端口
- 交换结构。将路由器的输入端口连接到它的输出端口,这种交换结构完全包含在路由器中,即它是一个网络路由器中的网络
- 输出端口。存储从交换结构接收的分组,并通过执行必要的链路层和物理层功能在输出链路上传输这些分组
- 路由选择处理器。执行控制平面功能。在传统的路由器中,它执行路由选择协议,维护路由选择表与关联链路状态信息,并为该路由器计算转发表;在SDN路由器中负责与远程控制器通信,目的是接收由远程控制器计算的转发表项,并在该路由器的输入端口安装这些表项。
输入端口处理和基于目的地转发
下图显示了更为详细地输入处理的视图
交换
交换结构位于一台路由器的核心部位,正是通过这种交换结构,分组才能实际地从一个输入端口交换(转发)到一个输出端口中,交换可以使用多种方式:
- 经内存交换。最简单、最早的路由器是传统的计算机,在输入端口与输出端口之间的交换是在CPU(路由选择处理器)的直接控制下完成的。一个分组到达一个输入端口时,该端口会先通过中断方式向向路由选择处理器发出信号。于是该分组从输入端口处被复制到处理器内存中,路由选择处理器则从首部提取目的地址,在转发表中找到适当的输出端口,并将该分组复制到输出端口的缓存中。(每个分组穿过两次总线)
- 经总线交换。输入端口经一根共享总线将分组直接传送到输出端口,不需要路由选择处理器的干预。因为每个分组必须跨过单一总线,故路由器的交换贷款受总线速率的限制
- 经互联网络交换。克服单一、共享式总线带宽限制的一种方法是使用一个更复杂的互联网络。与前面两种方法不同,纵横式网络能够并行转发多个分组
输出端口处理
输出端口处理取出已经存放在输出端口内存中的分组并将其转发到输出链路上,这包括选择和取出排队的分组进行传输,执行所需的链路层和物理层传输功能
何时出现排队?
在输入端口和输出端口处都可以形成分组队列。排队的位置和程度将取决于流量负载、交换结构的相对速率和线路速率(随着队列的增长,路由器的缓存空间最终将会耗尽,并且当无内存可用时到达的分组将会出现丢包)
输入排队
如果交换结构不能快得(相对于输入线路速度而言)使所有到达分组无时延地通过它传送,在输入端口也将出现分组排队,因为到达的分组必须加入输入端口队列中,以等待通过交换结构传送到输出端口。
输出排队
分组队列能够在输出端口形成。
分组调度
排队的分组如何经输出链路传输?
1.先进先出
下图显示了先进先出(FIFO)链路调度规则模型。 就跟我们日常排队买东西一样,按照分组到达输出链路队列地相同次序来选择分组在链路上传输。
下图显示了运行中的FIFO队列。
2.优先权排队
在这种规则下,到达输出链路的分组被分类放入输出队列中的优先权类。每个优先权类通常都有自己的队列。先传送高优先级的分组,若是优先级都一样,通常采用FIFO方式完成
3.循环和加权公平排队
在循环排队规则下,分组像使用优先权排队那样被分类,然而在类之间不存在严格的服务优先权,循环调度器在这些类之间轮流提供服务。类1的分组被传输,接着是类2的分组,依次来回循环。一个所谓的保持工作排队规则在有分组排队等待传输时,不允许链路保持空闲。
一种通用形式的循环排队(加权公平排队),到达的分组被分类并在合适的每个类的等待区域排队
网际协议:IPv4、寻址、IPv6
IPv4数据报格式
网络层分组被称为数据报。
IPv4数据报中的关键字段如下:
- 版本(号)。这4比特规定了数据报的IP协议版本。通过查看版本号,路由器能够确定如何解释IP数据报的剩余部分,不同的IP版本使用不同的数据报格式
- 首部长度。因为一个IPv4数据报可包含一些可变数量的选项(这些选项包括在IPv4数据报首部中),故需要用这4比特来确定IP数据报中载荷实际开始的地方。大多数IP数据报不包含选项,所以一般的IP数据报具有20字节的首部
- 服务类型。服务类型(TOS)比特包含在IPv4首部中,以便使不同类型的IP数据报能相互区别分开来
- 数据报长度。这是IP数据报的总长度(首部加上数据),以字节记。因为该字段长为16比特,所以IP数据报的理论最大长度为65535字节
- 标识、标志、片偏移。这三个字段与IP分片有关。(IPv6不允许在路由器上对分组分片)
- 寿命。寿命(Time-To-Live,TTL)字段用来确保数据报不会永远在网络中循环。每当一台路由器处理数据报时,该字段的值减1,若TTL字段减为0,则该数据报必须丢弃
- 协议。该字段通常仅当一个IP数据报到达其最终目的地时才会有。该字段值指示了IP数据报的数据部分应交给哪个特定的运输层协议。协议号是将网络层与运输层绑定到一起的粘合剂,而端口号是将运输层和应用层绑定到一起的粘合剂
- 首部检验和。用于帮助路由器检测收到的IP数据报中的比特错误
- 源和目的IP地址。当某源生成一个数据报时,它在源IP字段中插入它的IP地址,在目的IP地址字段中插入其最终目的地的地址。通常源主机通过DNS查找来决定目的地址
- 选项。选项字段允许IP首部被扩展
- 数据(有效载荷)。最重要的字段,这是数据报存在的首要理由
IPv4数据报分片
并不是所有链路层协议都能承载相同长度的网络层分组。一个链路层帧能承载的最大数据量叫做最大传送单元(Maximum Transmission Unit,MTU)。因为每个IP数据报封装在链路层帧中从一台路由器阐述道下一台路由器,故链路层协议的MTU严格的限制着IP数据报的长度。
如何将过大的IP分组挤进链路层帧的有效载荷字段?解决方法是将IP数据报中的数据分片成多个较小的IP数据报,用单独的链路层帧封装这些较小的IP数据报,然后通过输出链路发送这些帧,每个这些较小的数据报都被称为片(fragment)。片在到达目的地运输层以前需要重新组装。TCP和UDP都希望从网络层收到完整的、未分片的报文,IPv4的设计者决定将数据报的重新组装工作放到端系统中,而不是放到网络路由器中。
IPv4编址
主机与路由器连入网络的方法?
一台主机通常只有一条链路连入连接到网络;当主机中的IP想发送一个数据报时,它就在该链路上发送。主机与物理链路之间的边界叫做接口。
每个IP地址长度为32比特(等价为4字节)因此2^32个可能的IP地址,这些地址通常按点分十进制记法书写,即地址中的每个字节用它的十进制形式书写,各字节间以句点隔开。在全球因特网中的每台主机和路由器上的每个接口,都必须有一个全球唯一的IP地址
下图提供了一个IP地址与接口的例子(存在3个IP子网)
互联网这3个主机接口与1个路由器接口的网络形成一个子网。子网也称为IP网络或直接称为网络。IP编址为这个子网分配一个地址223.1.1.0/24,其中的/24记法有时称为子网掩码,指示32比特中的最左侧24比特定义了子网地址。因此子网223.1.1.0/24由三个主机接口(223.1.1.1、223.1.1.2和223.1.1.3)和一个路由器接口(223.1.1.4)组成,任何其他要连到223.1.1.0/24网络的主机都要求其地址具有223.1.1.XXX的形式
为了确定子网,分开主机和路由器的每个接口,产生几个隔离的网络岛,使用接口端接这些隔离的网络的端点,这些隔离的网络中的每一个都叫做一个子网
上图有6个子网
因特网的地址分配策略被称为无类别域间路由选择(Classless Interdomain Routing,CIDR),当使用子网寻址时,32比特的IP地址被划分为两部分,并且也具有点分十进制形式a.b.c.d/x,其中x指示了地址的第一部分中的比特数。x最高比特构成了IP地址的网络部分,并且经常称为该地址的前缀。 当该组织外部的一台路由器转发i一个数据报,且该数据报的目的地址位于该组织内部时,仅需要考虑该地址的前面x比特。
在CIDR被采用之前,IP地址的网络部分被限制为长度为8、16、24比特,这是一种分类编址,分别被称为A、B、C类网络
IP广播地址255.255.255.255,当一台主机发出一个目的地址为255.255.255.255的数据报时,该报文会交付给同一个网络中的所有主机。
获取主机地址:动态主机配置协议
某组织一旦获取了一块地址,它就可为本组织内的主机域路由器接口逐个分配IP地址。主机地址能手动配置,但是目前更多的时使用动态主机配置协议(Dynamic Host Configuration,DHCP)来完成。DHCP允许主机自动获取一个IP地址,由于DHCP具有将主机连接进一个网络的网络相关方面的自动能力,故常被称作即插即用协议或零配置协议。
DHCP是一个客户——服务器协议。客户通常是新到达的主机,它主要获得包括自身使用的IP地址在内的网络配置信息,如果某子网中没有服务器,则需要一个DHCP中继代理,这个代理知道用于该网络的DHCP服务器的地址
对一台新到达的主机而言,对上图所示的网络设置,DHCP协议是一个4个步骤的过程:
- DHCP服务器发现。一台新到达的主机的首要任务时发现一个要与其交互的DHCP服务器。这可通过DHCP发现报文来完成,客户在UDP分组中向端口67发送该发现报文。该UDP分组封装在一个IP数据报中,但是这个数据报应该发送给谁呢?主机不知道自己所连接网络的IP地址,更不知道该网络的DHCP服务器地址了,在这种情况下,DHCP客户生成包含DHCP发现报文的IP数据报,其中使用广播目的地址255.255.255.255并且使用“本主机”源IP地址0.0.0.0。DHCP客户将该IP数据报传递给链路层,链路层然后将该帧广播到所有与该子网连接的节点
- DHCP服务器提供。DHCP服务器收到一个DHCP发现报文时,用DHCP提供报文向客户做出响应 ,该报文向该子网的所有节点广播,仍然使用IP广播地址255.255.255.255(为什么这里也需要广播?)因为在子网中可能存在着几个DHCP服务器,该客户也许会发现它处于几个提供者之间进行选择的优越位置。每台服务器提供的报文包含收到的发现报文的事务ID、向客户推荐的IP地址、网络掩码以及IP地址租用期
- DHCP请求。新到达的客户从一个或多个服务器提供中选择一个,并向选中的服务器提供DHCP请求报文进行响应,回显配置的参数。
- DHCP ACK。服务器用DHCP ACK报文对DHCP请求报文进行响应,证实所要求的参数。
IPv6
由于新的子网和IP节点增加,32比特的IP地址空间即将用尽,为了应对这种对大IP地址空间的需求,开发出一种新的IPv6协议。
IPv6数据报格式
- 扩大的地址容量。IPv6将IP地址长度从32比特增加到128比特。这就确保全世界将不会用尽IP地址
- 简化高效的40字节首部。
- 流标签。
以下是IPv6中定义的字段
- 版本。该4比特字段用于标识IP版本号
- 流量类型。该8比特字段与IPv4字段的含义相似
- 流标签。该20比特的字段用于标识一条数据报的流,能够对一条流中的某些数据报给出优先权
- 有效载荷长度。该16比特值作为一个无符号整数,给出IPv6中跟在定长的40字节数据报首部后面的字节数量
- 下一个首部。该字段标识数据报中的内容需要交付给哪个协议(如TCP或UDP)
- 跳限制。转发数据报的每台路由器将对该字段的内容减1,如果跳限制技术达到0,则该数据报将被丢弃
- 源地址和目的地址。
- 数据。这是IPv6数据报的有效载荷部分
与IPv4相比,IPv6有几部分内容不复存在
- 分片/重新组装。IPv6不允许在中间路由器上进行分片与重新组装。只能在源和目的地执行。如果路由器收到的IPv6数据报因太大而不能转发到出链路上,则路由器只需丢掉该数据报,并向发送方发挥一个“分组太大”的ICMP差错报文即可。于是发送方能够使用较小长度的IP数据报重发数据。大大加快了网络中的IP转发速度
- 首部检验和。因为因特网中的运输层和数据链路层协议执行了检验操作,所以将其去除
- 选项。选项不再是标准IP首部的一部分了。但它并没有消失,而是可能出现在IPv6首部中由“下一个首部”指出的位置上。
通用转发和SDN