《计算机网络 自顶向下方法》读书笔记 第4章 网络层:数据平面

第4章 网络层:数据平面

4.1网络层概述

1.每台路由器的数据平面的主要作用是从其输入链路向其输出链路转发数据报;控制平面的主要作用是协调这些本地的每路由器转发动作,使得数据报沿着源和目的地主机之间的路由器路径最终进行端到端传送。

2.网络层的2种重要功能:

  • 转发。当一个分组到达某路由器的一条输入链路时,该路由器必须将该分组移动到适当的输出链路。转发发生的时间尺度很短(通常为几纳秒),因此通常用硬件来实现。
  • 路由选择。当分组从发送方流向接收方时,网络层必须决定这些分组所采用的路由或路径。计算这些路径的算法被称为路由选择算法。路由选择发生的时间尺度长得多(通常为几秒),因此通常用软件来实现。

3.每台网络路由器中有一个关键元素是它的转发表。路由器检查到达分组首部的一个或多个字段值,进而使用这些首部值在其转发表中索引,通过这种方法来转发分组。这些值对应存储在转发表项中的值,指出了该分组将被转发的路由器的输出链路接口。

4.因特网的网络层提供了单一的服务,称为尽力而为服务。使用尽力而为的服务,传送的分组既不能保证以它们发送的顺序被接收,也不能保证它们最终交付;既不能保证端到端时延,也不能保证有最小的带宽。

5.分组交换机是指一台通用分组交换设备,它根据分组首部字段中的值,从输入链路接口到输出链路接口转移分组。某些分组交换机称为链路层交换机,基于链路层帧中的字段值做出转发决定,这些交换机因此被称为链路层设备。其他分组交换机称为路由器,基于网络层数据报中的首部字段值做出转发决定。路由器因此是网络层设备。

4.2路由器工作原理

1.路由器有4个主要组件:

  • 输入端口。输入端口执行几项重要功能。它在路由器中执行终结入物理链路的物理层功能。它还要与位于入链路远端的数据链路层交互来执行数据链路层功能。在输入端口还要执行查找功能。通过查询转发表决定路由器的输出端口,到达的分组通过路由器的交换结构转发到输出端口。控制分组从输入端口转发到路由选择处理器。
  • 交换结构。交换结构将路由器的输入端口连接到它的输出端口。这种交换结构完全包含在路由器之中。
  • 输出端口。输出端口存储从交换结构接收的分组,并通过执行必要的链路层和物理层功能在输出链路上传输这些分组。
  • 路由选择处理器。路由选择处理器执行控制平面功能。在传统的路由器中,它执行路由选择协议,维护路由选择表与关联链路状态信息,并为该路由器计算转发表。在软件定义网络(Software-Defined Networking, SDN)路由器中,路由选择处理器负责与远程控制器通信,目的是接收由远程控制器计算的转发表项,并在该路由器的输入端口安装这些表项。

2.路由器用分组目的地址的前缀与转发表中的表项进行匹配。如果存在一个匹配项,则路由器向与该匹配项相关联的链路转发该分组。当有多个匹配时,该路由器使用最长前缀匹配规则,即在表中寻找最长的匹配项,并向与最长前缀匹配相关项的链路接口转发分组。

3.交换结构的3中交换技术:

  • 经内存交换。最简单、最早的路由器是传统的计算机,在输入端口与输出端口之间的交换是在CPU的直接控制下完成的。一个分组到达一个输入端口时,该端口会先通过中断方式向路由选择处理器发出信号。于是,该分组从输入端口处被复制到处理器内存中。路由选择处理器则从其首部中提取目的地址,在转发表中找出适当的输出端口,并将该分组复制到输出端口的缓存中。在这种情况下,如果内存带宽为每秒可写进内存或从内存读出最多B个分组,则总的转发吞吐量必然小于B/2。
  • 经总线交换。在这种方法中,输入端口经一根共享总线将分组直接传送到输出端口,不需要路由选择处理器的干预。通常按以下方式完成该任务:让输入端口为分组预先计划一个交换机内部标签(首部),指示本地输出端口,使分组在总线上传送和传输到输出端口。该分组能由所有输出端口收到,但只有与该标签匹配的端口才能保存该分组。然后标签在输出端口被去除,因为其仅用于交换机内部来跨越总线。如果多个分组同时到达路由器,每个位于不同的输出端口,除了一个分组外所有其他分组必须等待,因为一次只有一个分组能够跨越总线。因为每个分组必须跨过单一总线,故路由器的交换带宽受总线速率的限制。
  • 经互联网络交换。克服单一、共享式总线带宽限制的一种方法是,使用一个更复杂的网络。纵横式交换机就是一种由2N条总线组成的互联网络,它连接N个输入端口与N个输出端口。每条垂直的总线在交叉点与每条水平的总线交叉,交叉点通过交换结构控制器能够在任何时候开启和关闭。纵横式交换机是非阻塞的,即只要没有其他分组当前被转发到该输出端口,转发到输出端口的分组将不会被到达输出端口的分组阻塞。然而,如果来自两个不同输入端口的两个分组其目的地为相同的输出端口,则一个分组必须在输入端等待。

