本章学习网络层:数据平面
前一章中我们学习了运输层依赖于网络层的主机到主机的通信服务,提供了各种形式的进程到进程的通信。在本章中我们将看到与运输层和应用层不同的是,在网络中的每一台主机和路由器中都有一个网络层部分。
网络层能够被分解为两个相互作用的部分,即数据平面和控制平面。本章首先学习网络层的数据平面,即网络层中每台路由器的功能,该数据平面功能决定到达路由器输入链路之一的数据报(即网络层的分组)如何转发到该路由器的输出链路之一。
下图显示了一个简单网络,其中有两台主机H1,H2,在H1和H2之间的路径上有几台路由器。假设H1向H2发送信息,考虑这些主机与中间路由器的网络层所起的作用。H1的网络层取得来自H1运输层的报文段,将每个报文段封装成一个数据报,然后向相邻路由器R1发送该数据报。在接收方H2,网络层接收来自相邻路由器R2的数据报,提取出运输层报文段,并将其向上交付给H2的运输层。每台路由器的数据平面的主要作用是从其输入链路向其输出链路转发数据报;控制平面的主要作用是协调这些本地的每个路由器转发动作,使得数据报沿着源和目的地主机之间的路由器路径最终进行端到端传送。
网络层的作用从表面上极为简单——将分组从一台主机发送到另一台主机。需要使用两种重要的网络层功能:
转发是指将分组从一个输入链路接口转移到适当的输出链路接口的路由本地动作。转发发生的事件很短,通常用硬件来实现。
路由选择是指确定分组从源到目的地所采取的端到端路径的网络范围处理过程。路由选择发生的时间尺度长,通常用软件实现。
每台网络路由器中有一个关键元素是它的转发表。路由器检查到达分组首部的一个或多个字段值,进而使用这些首部值在其转发表中索引,通过这种方法来转发分组,这些值对应存储在转发表项中的值,指出该分组将被转发的路由器的输出链路接口。
控制平面:传统的方法(在路由器内实现)
路由器中的转发表一开始是如何配置的?这个问题揭示了路由选择和转发间的重要相互作用。路由选择算法运行在每台路由器中,并且在每台路由器中都包含转发和路由选择两种功能。在一台路由器中的路由选择算法与在其他路由器中的路由选择算法通信(通过根据路由选择协议交换包含路由选择信息的路由选择报文实现),以计算出它的转发表的值。
控制平面:SDN方法(在远程服务器上实现)
下图显示了从路由器物理上分离的另一种方法,远程控制器计算和分发转发表一共每台路由器使用。
图4-2和图4-3的数据平面组件是相同的。但在图4-3中,控制平面路由选择功能与物理的路由器是分离的,即路由选择设备仅执行转发,而远程控制器计算并分发转发表。
路由器和远程控制器通过交换包含转发表和其他路由选择信息的报文来实现通信,上图的控制平面方法是软件定义网络(Software-Defineed Networking,SDN)
网络服务模型
网络服务模型定义了分组在发送与接收端系统之间的端到端运输特性。
网络层能提供的某些可能的服务。这些服务可能包括:
因特网的网络层提供了单一的服务。称为尽力而为服务 。传送的分组既不能保证它们以它们发送的顺序被接受,也不能保证它们最终交付;既不能保证端到端时延,也不能保证有最小的带宽。
分组交换机是指一台通用分组交换设备,它根据分组首部字段中的值,从输入链路接口到输出链路接口转移分组.某些分组交换机称为链路层交换机,基于链路层帧中的字段值做出转发决定,这些交换机因此被称为链路层设备。其他分组交换机成为路由器,基于网络层数据报中的数据字段值做出转发决定,路由器是网络层设备。
下图显示了一个通用路由器体系结构视图。标识了一台路由器的4个组件
下图显示了更为详细地输入处理的视图
交换结构位于一台路由器的核心部位,正是通过这种交换结构,分组才能实际地从一个输入端口交换(转发)到一个输出端口中,交换可以使用多种方式:
输出端口处理取出已经存放在输出端口内存中的分组并将其转发到输出链路上,这包括选择和取出排队的分组进行传输,执行所需的链路层和物理层传输功能
何时出现排队?
在输入端口和输出端口处都可以形成分组队列。排队的位置和程度将取决于流量负载、交换结构的相对速率和线路速率(随着队列的增长,路由器的缓存空间最终将会耗尽,并且当无内存可用时到达的分组将会出现丢包)
输入排队
如果交换结构不能快得(相对于输入线路速度而言)使所有到达分组无时延地通过它传送,在输入端口也将出现分组排队,因为到达的分组必须加入输入端口队列中,以等待通过交换结构传送到输出端口。
输出排队
分组队列能够在输出端口形成。
排队的分组如何经输出链路传输?
1.先进先出
下图显示了先进先出(FIFO)链路调度规则模型。 就跟我们日常排队买东西一样,按照分组到达输出链路队列地相同次序来选择分组在链路上传输。
下图显示了运行中的FIFO队列。
2.优先权排队
在这种规则下,到达输出链路的分组被分类放入输出队列中的优先权类。每个优先权类通常都有自己的队列。先传送高优先级的分组,若是优先级都一样,通常采用FIFO方式完成
3.循环和加权公平排队
在循环排队规则下,分组像使用优先权排队那样被分类,然而在类之间不存在严格的服务优先权,循环调度器在这些类之间轮流提供服务。类1的分组被传输,接着是类2的分组,依次来回循环。一个所谓的保持工作排队规则在有分组排队等待传输时,不允许链路保持空闲。
一种通用形式的循环排队(加权公平排队),到达的分组被分类并在合适的每个类的等待区域排队
网络层分组被称为数据报。
IPv4数据报中的关键字段如下:
并不是所有链路层协议都能承载相同长度的网络层分组。一个链路层帧能承载的最大数据量叫做最大传送单元(Maximum Transmission Unit,MTU)。因为每个IP数据报封装在链路层帧中从一台路由器阐述道下一台路由器,故链路层协议的MTU严格的限制着IP数据报的长度。
如何将过大的IP分组挤进链路层帧的有效载荷字段?解决方法是将IP数据报中的数据分片成多个较小的IP数据报,用单独的链路层帧封装这些较小的IP数据报,然后通过输出链路发送这些帧,每个这些较小的数据报都被称为片(fragment)。片在到达目的地运输层以前需要重新组装。TCP和UDP都希望从网络层收到完整的、未分片的报文,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个步骤的过程:
由于新的子网和IP节点增加,32比特的IP地址空间即将用尽,为了应对这种对大IP地址空间的需求,开发出一种新的IPv6协议。
IPv6数据报格式
以下是IPv6中定义的字段
与IPv4相比,IPv6有几部分内容不复存在