网络层概述
前一章中,我们了解到运输层实现了进程和进程间的相互通信,运输层的通讯则是依赖于网络层,而网络层则提供了主机到主机间的通信。

如何实现主机到主机间的通信呢?这涉及到网络层的两大主要功能:转发和路由选择。我们可以将网络层分为数据平面和控制平面,其中数据平面的主要功能为转发,即网络层中每台路由器的功能,该数据平面功能决定到达路由器输入链路之一的数据报如何转发到该路由器的输出链路之一。而控制平面则是控制数据报沿着从源主机到目的主机的端到端路径中路由器之间的路由方式,即路由选择。
最后,网络层仅提供一种服务,即尽力而为服务,因是尽力而为,所以我们也认为其是根本无服务的委婉说法,即它不保证按序发送,也不保证可靠服务,既不保证端到端时延,又不保证最小带宽等等。即便如此,网络层也是现今网络的一个组成部分,提供了足够好的网络服务。
数据平面
我们将约定术语分组交换机是指一台通用分组交换设备,它根据分组首部字段中的值,从输入链路接口到输出链路接口转移分组。某些分组交换机成为链路层交换机,基于链路层帧中的字段值做出转发决定,这些交换机因此被称为链路层设备。其他分组交换机称为路由器,基于网络层数据报中的首部字段值做出转发决定。路由器因此是第三层设备。
路由器工作原理
下图显示了通用路由器体系结构的总体视图,其中包含了一台路由器的4各组件:
- 输入端口。输入端口执行几项重要功能。它在路由器中执行终结入物理链路的物理层功能,这显示在图中输入端口部分最左侧的方框与输入端口部分最右侧的方框中。它还要与位于入链路远端的数据链路层交互来执行数据链路层功能,这显示在输入与输出端口部分中间的方框中。更为重要的是,在输入端口还要执行查找功能,这显示在输入端口最右侧的方框中。正是在这里,通过查询转发表决定路由器的输出端口,到达的分组通过路由器的交换结构转发到输出端口。
- 交换结构。交换结构将路由器的输入端口连接到它的输出端口。
- 输出端口。输出端口存储从交换结构接收的分组,并通过执行必要的链路层和物理层功能在输出链路上传输这些分组。
- 路由选择处理器。路由选择处理器执行控制平面功能。在传统的路由器中,它执行路由选择协议,维护路由选择表与关联链路转态信息,并为该路由器计算转发表。在SDN路由器中,路由选择处理器负责与远程控制器通信,目的是接收由远程控制器计算的转发表项,并在该路由器的输入端口安装这些表项。

输入端口处理
在输入接口中数据报可能会有以下操作,查找、阻塞、排队和调度。其中最重要的当属查找功能,而最简单的查找方式为为基于最长前缀匹配规则进行查找,并转发。
输入端口中会接收物理层数据,并将物理层链路层帧进行拆封,获得网络层数据报,然后使用转发表来查找输出端口,如果交换结构正在使用,则一个分组可能会在进入交换接口前被暂时阻塞。因此,一个被阻塞的分组必须要在输入端口处排队,并等待稍后被调度以通过交换结构。

交换结构转发
交换结构的主要任务为转发,即将分组从一个输入端口交换(转发)到一个输出端口中。而交换方式有多种:
- 经内存交换。
- 经总线交换。
- 经互联网络交换。
输出端口处理
输出端口取出已经存放在输出端口内存中的分组并将其发送到输出链路上。这包括选择和取出排队的分组进行传输,执行所需的链路层和物理层传输功能。

排队及丢包
排队的情况会在输入端口或输出端口中出现,当交换结构不能以足够快的速度将分组从输入端口交换到输出端口时,输入端口中就会出现排队,相对的,当输出端口不能已足够快的速度将分组传输到链路中时,输出端口中也可能出现排队的现象。更进一步地,当输入端口或输出端口中的缓存空间被占满,并且当无内存可用于存储到达的分组时将会出现丢包。
网际协议
上一节中我们知道了路由器的运行原理,但是网络层提供的主机间的通讯主要是在网际协议的基础上进行的,为此我们需要深入了解IP协议是如何运作的。
IPv4
IPv4数据报格式

IPv4编址
我们先简述一下主机与路由器连入网络的方法。一台主机通常只有一条链路连接到网络;当主机中的IP想要发送一个数据报时,它就在该链路上发送。主机与物理链路之间的边界叫作接口。现在考虑一台路由器及其接口。因为路由器的任务时从链路上接收数据报并从某些其他链路转发出去,路由器必须拥有两条或更多条链路与它连接。路由器与它的任意一条链路之间的边界也叫接口。一台路由器因此有多个接口,每个接口有其链路。因为每台主机与路由器都能发送和接收IP数据报,IP要求每台主机和路由器接口拥有自己的IP地址。因此,从技术上讲,一个IP地址与一个接口相关联,而不是与包括该接口的主机或路由器相关联。