4.假定输入线路速度与输出线路速度是相同的,均为Rline,并且有N个输入端口和N个输出端口。定义交换结构传送速率Rswitch为从输入端口到输出端口能够移动分组的速率。

如果交换结构不能快得使所有到达分组无时延地通过它传送,在输入端口将出现分组排队,因为到达的分组必须加入输入端口队列中,以等待通过交换结构传送到输出端口。这种现象叫做输入排队交换机中的线路前部(Head-Of-the-Line, HOL)阻塞,即在一个输入队列中排队的分组必须等待通过交换结构发送,因为它被位于线路前部的另一个分组所阻塞。

假定Rswitch比Rline快N倍,并且到达N个输入端口的每个端口的分组,其目的地是相同的输出端口。在这种情况下,在向输出链路发送一个分组的时间内,将有N个新分组到达该输出端口。因为输出端口在一个单位时间内仅能传输一个分组,这N个到达分组必须排队经输出链路传输。在正好传输N个分组之一的时间中,可能又到达N个分组。所以,分组队列能够在输出端口形成,及时交换结构比端口线路速率快N倍。最终,排队的分组数量能够变得足够大,好近输出端口的可用内存。当没有足够的内存来缓存一个入分组时,就必须做出决定:要么丢弃到达的分组(弃尾策略),要么删除一个或多个已排队的分组为新来的分组腾出空间。分组丢弃于标记策略统称为主动队列管理(Active Queue Management, AQM)算法。

5.当有大量的TCP流(N条)流过一条链路时,缓存所需要的数量是
B=RTTC/N B = RTT \cdot C / \sqrt{N}
其中,C为链路的容量。

6.分组调度规则:

  • 先进先出(First-In-First-Out, FIFO)链路调度规则按照到达输出链路队列的相同次序来选择分组在链路上传输。
  • 优先权排队规则下,到达输出链路的分组被分类放入输出队列中的优先权类。在非抢占式优先权排队规则下,一旦分组开始传输,就不能打断。
  • 循环排队规则下,分组像使用优先权排队那样被分类。然而,在类之间不存在严格的服务优先权,循环调度器在这些类之间轮流提供服务。保持工作排队规则在有分组排队等待传输时,不允许链路保持空闲。加权公平排队(Weighted Fair Queuing, WFQ)规则下,每个类在任何时间间隔内可能受到不同数量的服务。具体而言,每个类i被分配一个权wi。使用WFQ方式,在类i有分组要发送的任何时间间隔中,第i类将确保接受到的服务部分等于wi/(∑wj),分母中的和是计算所有分组排队等待传输的类别得到的。对于一条传输速率为R的链路,第i类总能获得至少为R ∙ wi/(∑wj)的吞吐量。

4.3网际协议:IPv4、寻址、IPv6及其他

1.IPv4数据报格式如图4-1所示。
《计算机网络 自顶向下方法》读书笔记 第4章 网络层:数据平面

图4-1 IPv4数据报

IPv4数据报中的关键字段如下:

  • 版本(号)。这4比特规定了数据报的IP协议版本。通过查看版本号,路由器能够确定如何解释数据报的剩余部分。不同的IP版本使用不同的数据报格式。
  • 首部长度(HLEN)。因为一个IPv4数据报包含一些可变数量的选项,故需要用这4比特来确定IP数据报中载荷实际开始的地方。
  • 服务类型(TOS)。服务类型比特包含在IPv4首部中,以便使不同类型的IP数据报能相互区别开来。
  • 总长度。这是IP数据报的总长度,以字节计。因为该字段长为16比特,所以IP数据报的理论最大长度为65535字节。
  • 标识、标志、分片偏移。这三个字段与所谓IP分片有关。
  • 生存时间。生存时间(Time-To-Live, TTL)字段用来确保数据报不会永远在网络中循环。每当一台路由器处理数据报时,该字段的值减1。若TTL字段减为0,则该数据报必须丢弃。
  • 协议。该字段通常仅当一个IP数据报到达其最终目的地时才会有用。该字段的值指示了IP数据报的数据部分应交给哪个特定的运输层协议。
  • 源和目的IP地址。当某源生成一个数据报时,它在源IP字段中插入它的IP地址,在目的IP地址字段中插入其最终目的地的地址。通常源主机通过DNS查找来决定目的地址。
  • 选项。选项字段允许IP首部被扩展。
  • 数据(有效载荷)。在大多数情况下,IP数据报中的数据字段包含要交付给目的地的运输层报文段。然而,该字段也可承载其他类型的数据,如ICMP报文。

