在网络中的每一台主机和路由器中都有一个网络层部分。
网络层能够被分解为两个相互作用的部分,即数据平面和控制平面。
- 数据平面:即网络层中每台路由器的功能,该数据平面功能决定到达路由器输入链路之一的数据报(即网络层的分组)如何转发到该路由器的输出链路之一。
- 控制平面:即网络范围的逻辑,该控制平面功能控制数据报沿着从源主机到目的主机的端到端路径中路由器之间的路由方式。
4.1 网络层概述
每台路由器的数据平面的主要作用是从其输入链路向其输出链路转发数据报;控制平面的主要作用是协调这些本地的每路由器转发动作,使得数据报沿着源和目的地主机之间的路由器路径最终进行端到端传送。
4.1.1转发和路由选择:数据平面和控制平面
网络层作用:将分组从一台发送主机移动到一台接收主机。
两种重要的网络层功能:
- 转发:当一个分组到达某路由器的一条输入链路时,该路由器必须将该分组移动到适当的输出链路。转发是在数据平面中实现的唯一功能
- 路由选择:当分组从发送方流向接收方时,网络层必须决定这些分组所采用的路由或路径。计算这些路径的算法被称为路由选择算法
转发(forwarding)是指将分组从一个输入链路接口转移到适当的输出链路接口的路由器本地动作。转发发生的时间尺度很短(通常为几纳秒),因此通常用硬件来实现。
路由选择(routing)是指确定分组从源到目的地所采取的端到端路径的网络范围处理过程。路由选择发生的时间尺度长得多(通常为几秒),因此通常用软件来实现。
例子:转发就像通过单个立交桥的过程:一辆汽车从其道路上进入立交桥的一个入口,并且决定应当走哪条路来离开该立交桥。我们可以把路由选择看作是规划从宾夕法尼亚州到佛罗里达州行程的过程:在着手行程之前,驾驶员已经查阅了地图并在许多可能的路径中选择一条,其中每条路径都由一系列经立交桥连接的路段组成。
网络路由器中有一个关键元素是它的转发表:路由器检査到达分组首部的一个或多个字段值,进而使用这些首部值在其转发表中索引,通过这种方法来转发分组。这些值对应存储在转发表项中的值,指出了该分组将被转发的路由器的输出链路接口。
1.控制平面:传统的方法
在每一个路由器中的单独路由器算法元件,在控制平面进行交互
2.控制平面:SDN方法
每台路由器都有一个与其他路由器的路由选择组件通信的路由选择组件。
远程控制器计算和分发转发表以供每台路由器所使用。
而在上图中,控制平面路由选择功能与物理的路由器是分离的,即路由选择设备仅执行转发,而远程控制器计算并分发转发表。
显示在上图中的控制平面方法是软件定义网络(Soft-ware-Defined Networking, SDN)的本质,因为计算转发表并与路由器交互的控制器是用软件实现的,故网络是“软件定义”的。
4.1.2 网络服务模型
问题: 从发送方主机到接收方主机传输数据报的“通道”网络提供什么样的服务模型?
-
对于单个数据报的服务:
-
确保交付。该服务确保分组将最终到达目的地
-
具有时延上界的确保交付。该服务不仅确保分组的交付,而且在特定的主机到主机
时延上界内交付。
-
-
对于数据报流的服务:
- 有序分组交付。该服务确保分组以它们发送的顺序到达目的地。
- 确保最小带宽。这种网络层服务模仿在发送和接收主机之间一条特定比特率)的传输链路的行为。
- 安全性。网络层能够在源加密所有数据报并在目的地解密这些分组,从而对所有运 输层报文段提供机密性。
网络层提供了单一的服务,称为尽力而为服务
分组交换机是指一台通用分组交换设备,它根据分组首部字段中的值,从输入链路接口到输出链路接口转移分组。
- 某些分组交换机称为链路层交换机,基于链路层帧中的字段值做出转发决定
- 其他分组交换机称为路由器,基于网络层数据报中的首部字段值做岀转发决定。
4.2 路由器工作原理
关注网络层的转发功能,即实际将分组从一台路由器的入链路传送到适当的出链路
下图显示了一个通用路由器体系结构的总体视图,其中标识了一台路由器的4个组件。
- 输入端口。它在路由器中执行终结入物理链路的物理层功能,它还要与位于入链路远端的数据链路层交互来执行数据链路层功能,在输入端口还要执行查找功能,分别对应左中右三个窗口
- 交换结构。交换结构将路由器的输入端口连接到它的输岀端口。
- 输出端口。输出端口存储从交换结构接收的分组,并通过执行必要的链路层和物理层功能在输出链路上传输这些分组。
- 路由选择处理器。路由选择处理器执行控制平面功能。
任何一个端口既是输入端口,又是输出端口
分布式交换:
- 根据数据报头部的信息如:目的地址,在输入端口内存中的转发表中查找合适的输出端口(匹配+行动)
- 基于目标的转发:仅仅依赖于IP数据报的目标IP地址(传统方法)
- 通用转发:基于头部字段的任意集合进行转发
4.2.1 输入端口处理和基于目的地转发
路由器使用转发表来查找输出端口,使得到达的分组能经过交换结构转发到该输出端口。转发表是由路由选择处理器计算和更新的(使用路由选择协议与其他网络路由器中的路由选择处理器进行交转发表从路由选择处理器经过独立
转发表从路由选择处理器经过独立总线(例如一个PCI总线)复制到线路卡。
路由器用分组目的地址的前缀(prefix)与该表中的表项进行匹配;如果存在一个匹配项,则路由器向与该匹配项相关联的链路转发分组。
最长前缀匹配
即在该表中寻找最长的匹配项,并向与最长前缀匹配相关联的链路接口转发分组。
最长前缀匹配:在路由器中经常采用TCAMs(ternary content addressable memories)硬件来完成
- 内容可寻址:将地址交给TCAM,它可以在一个时钟周期内检索出地址,不管表空间有多大
- Cisco Catalyst系列路由器: 在TCAM中可以存储多达约为1百万条路由表项
输入端口缓存
当交换机构的速率小于输入端口的汇聚速率时,在输入端口可能要排队
4.2.2 交换
交换结构位于一台路由器的核心部位, 因为正是通过这种交换结构, 分组才能实际地从一个输入端口交换(即转发)到一个输出端口中。
交换速率:分组可以按照该速率从输入传输到输出
-
运行速度经常是输入/输出链路速率的若干倍
-
N 个输入端口:交换机构的交换速度是输入线路速度的N倍比较理想,才不会成为瓶颈
3种典型的交换机构
- 经内存交换
- 在CPU直接控制下的交换,采用传统的计算机。
- 分组被拷贝到系统内存,CPU从分组的头部提取出目标地址,查找转发表,找到对应的输出端口,拷贝到输出端口
- 转发速率被内存的带宽限制 (数据报通过BUS两遍)
- 一次只能转发一个分组
- 经总线交换
- 数据报通过共享总线,从输入端口转发到输出端口,不需要路由选择处理器的干预。
- 总线竞争: 交换速度受限于总线带宽
- 1次处理一个分组
- 经互联网络交换
- 同时并发转发多个分组,克服总线带宽限制
- Banyan(榕树)网络,crossbar(纵横)和其它的互联网络被开发,将多个处理器连接成多处理器
- 当分组从端口A到达,转给端口Y;控制器短接相应的两个总线
- 高级设计:将数据报分片为固定长度的信元,通过交换网络交换
4.2.3 输出端口处理
输出端口处理取出已经存放在输出端口内存中的分组并将其发送到输出链路上。
当数据报从交换机构的到达速度比传输速率快,就需要输出端口缓存
4.2.4 何处出现排队
在输入端口和输出端口处都可以形成分组队列,排队的位置和程度(或者在输入端口排队,或者在输岀端口排队)将取决于流量负载、交换结构的相对速率和线路速率。
随着这些队列的增长,路由器的缓存空间最终将会耗尽,并且当无内存可用于存储到达的分组时将会出现丢包(packet loss)
假定输入线路速度与输出线路速度(传输速率)是相同的,均为Rline (单位为每秒分组数),并且有N个输入端口和N个输出端口。假设所有分组具有相同的固定长度,分组以同步的方式到达输入端口。
定义交换结构传送速率Rswitch为从输入端口到输出端口能够移动分组的速率
如果Rline比Rswitch快N倍,则在输入端口处仅会出现微不足道的排队。
1.输入排队
如果交换结构不能快得(相对于输入线路速度而言)使所有到达分组无时延地通过它传送,在输入端口也将岀现分组排队,因为到达的分组必须加入输入端口队列中,以等待通过交换结构传送到输出端口。
2.输出排队
到达N个输入端口的每个端口的分组,其目的地是相同的输出端口。因为输出端口在一个单位时间(该分组的传输时间)内仅能传输一个分组,这N个到达分组必须排队(等待)经输岀链路传输。
当没有足够的内存来缓存一个入分组时,就必须做出决定:要么丢弃到达的分组(采用一种称为弃尾(drop tail)的策略),要么删除一个或多个已排队的分组为新来的分组腾出空间。
4.2.5 分组调度
现在讨论排队的分组如何经输出链路传输的问题
调度: 选择下一个要通过链路传输的分组
1.FIFO (first in first out) scheduling: 按照分组到来的次序发送
丢弃策略: 如果分组到达一个满的队列,哪个分组将会被抛弃?
tail drop: 丢弃刚到达的分组
priority: 根据优先权丢失/移除分组
random: 随机地丢弃/移除
2.优先权调度:发送最高优先权的分组
当选择一个分组传输时,优先权排队规则将从队列为非空(也就是有分组 等待传输)的最高优先权类中传输一个分组。在同一优先权类的分组之间的选择通常以FIFO方式完成
3.循环和加权公平排队
Round Robin (RR) scheduling:
在循环排队规则(nnmcl robin queuing discipline)下,分组像使用优先权排队那样被分类。
一个所谓的保持工作排队(work .conserving queuing)规则在有(任何类的)分组排队等待传输时,不允许链路保持空闲。
Weighted Fair Queuing (WFQ):
一般化的Round Robin
在一段时间内,每个队列得到的服务时间是: Wi/(XIGMA(Wi))*t,和权重成正比
每个类在每一个循环中获得不同权重的服务量
4.3 网际协议:IPv4、寻址、IPv6及其他
4.3.1 IPv4数据报格式
网络层分组被称为数据报
IPv4数据报格式:
- 版本(号):这4比特规定了数据报的IP协议版本。通过查看版本号,路由器能够确定如何解释IP数据报的剩余部分。
- **首部长度:**用这4比特来确定IP数据报中载荷实际开始的地方。大多数IP数据报不包含选项, 所以一般的IP数据报具有20字节的首部
- **服务类型:**以便使不同类型的IP数据报(例如,一些特别要求低时延、高吞吐量或可靠性的数据报)能相互区别开来。
- 数据报长度:这是IP数据报的总长度(首部加上数据),以字节计。该字段长为16比特,所以IP数据报的理论最大长度为65535字节
- 标识、标志、片偏移:这三个字段与所谓IP分片有关
- 寿命:寿命(TTL)字段用来确保数据报不会永远(如由于长时间的路由选择环路)在网络中循环。每当一台路由器处理数据报时,该字段的值减1。若TTL字段减为0,则该数据报必须丢弃
- 协议:该字段值指示了IP数据报的数据部分应交给哪个特定的运输层协议。值为6表明 数据部分要交给TCP,而值为17表明数据要交给UDP。协议号是将网络层与运输层绑定到一起的黏合剂,而端口号是将运输层和应用层绑定到一起的黏合剂。
- 首部检验和:首部检验和用于帮助路由器检测收到的IP数据报中的比特错误。计算方法:将首部中的每2个字节当作一个数,用反码算术对这些数求和。
- 源和目的IP地址:当某源生成一个数据报时,它在源IP字段中插入它的IP地址,在目的IP地址字段中插入其最终目的地的地址。
- 选项:选项字段允许IP首部被扩展(在IPv6去除了)
- 数据(有效载荷):大多数情况下,IP数据报中的数据字段包含要交付给目的地的运输层报文段(TCP或UDP)。然而,该数据字段也可承载其他类型的数据
4.3.2 IPv4数据报分片
并不是所有链路层协议都能承载相同长度的网络层分组。一个链路层帧能承载的最大数据量叫作最大传送单元(MTU)
解决较大MTU转发到较小MTU链路上的方法是将IP数据报中的数据分片成两个或更多个较小的IP数据报,用单独的链路层帧封装这些较小的IP数据报,然后通过输出链路发送这些帧。每个这些较小的数据报都称为片
-
当生成一个数据报时,发送主机在为该数据报设置源和目的地址的同时贴上标识号。当目的地从同一发送主机收到一系列数据报时,它能够检查数据报的标识号以确定哪些数据报实际上是同一较大数据报的片。
-
最后一个片的标志比特被设为0,而所有其他片的标志比特被设为1,用来判断是否收到最后一个片
-
为了让目的主机确定是否丢失了一个片(且能按正确的顺序重新组装片),使用偏移字段指定该片应放在初始IP数据报的哪个位置
4.3.3 IPv4 编址
主机与物理链路之间的边界叫作接口
一个IP地址与一个接口相关联,而不是与包括该接口的主机或路由器相关联。路由器有两个或以上个接口
IP地址用点分十进制记法(dotled decimal notation)书写,地址中的每个字节用它的十进制形式书写,各字节间以句点隔开,比如地址193.32.216.9的二进制记法是:
11000001 00100000 11011000 00001001
在全球因特网中的每台主机和路由器上的每个接口,都必须有一个全球唯一的IP地址。一个接口的IP地址的一部分需要由其连接的子网来决定
中左上侧的3台主机以及它们连接的路由器接口,都有一个形如223.1.1.xxx的IP地址。互联这3个主机接口与1个路由器接口的网络形成一个子网
IP编址为这个子网分配一个地址223.1.1.0/24,其中的**/24记法,有时称为子网掩码**(network mask),指示32比特中的最左侧24比特定义了子网地址。
系统定义子网:
为了确定子网,分开主机和路由器的每个接口,产生几个隔离的网络岛,使 用接口端接这些隔离的网络的端点。这些隔离的网络中的每一个都叫作一个子网(subnet)
因特网的地址分配策略被称为无类别域间路由选择(Classless Inlerdomain Routing, CIDR)。当使用子网寻址时,32比特的IP地址被划分为两部分,并且也具有点分十进制数形式 a.h.c.d/x ,其中x指示了地址的第一部分中的比特数
形式为a.b.c.d/x的地址的x最高比特构成了IP地址的网络部分,并且经常被称为该地址的前缀(prefix)(或网络前缀)
特殊IP地址:
- 子网部分: 全为 0—本网络
- 主机部分: 全为0—本主机
- 主机部分: 全为1–广播地址,这个网络的所有主机
一个地址的剩余32-x比特可认为是用于区分该组织内部设备的
在CIDR被采用之前,IP地址的网络部分被限制为长度为8、16或24比特,这是一种 称为分类编址(classful addressing)的编址方案,这是因为具有8、16和24比特子网地址的子网分别被称为A、B和C类网络
一个C类(/24)子网仅能容纳多达28-2 =254 (28=256, 其中的两个地址预留用于特殊用途)台主机
当一台主机发出一个目的地址为**255.255.255.255(IP广播地址)**的数据报时,该报文会交付给同一个网络中的所有主机
如何获取一块地址?
- 系统管理员将地址配置在一个文件中
- 用动态主机配置协议DHCP: Dynamic Host Configuration Protocol: 从服务器中动态获得一个IP地址。它又常被称为即插即用协议或零配置协议
对于一台新到达的主机而言,DHCP协议是一个4个步骤的过程,yiddr (表示“你的因特网地址”之意)指示分配给该新到达客户的地址
- DHCP服务器发现:一台新到达的主机的首要任务是发现一个要与其交互的DHCP服务器。可通过使用DHCP发现报文来完成
- **DHCP服务器提供:**DHCP服务器收到一个DHCP发现报文时,用DHCP提供报文向客户做出响应,该报文向该子网的所有节点广播,仍然使用IP广播地址255.255.255.255
- **DHCP请求:**新到达的客户从一个或多个服务器提供中选择一个,并向选中的服务器提供用DHCP请求报文进行响应,回显配置的参数。
- DHCP ACK:服务器用DHCP ACK报文对DHCP请求报文进行响应,证实所要求的参数
一旦客户收到DHCP ACK后,交互便完成了,并且该客户能够在租用期内使用DHCP分配的IP地址
DHCP缺点:为每当节点连到一个新子网,要从DHCP得到一个新的IP地址,当一个移动节点在子网之间移动时,就不能维持与远程应用之间的TCP连接
4.3.4 网络地址转换
- 到每个IP使能的设备都需要一个IP地址。
网络地址转换(Network Address Translation ,NAT)
具有专用地址的地域是指其地址仅对该网络中的设备有意义的网络
从广域网到达NAT路由器的所有数据报都有相同的目的IP地址,路由器使用NAT路由器上的一张NAT转换表(NAT translation table),并且在表项中包含了端口号及其IP地址。
NAT动机:本地网络只有一个有效IP地址
- 不需要从ISP分配一块地址,可用一个IP地址用于所有的(局域网)设备–省钱
- 可以在局域网改变设备的地址情况下而无须通知外界
- 可以改变ISP(地址变化)而不需要改变内部的设备地址
- 局域网内部的设备没有明确的地址,对外是不可 见的–安全
4.3.5 IPv6
1.IPv6数据报格式
与IPv4的区别:
- 扩大的地址容量:IPv6将IP地址长度从32比特增加到128比特。除了单播与多播地址以外,IPv6还引入了一种称为任播地址的新型地址,这种地址可以使数据报交付给一组主机中的任意一个
- 简化高效的40字节首部:40字节定长首部允许路由器更快地处理IP数据报
- 流标签:该字段可 用于“给属于特殊流的分组加上标签,这些特殊流是发送方要求进行特殊处理的流,如一种非默认服务质量或需要实时服务的流” 。
IPv6数据报的结构更简单、更高效
- 版本。该4比特字段用于标识IP版本号。IPv6将该字段值设为6
- 流量类型。该8比特字段与IPv4中的TOS字段的含义相似
- 流标签。该20比特的字段用于标识一条数据报的流,能够对一条流中的某些数据报给出优先权,或者它能够用来对来自某些应用的数据报给岀更高的优先权,以优于来自其他应用的数据报。
- 有效载荷长度。该16比特值作为一个无符号整数,给出了IPv6数据报中跟在定长的40字节数据报首部后面的字节数量
- 下一个首部。该字段标识数据报中的内容(数据字段)需要交付给哪个协议(如TCP或UDP)
- 跳限制。转发数据报的每台路由器将对该字段的内容减1。如果跳限制计数达到0,则该数据报将被丢弃。
- 源地址和目的地址。
- 数据。这是IPv6数据报的有效载荷部分。
几个从IPv4移出的字段:
- 分片/重新组装:IPv6不允许在中间路由器上进行分片与重新组装。只能在源与目的地执行。如果路由器收到的IPv6数据报因太大而不能转发出链路,路由器只需丢掉该数据报,并向发送方发回一个“分组太大”的ICMP差错报文即可。于是发送方能够使用较小长度的IP数据报重发数据
- 首部检验和:运输层(如TCP与UDP)和数据链路层(如以太网)协议执行了检验操作,故删除了网络层的检验功能
- 选项:选项字段不再是标准IP首部的一部分了。但它并没有消失,而是可能出现在IPv6首部中由“下一个首部”指出的位置上。
2.从IPv4到IPv6的迁移
基于IPv4的公共因特网如何迁移到IPv6呢?
- 宣布一个标志日,即指定某个日期和时间,届时因特网的所有机器都关机并从IPv4升级到IPv6。此方案是不可行的
- 建隧道。基本思想:假定两个IPv6节点要使用IPv6数据报进行交互,但它们是经由中间IPv4路由器互联的。将两台IPv6路由器之间的中间IPv4路由器的集合称为一个隧道,在IPv4路由器之间传输的IPv4数据报中携带IPv6数据报
4.4 通用转发和SDN
还有其他种类繁多网络设备(中间盒):
- 交换机;防火墙;NAT;IDS;负载均衡设备
- 未来:不断增加的需求和相应的网络设备
- 需要不同的设备去实现不同的网络功能
- 每台设备集成了控制平面和数据平面的功能
- 控制平面分布式地实现了各种控制平面功能
- 升级和部署网络设备非常困难
互联网网络设备:传统方式都是通过分布式,每台设备的方法来实现数据平面和控制平面功能
传统方式实现网络功能的问题
- 垂直集成>昂贵、不便于创新的生态
- 分布式、固化设备功能==网络设备种类繁多
基于目的地转发的特征总结为两个步骤:
- 查找目的IP地址址(“匹配”)
- 然后将分组发送到有特定输出端口的交换结构(“动作”)
的通用“匹配加动作”范式
能够对协议栈的多个首部字段进行“匹配” ,这些首部字段是与不同层次的不同协议相关联的。
“动作”能够包括:
- 将分组转发到一个或多个输出端口(就像在基于目的地转发中一样)
- 跨越多个通向服务的离开接口进行负载均衡分组(就像在负载均衡中一样)
- 重写首部值(就像在NAT中一样)
- 有意识地阻挡/丢 弃某个分组(就像在防火墙中一样)
- 为进一步处理和动作而向某个特定的服务器发送一个分组(就像在DPI —样)
下图中的转发设备更为准确地描述为“分组交换机”而不是第三层“路由器”或第二层“交换机”。下图显示了位于每台分组交换机中的一张匹配加动作表,该表由远程控制器计算、 安装和更新。
OpenFlow是一个得到高度认可和成功的标准,匹配加动作转发表在OpenFlow中称为流表(flow table),它的每个表项包括:
- 首部字段值的集合,入分组将与之匹配。
- 计数器集合。这些计数器可以包括已经与该表项匹配的分组数量,以及自从该表项上次更新以来的时间
- 当分组匹配流表项时所采取的动作集合。包括将分组转发到给定的输出端口,丢弃该分组、复制该分组和将它们发送到多个输岀端口,和/或重写所选的首部字段。
4.4.1 匹配
下图为OpenFlow 1. 0流表的11个分组首部字段
流表项也可以有通配符。例
- 一个流表中IP地址
128.119.*.*
将匹配其地址的前16比特为128. 119的任何数据报所对应的地址字段。
4.4.2 动作
流表项如果有多个动作,它们以在表中规定的次序执行。
- 转发。一个入分组可以转发到一个特定的物理输岀端口,广播到所有端口(分组到达的端口除外),或通过所选的端口集合进行多播。
- 丢弃。没有动作的流表项表明某个匹配的分组应当被丢弃。
- 修改字段。在分组被转发到所选的输出端口之前,分组首部10个字段中的值可以重写。
4.4.3 匹配加动作操作中的OpenFlow例子
书本p235页,主要讲了一些例子
总结:在本章中,我们讨论了网络层的数据平面(data plane)功能,即每台路由器的如下功能:决定到达路由器的输入链路之一的分组如何转发到该路由器的输岀链路之一