每个IP地址长度为32比特。
在全球因特网中的每台主机和路由器上的每个接口,都必须有一个全球唯一的IP地址。然而,这些地址不能随意地自由选择。一个接口的IP地址的一部分需要由其连接的子网来决定。子网的范围可大可小,一般是基于组织机构进行划分的,而组织机构又存在复杂的嵌套(附属)关系,因此构成了现在复杂的网络结构。
IPv4一共有2^32个地址,存在专门的组织将这些地址分配给不同的国家、组织或机构,一种直接的划分方法为子网划分,而一种方便的表示方法为子网掩码,即通过指定网络地址和位数n来确定网络范围。
DHCP
在了解网络如何编址后,我们再看看组织是如何为其设备分配地址块的。首先系统管理员可以手动给用户分配地址,但是我们知道有更管理员友好的方式分配网络地址,即动态主机配置协议DHCP。DHCP允许主机自动获取网络地址,可以分为以下四步:
- DHCP服务器发现。一台先到达的主机的首要任务是找到一个DHCP服务器,这可以通过广播发送DHCP发现报文来完成。
- DHCP服务器提供。DHCP服务器收到一个DHCP发现报文时,用DHCP提供报文向客户作出相应,该报文向该子网的所有节点广播。
- DHCP请求。新到达的客户从一个或多个服务器提供中选择一个,并向选中的服务器提供用DHCP请求报文进行响应,回显配置的参数。
- DHCP ACK。服务器用DHCP ACK报文对DHCP请求报文进行响应,证实所要求的的参数。

NAT
我们需要认识到,因为IPv4地址的越来越稀缺,网络的后续使用者一般不需要或不被允许直接使用IPv4地址,比如家庭网络和校园网络,幸运的是,网络地址转换满足了我们这个要求:它能将对单一IP地址的请求映射为对专用网络内的不同IP地址的请求,从而在实现了一个LAN(实现了LAN中多台设备的互联)的同时,对于外部网络来说看起来又只是具有单一IP地址的单一设备。
NAT基本上是将单一地址+端口号的组合映射为专用网络(内网LAN)的IP地址+端口号的组合。
IPv6
随着网络的发展,IPv4地址越来越吃紧,虽然有像NAT这样的技术缓解了IP地址的耗尽,但确只是延缓了结果的到来。所以IPv6应运而生,其最主要的特点是管够,甚至地球上的每个砂砾都可以用IP地址进行寻址了。
IPv6数据报结构

通用转发和SDN
通用转发传统上仅仅基于分组的目的地址。我们可以将基于目的地转发的特征总结为两个步骤:查找目的IP地址,然后将分组发送到有特定输出端口的交换结构。而我们现在考虑一种更为一般性、综合性的行为范式,它是基于不同层次的不同字段进行匹配并执行相应动作的,这就是软件定义网络(Software-Defined Networking, SDN)的本质。SDN的匹配和动作更为一般化:
OpenFlow是一个得到高度认可和成功的标准,他已经成为匹配加动作转发抽象、控制器以及更为一般的SDN革命等概念的先驱。我们将主要考虑OpenFlow1.0,该标准以特别清晰和简明的方式引入了关键的SDN抽象和功能。匹配加动作转发表在OpenFlow中称为流表,它的每个表项包括:
- 首部字段值的集合,如分组将与之匹配。
- 计数器集合。
- 当分组匹配流表项时所采取的动作集合。
控制平面
控制平面作为一种网络范围的逻辑,不仅控制沿着从源主机到目的主机的端到端路径间的路由器如何转发数据报,而且控制网络层组件和服务如何配置和管理。
传统上,控制平面功能与数据平面的转发功能在一起实现,在路由器中作为统一的整体。而软件定义网络(SDN)在数据平面和控制平面之间做了明确分割,在一台分离的“控制器”服务中心实现了控制平面功能,该控制器服务于它所控制的路由器的转发组件完全分开并远离。
转发表(在基于目的地转发的场景中)和流表(在通用转发的场景中)是链接网络层的数据平面和控制平面的首要要素。
关于转发表和流表是如何计算、维护和安装的,这里有两种方式:
- 每路由控制。每台路由器中都包含转发和路由选择功能。每台路由器有一个路由选择组件,用于与其他路由器中的路由选择组件通信,以计算其转发表的值。OSPF和BGP协议都是基于这种每路由器的方法进行控制的。
- 逻辑集中式控制。在控制平面中逻辑集中式控制器计算并分发转发表以供每台路由器使用。该控制器经过一种定义良好的协议与每台路由器中的一个控制代理(CA)进行交互,已配置和管理该路由器的转发表。而CA一般具有最少的功能,其任务是与控制器通信并且按控制器命令行事。与每路由控制的路由选择算法不同的是,这些CA既不能直接相互交互,也不能主动参与计算转发表。这是每路由器控制和逻辑集中式控制之间的关键差异。
路由选择算法
- 集中式路由选择算法。用完整的、全局性的网络知识计算出从源到目的地之间的最低开销路径。链路状态算法就是集中式路由选择算法。
- 分散式路由选择算法。路由器以迭代、分布式的方式计算出最低开销路径。没有节点拥有关于所有网络链路开销的完整信息。典型的分散式路由选择算法有距离向量路由选择算法。
在前面的路由选择算法中,我们把网络看作是路由器互联的集合。以这种方式来使用路由选择算法是不可行的主要有两个原因:
- 规模。随着终端、边缘网络和核心网络的扩展,与网络中所有的路由器交互信息的复杂度成数量级增加,涉及网络中所有路由器的路由选择算法将不可行。
- 管理自治。而从前面章节中我们了解到,网络其实是由许多大大小小的ISP构成的,而每个ISP都希望按自己的意愿运行路由器,并对外部隐藏自己网络的内部组织面貌。
这两个问题都能通过将路由器组织进自治系统(Autonomous System, AS)来解决,每个AS通常由一组出在相同管理控制下的路由器组成。
在一个自治系统内运行的路由选择算法叫作自治系统内部路由选择协议。而开放最短路径优先(OSPF)就是内部路由选择协议,其也是一种链路状态算法。
而有自治系统内部路由选择协议,当然也就有自治系统间路由选择协议。边界网关协议(Border Gateway Prototocol,BGP)就是自治系统间路由选择协议,其也是所有因特网中最重要的协议。
SDN控制平面
SDN体系结构具有4个关键特征:
- 基于流的转发。SDN控制的交换机的愤怒组转发工作,能够基于运输层、网络层或链路层首部中任意数量的首部字段值进行。分组转发规则被精确规定在交换机的流表中;SDN控制平面的工作是计算、管理和安装所有网络交换机中的流表项。
- 数据平面与控制平面分离。数据平面由网络交换机自称,交换机是相对简单的设备,该设备在他们的流表中执行“匹配加动作”的规则。控制平面由服务器以及决定和管理交换机流表的软件组成。
- 网络控制功能:位于数据平面交换机外部。如图所示,控制平面自身由两个组件组成:一个SDN控制器(或网络操作系统),以及若干网络控制应用程序。控制器魏旭准确的网络状态信息并提供操作方法,应用程序通过这些方法能够件事、编程和控制下面的网络设备。
- 可编程的网络。通过运行在控制平面中的网络控制应用程序,我们可以可编程式的实现网络的控制,例如负载均衡,流量控制、访问控制、防火墙等等。

