1. 4.1显示了一个简单网络,其中包含两台主机H1H2,以及H1H2之间的路径上的多台路由器。让我们假设H1正在向H2发送信息,并考虑网络层在这些主机和中间路由器中的角色。H1的网络层从H1的传输层获取数据段,将每个数据段封装成数据报,然后将数据报发送到附近的路由器R1。在接收主机H2处,网络层从附近的路由器R2接收数据报,提取传输层数据段,然后将数据段向上传输到H2处的传输层。**每个路由器的主要数据平面角色是将数据报从其输入链路转发到其输出链路;网络控制平面的主要角色是协调这些本地的、每个路由器的转发操作,以便数据报最终沿源主机和目的主机之间的路由器路径进行端到端传输。**请注意,图4.1中的路由器显示了截断的协议栈(truncated protocol stack),也就是说,在网络层之上没有上层,因为路由器不运行我们在第2章和第3章中讨论的应用层和传输层协议。<br />![image.png](https://cdn.nlark.com/yuque/0/2021/png/12377925/1637248890512-53e645bf-bf1e-40e8-a0af-08e28b232795.png#clientId=uad3efe34-d950-4&from=paste&height=886&id=u2d23e01c&margin=%5Bobject%20Object%5D&name=image.png&originHeight=886&originWidth=825&originalType=binary&ratio=1&size=242359&status=done&style=none&taskId=uc632f1e2-c1c3-415e-9225-bee8ce5952d&width=825)<br />**Figure 4.1 ♦ The network layer**<br />**图4.1♦网络层**

4.1.1 转发和路由:数据和控制平面 Forwarding and Routing: The Data and

Control Planes 网络层的主要作用看起来很简单——将数据包从发送主机传输到接收主机。为此,可以确定两个重要的网络层功能:

  • 转发(Forwarding)。当数据包到达路由器的输入链路时,路由器必须将数据包移动到适当的输出链路。例如,图4.1中从主机H1到达路由器R1的数据包必须转发到通往H2路径上的下一台路由器。正如我们将看到的,转发只是在数据平面中实现的一个功能(尽管是最常见和最重要的功能!)。 在更一般的情况下(我们将在4.4节中介绍),数据包也可能被阻止离开路由器(例如,如果数据包源自已知的恶意发送主机,或者如果数据包的目的地是被禁止的目的地主机),或者可能被复制并通过多个传出链路发送。
  • 路由(Routing)。网络层必须确定数据包从发送方流向接收方时所采用的路由或路径。计算这些路径的算法称为路由算法(routing algorithms)。例如,在图4.1中,路由算法将确定数据包从H1流向H2的路径。路由在网络层的控制平面中实施。

术语转发和路由经常被讨论网络层的作者互换使用。在本书中,我们将更加准确地使用这些术语。转发是指路由器本地操作,即将数据包从输入链路接口传输到适当的输出链路接口。转发发生的时间非常短(通常为几纳秒),因此通常在硬件中实现。路由是指确定数据包从源到目的地所采用的端到端路径的网络范围内的过程。路由发生的时间要长得多(通常是几秒),而且正如我们将看到的,通常是在软件中实现的。使用我们的驾驶类比,考虑一下我们的旅行者在1.3.1节中从宾夕法尼亚州到佛罗里达州的旅行。在这次旅行中,我们的司机在去佛罗里达的路上经过了许多立交桥。我们可以把转发看作是通过一次立交的过程:一辆车从一条路进入立交,然后决定它应该走哪条路离开立交。我们可以把路由看作是计划从宾夕法尼亚州到佛罗里达州的旅行的过程:在开始旅行之前,司机已经查阅了地图,并从许多可能的路径中选择了一条,每条路径都由一系列在交叉口连接的路段组成。
每台网络路由器中的一个关键元素是其转发表(forwarding table)。路由器通过检查到达的数据包首部中一个或多个字段的值,然后使用这些首部值索引到其转发表来转发数据包。为这些值存储在转发表条目(forwarding table entry)中的值指示该数据包将被转发到的该路由器的传出链路接口。例如,在图4.2中,报头字段值为0110的数据包到达路由器。路由器索引其转发表,并确定此数据包的输出链路接口为接口2。然后,路由器在内部将数据包转发到接口2。在第4.2节中,我们将深入路由器内部,更详细地研究转发功能。转发是由网络层的数据平面功能执行的关键功能。
image.png
Figure 4.2 ♦ Routing algorithms determine values in forward tables
图4.2♦路由算法确定转发表中的值

控制平面:传统方法 Control Plane: The Traditional Approach

但现在您无疑会想知道路由器转发表最初是如何配置的。这是一个至关重要的问题,它暴露了转发(在数据平面)和路由(在控制平面)之间的重要相互作用。如图4.2所示,路由算法决定路由器转发表的内容。在本例中,路由算法在每台路由器中运行,路由器中同时包含转发和路由功能。正如我们将在5.3和5.4节中看到的,一台路由器中的路由算法功能与其他路由器中的路由算法功能通信,以计算其转发表的值。这种交流是如何进行的?通过根据路由协议(routing protocol)交换包含路由信息的路由报文(routing messages)!我们将在5.2至5.4节中介绍路由算法和协议。
通过考虑网络的假设(和不现实的,但技术上可行的)情况,可以进一步说明转发和路由功能的不同和目的的不同,其中所有转发表都是由实际存在于路由器的人工网络操作员直接配置的。在这种情况下,不需要任何路由协议!当然,操作员需要相互交互以确保转发表的配置方式使数据包到达其预期目的地。人工配置也可能比路由协议更容易出错,响应网络拓扑变化的速度也要慢得多。因此,我们很幸运,所有网络都同时具有转发和路由功能!

控制平面:SDN方法 Control Plane: The SDN Approach

实施图4.2中所示的路由功能的方法(每台路由器都有一个与其他路由器的路由组件通信的路由组件)一直是路由供应商在其产品中采用的传统方法,至少最近是这样。然而,我们观察到人类可以手动配置转发表,这表明控制平面功能可能还有其他方法来确定数据平面转发表的内容。
图4.3显示了另一种方法,在该方法中,物理上分离的远程控制器(remote controller)计算并分发要由每台路由器使用的转发表。请注意,图4.2和4.3的数据平面组件是相同的。但是,在图4.3中,控制平面路由功能与物理路由器是分开的——路由设备只执行转发,而远程控制器计算和分发转发表。遥控器可以在远程数据中心实现,具有很高的可靠性和冗余性,并且可以由ISP或某个第三方进行管理。路由器和远程控制器如何通信?通过交换包含转发表和其他路由信息的报文(message)。图4.3中所示的控制平面方法是软件定义网络(software-defined networking,SDN)的核心,因为计算转发表和与路由器交互的控制器是在软件中实现的,因此网络是“软件定义的”。而且,这些软件实现也是开放的,也就是说,类似于Linux操作系统代码,代码是公开的,允许ISP(以及网络研究人员和学生!)对控制网络层功能的软件进行创新并提出更改建议。我们将在第5.5节介绍SDN控制平面。
image.png
Figure 4.3 ♦ A remote controller determines and distributes values in forwarding tables
图 4.3 ♦ 遥控器确定并分配转发表中的值

4.1.2 网络服务模型 Network Service Model

在深入研究网络层的数据平面之前,让我们以更广泛的视角来结束我们的介绍,并考虑网络层可能提供的不同类型的服务。当发送主机的传输层将数据包传输到网络中(即,将其向下传递到发送主机的网络层)时,传输层能否依靠网络层将数据包传送到目的地?当发送多个数据包时,它们是否会按发送顺序传送到接收主机的传输层?发送两次连续数据包传输之间的时间量是否与接收数据包之间的时间量相同?网络是否会提供有关网络拥塞的反馈?这些问题和其他问题的答案取决于网络层提供的服务模型。网络服务模型(network service model)定义了在发送主机和接收主机之间端到端传输数据包的特性。
现在让我们考虑一下网络层可以提供的一些可能的服务。这些服务可能包括:

  • 保证交付(Guaranteed delivery)。此服务可保证源主机发送的数据包最终会到达目的主机。
  • 有保证的交付和有限的延迟(Guaranteed delivery with bounded delay)。该服务不仅保证数据包的传递,而且保证在指定的主机到主机延迟范围内(例如,在100毫秒内)传递。
  • 按顺序递送数据包(In-order packet delivery)。此服务保证数据包按其发送顺序到达目的地。
  • 保证最小带宽(Guaranteed minimal bandwidth)。此网络层服务模拟发送主机和接收主机之间指定比特率(例如1 Mbps)的传输链路的行为。只要发送主机以低于指定比特率的速率传输位(作为数据包的一部分),则所有数据包最终都会传送到目的主机。
  • 安全(Security)。网络层可以在源端加密所有数据报,在目的端解密它们,从而为所有传输层数据段提供机密性。

这只是网络层可以提供的服务的一部分列表——有无数种可能的变化。
互联网的网络层提供单一服务,称为尽力而为服务(best-effort service)使用尽力而为服务时,既不能保证数据包按其发送顺序接收,也不能保证其最终交付不能保证端到端的延迟,也不能保证最低的带宽保证。可能看起来尽力而为服务是完全没有服务的委婉说法——没有向目的地传送数据包的网络将满足尽力而为传送服务的定义!其他网络体系结构已经定义和实现了超越互联网尽力而为服务的服务模型。例如,ATM网络体系结构[Black 1995]提供了有保证的有序延迟、有界延迟和有保证的最小带宽。也有人提议对Internet体系结构进行服务模型扩展;例如,Intserv体系结构[RFC1633]旨在提供端到端延迟保证和无拥塞通信。有趣的是,尽管有这些成熟的替代方案,但因特网的基本尽力而为服务模型与充分的带宽供应和带宽自适应应用级协议(如我们在第2.6.2节中遇到的DASH协议)相结合,已被证明不仅“足够好”,可以支持令人惊叹的一系列应用程序,包括Netflix和IP视频服务等流式视频服务,以及Skype和Facetime等实时会议应用程序。

第4章总览 An Overview of Chapter 4

现在已经概述了网络层,我们将在本章的后续小节中介绍网络层的数据平面组件。在4.2节中,我们将深入研究路由器的内部硬件操作,包括输入和输出数据包处理、路由器的内部交换机制以及数据包排队和调度。在第4.3节中,我们将介绍传统的IP转发,即根据数据包的目的IP地址将其转发到输出端口。我们将遇到IP寻址、著名的IPv4和IPv6协议等。在第4.4节中,我们将介绍更一般的转发,在这种转发中,可以根据大量的首部值(即,不仅仅是基于目的IP地址)将数据包转发到输出端口。数据包可能会在路由器上被阻止或复制,或者可能会重写某些首部字段值——所有这些都是在软件控制下进行的。这种更通用的数据包转发形式是现代网络数据平面(包括软件定义网络(SDN)中的数据平面)的关键组件。在4.5节中,我们将学习除了转发之外还可以执行功能的“中间盒(middleboxes)”。
我们在这里顺便提到,转发和交换(forwarding and switching)这两个术语经常被计算机网络研究人员和实践者互换使用;我们也将在本教科书中互换使用这两个术语。在我们谈到术语的主题时,还值得一提的是另外两个经常互换使用的术语,但我们会更加谨慎地使用这两个术语。我们将保留术语数据包交换(packet switch),以表示根据数据包首部字段中的值将数据包从输入链路接口传输到输出链路接口的通用数据包交换设备。有些数据包交换机称为链路层交换机(link-layer switches,在第6章中介绍),它们的转发决策基于链路层帧(link-layer frame)字段中的值;因此,交换机称为链路层(第2层)设备。其他数据包交换机(称为路由器(router))根据网络层数据报中的首部字段值做出转发决策。因此,路由器是网络层(第3层)设备。(要完全理解这一重要区别,您可能需要复习1.5.2节,其中我们将讨论网络层数据报和链路层帧以及它们之间的关系。)。由于本章的重点是网络层,因此我们将主要使用路由器这一术语来代替数据包交换机。