2.一个链路层帧能承载的最大数据量叫做最大传送单元(Maximum Tranmission Unit, MTU)。因为每个IP数据报封装在链路层帧中从一台路由器传输到下一台路由器,故链路层协议的MTU严格地限制着IP数据报的长度。而发送方与目的地路径上的每段链路可能使用不同的链路层协议,且每种协议可能具有不同的MTU。解决该问题的方法是,将IP数据报中的数据分片成两个或更多个较小的IP数据报,用单独的链路层帧封装这些较小的IP数据报,然后通过输出链路发送这些帧。每个这些较小的数据报都成为

3.当生成一个数据报时,发送主机在为该数据报设置源和目的地址的同时贴上标识号。发送主机通常将它发送的每个数据报的标识号加1。当某路由器需要对一个数据报分片时,形成的每个片具有初始数据报的源地址、目的地址与标识号。当目的地从同一发送主机收到一系列数据报时,它能够检查数据报的标识号以确定哪些数据报实际上是同一较大数据报的片。由于IP是一种不可靠的服务,一个或多个片可能永远到达不了目的地。由于这种原因,为了让目的主机绝对地相信它已经收到了初始数据报的最后一个片,最后一个片的标志比特被设为0,而所有其他片的标志比特被设为1。另外,为了让目的主机确定是否丢失了一个片(且能按正确的顺序重新组装片),使用偏移字段指定该片应放在初始IP数据报的哪个位置。

4.主机与物理链路之间的边界叫作接口。因为每台主机与路由器都能发送和接收IP数据报,IP要求每台主机和路由器接口拥有自己的IP地址。因此,一个IP地址与一个接口相关联,而不是与包括该接口的主机或路由器相关联。

5.每个IPv4地址的长度为32比特。地址通常按照所谓点分十进制记法书写,即地址中的每个字节用它的十进制书写,各字节间以句点隔开。分开主机和路由器的每个接口,产生几个隔离的网络岛,使用接口端接这些隔离的网络端点。这些隔离的网络中的每一个都叫作一个子网。例如,考虑IP地址223.1.1.4,该地址有一个子网223.1.1.0/24,其中的/24记法,有时称为子网掩码

6.因特网的地址分配策略被称为无类别域间路由选择(Classless Interdomain Routing, CIDR)。CIDR将子网寻址的概念一般化了。当使用子网寻址时,32比特的IP地址被划分为两部分,并且也有点分十进制形式a.b.c.d/x,其中x指示了地址的第一部分中的比特数。前x比特构成了IP地址的网络部分,并且经常被称为该地址的前缀(或网络前缀)。一个组织通常被分配一块连续的地址,即具有相同前缀的一段地址。在这种情况下,该组织内部的设备的IP地址将共享共同的前缀。

​ 一个地址的剩余32 – x比特可认为是用于区分该组织内部设备的,其中的所有设备具有相同的网络前缀。当组织内部的路由器转发分组时,才会考虑这些比特。这些较低阶比特可能具有另外的子网结构。

7.IP地址255.255.255.255是广播地址。当一台主机发出一个目的地址为255.255.255.255的数据报时,该报文会交付给同一个网络中的所有主机。路由器也会有选择地向邻近的子网转发该报文。

8.动态主机配置协议(Dynamic Host Configutation Protocol, DHCP)允许主机自动获取一个IP地址、子网掩码、第一跳路由器地址(称为默认网关)与它的本地DNS服务器的地址。由于DHCP具有将主机连接进一个网络的网络相关方面的能力,故它由常被称为即插即用协议零配置协议