SDN控制平面:SDN控制器和SDN网络控制应用程序
基于网络层的基本划分,我们可以SDN体系结构分为数据平面与控制平面,而SDN体系结构的控制平面有能分为SDN控制器和SDN网络控制应用程序。而随着SDN控制器的发展,SDN控制器演进出了一个通用的SDN控制器分层视图,如下图所示。自底向上,我们可以将其大体分为三个层次:

- 通信层:负责SDN控制器和受控网络设备之间的通信。显然SDN控制器和受控网络设备(如交换机、路由器等)进行交互,需要一个协议来统一它们之间的信息交互方式,而这个协议则构成了控制器体系结构的最底层,作为SDN控制器和设备间的通信接口。OpenFlow就是一个提供这种交互功能的特定协议。
- 网络范围状态管理层。用于维护受控设备的流表,这些流表中的信息则表现为网络范围的一种显式状态。
- 与网络控制应用程序层的接口。定义了网络控制应用程序和控制器的交互方式。提供不同类型的API,我们将看到两种流行SDN控制器使用REST请求响应接口与他们的应用程序进行通信。
ICMP:因特网控制报文协议
因特网控制报文协议(ICMP),被主机和路由器用来彼此沟通网络层的信息。典型的ICMP应用包括ping程序和traceroute程序等。
网络管理和SNMP
网络管理的定义:
网络管理包括了硬件、软件和人类元素的设置、综合和协调,以监视、测试、轮询、配置、分析、评价和控制网络及网元资源,用合理的成本满足实时性、运营性能和服务质量的要求。
网络管理框架

- 网络服务器。管理服务器是执行网络管理活动的地方,它控制网络管理信息的收集、处理、分析或显示。正是在这里,人类网络管理员与网络设备打交道,发起控制网络行为的动作。
- 被管设备。顾名思义,被管设备就是被管理网络中的设备,可以是一台主机、路由器、交换机、中间盒等联网设备。在一个被管设备中,有几个所谓被管对象。这些被管对象是被管设备中硬件的实际部分(例如,一块网卡)和用于这些硬件及软件组件的配置参数。
- 管理信息库。一个被管设备中的每个被管对象的关联信息收集在管理信息库中,这些信息可供管理服务器所用。
- 网络管理代理。在每个被管设备中还驻留有网络管理代理,它是运行在被管设备中的一个进程,该进程与管理服务器通信,在管理服务器的命令和控制下在被管设备中采取本地动作。
- 网络管理协议。该协议运行在管理服务器和被管设备之间,允许管理服务器查询被管设备的状态,并经过其代理间接的在这些设备上采取行动。
发表回复