9.DHCP的4个步骤:

  • DHCP服务器发现。一台新到达的主机的首要任务是发现一个要与其交互的DHCP服务器。这可通过使用DHCP发现报文来完成,客户在UDP分组中向端口67发送该发现报文。该UDP分组封装在一个IP数据报中。其中使用广播目的地址255.255.255.255并且使用“本主机”源IP地址0.0.0.0。DHCP客户将该IP数据报传递给链路层,链路层然后将该帧广播到所有与该子网连接的节点。
  • DHCP服务器提供。DHCP服务器收到一个DHCP发现报文时,用DHCP提供报文向客户做出响应,该报文向该子网的所有节点广播,仍然使用IP广播地址255.255.255.255。每台服务器提供的报文包含有收到的发现报文的事物ID、向客户对剑的IP地址、网络掩码以及IP地址租用期,即IP地址有效的时间量。
  • DHCP请求。新到达的客户从一个或多个服务器提供中选择一个,并向选中的服务器提供用DHCP进行响应,回显配置的参数。
  • DHCP ACK。服务器用DHCP ACK报文对DHCP请求报文进行响应,证实所要求的参数。

10.网络地址转换(Network Address Translation, NAT)使能的路由器能对外界隐藏家庭网络的细节。NAT为家庭网络分配一个保留的IP地址空间,这种地址用于家庭网络等专用网络或具有专用地址的地域。具有专用地址的地域是指其地址仅对该网络中的设备有意义的网络。这就是说,这些地址仅在给定的网络中才有意义,对于外部网络无意义。所有离开家庭路由器流向更大因特网的报文都拥有一个源IP地址,且所有进入家庭的报文都拥有一个目的IP地址。NAT路由器上有一张NAT转换表,并且在表项中包含了端口号及其IP地址。NAT路由器利用NAT转换表对家庭网络内外的数据报进行转换。

11.IPv6数据报的格式如图4-2所示。
《计算机网络 自顶向下方法》读书笔记 第4章 网络层:数据平面

图4-2 IPv6数据报格式

IPv6中引入的最重要的变化显示在其数据报格式中:

  • 扩大的地址容量。IPv6将IP地址长度从32比特增加到128比特。IPv6还引入了一种称为任播地址的新型地址,这种地址可以使数据报交付给一组主机中的任意一个。
  • 简化高效的40字节首部。
  • 流标签。该字段用于给特殊流的分组加上标签,这些特殊流是发送方要求进行特殊处理的流。

IPv6中定义的字段:

  • 版本。该4比特用于标志IP版本号。
  • 流量类型。该8比特字段与IPv4中的TOS含义相似。
  • 流标签。该20比特的字段用于标识一条数据报的流,能够对一条流中的某些数据给出优先权,或者它能够用来对来自某些应用的数据报给出更高的优先权,以优先于来自其他应用。
  • 有效载荷长度。该16比特作为一个无符号整数,给出了IPv6数据报中跟在定长的40字节数据报首部后面的字节数据。
  • 下一个首部。该字段标识数据报中的内容需要交付给哪个协议。
  • 跳限制。转发数据报的每台路由器将对该字段的内容减1.如果跳限制计数达到0,则该数据报将被丢弃。
  • 源地址和目的地址。
  • 数据。这是IPv6数据报的有效载荷部分。

在IPv4中出现的几个字段在IPv6数据报中已不复存在:

  • 分片/重新组装。IPv6不允许在中间路由器上进行分片与重新组装。这种操作只能出现在源于目的地执行。如果路由器收到的IPv6数据报因太大而不能转发到出链路上,则路由器只需丢掉该数据报,并想发送方发回一个“分组太大”的ICMP差错报文即可。
  • 首部检验和。因为因特网中的运输层和数据链路层协议执行了检验操作,IP设计者大概觉得在网络层中具有该项功能实属多余,所以将其去除。
  • 选项。选项字段不再是标准IP首部的一部分了,但它并没有消失,而是可能出现在IPv6首部中由“下一个首部”指出的位置上。

4.4通用转发和SDN

1.将基于目的地转发的特征总结为两个步骤:查找目的IP地址(“匹配”),然后将分组发送到有特定输出端口的交换结构(“动作”)。现有一种更有意义的通用“匹配加动作”范式,其中能够对协议栈的多个首部字段进行“匹配”,这些首部字段是与不同层次的不同协议相关联的。

2.匹配加动作转发表在OpenFlow中成为流表,它的每个表项包括:

  • 首部字段值的集合。入分组将与之匹配。匹配不上流表项的分组将被丢弃或发送到远程控制器做更多处理。
  • 计数器集合。这些计数器可以包括已经与该表项匹配的分组数量,以及自从该表项匹配的分组数量,以及自从该表项上次更新以来的时间。
  • 当分组匹配流表项时所采取的动作集合。这些动作可能将分组转发到给定的输出端口,丢弃该分组、复制该分组和将它们发送到多个输出端口,和/或重写所选的首部字段。