第5章网络层 网络层是互联网体系结构中最重要的一层,其主要任务是向上层提供主机到主机的通 信服务。网络层的关键设备是路由器,其主要功能包括分组转发和路由选择。 IP) 本章主要内容包括网络层的控制平面和数据平面功能概述,互联网协议(以及IP 数 据报格式,IP 分组转发的算法,互联网控制报文协议(的报文格式、 ICMP) 种类以及应用实 例,路由选择协议的分类以及路由选择协议RIP 、OSPF 和BGP,网络地址转换(NAT)和虚 拟专用网络(VPN)的基本概念,多协议标记交换(MPLS)的概念和典型应用。 5.网络层概述 1 在第3、4章中,已经介绍了应用层协议和传输层协议,它们都是在网络边缘部分的主机 中实现的。本章主要介绍的网络层协议与之不同,不论在网络边缘部分的主机上,还是在网 络核心部分的路由器上,都会实现网络层协议。 从第1章已经知道,互联网采用的交换方式是分组交换。分组交换是一种动态地按需 分配通信资源的交换方式。实现分组交换的关键设备是网络核心部分的路由器,其任务是 将收到的分组转发到下一个网络。路由器中的网络层是本章介绍的重点。 5.1 传统网络的控制平面和数据平面 1. 路由器是一种具有多个接口的专用计算机,每个接口连接了不同的网络。每个网络可 以采用不同的体系结构或不同的协议实现,也就是说路由器能够连接异构的网络。 路由器的主要功能包括分组转发和路由选择,其中分组转发功能属于数据平面,路由选 择功能属于控制平面。每台路由器由实现路由选择功能的控制平面和实现分组转发功能的 数据平面构成。一个传统的路由器结构如图5. 1所示。 图5. 1 路由器的结构 ·170· (1)控制平面的核心构件是路由选择处理机。路由选择处理机的任务包括利用路由选 择协议与其他的路由器通信,获得网络拓扑结构的相关信息;根据获取的信息,利用路由选 择算法计算到目的网络的路由,构造和更新路由表。 (2)数据平面由一组输入接口、一组输出接口和交换结构组成。交换结构是数据平面 的核心构件,它的任务是通过分组转发算法查找转发表,将输入分组转发到适当的输出接 口;输入接口在执行必要的物理层和数据链路层功能后,将收到的分组放入接口输入队列, 如图5.2(a)所示;输出接口从交换结构接收分组并将其放入接口输出队列,在执行必要的数 据链路层和物理层功能后,将分组发送出去,如图5.所示。 2(b) 图5. 2 输入接口和输出接口 交换结构可以采用多种方法实现。常见的方法包括内存交换、总线交换和互连网络交 换。数据平面中的转发表是由控制平面中的路由表得到的。路由表一般由软件实现,其数 据结构适用于网络拓扑变化后,对其进行高效地增、删和更新操作;而转发表一般由硬件实 现,其数据结构适用于快速查找操作。虽然二者采用了不同的实现方式,但本书在介绍路由 器原理和网络层原理时,对路由表和转发表不做区分。 3所示。 传统网络的控制平面是分布式实现的。每台路由器中都包含控制平面,如图5. 图5. 3 传统网络的控制平面与数据平面 ·171· 每台路由器通过路由协议与其他路由器交换网络拓扑信息,独立维护路由表(转发表)。路 由表包括目的前缀(CIDR前缀)、掩码、转发接口或者下一跳IP地址等信息,每个路由表项 指明到某一个CIDR地址块的路径信息。 传统网络的数据平面采用基于目的地址的转发策略。路由器根据收到分组的目的IP 地址,查找转发表,3节中介绍。如果要提供 转发分组。关于路由表和分组转发算法将在5. 分组过滤、加密等服务,则需要在路由器上安装运行支撑软件,如虚拟专用网络(virtual privatenetwork,VPN)软件、网络地址转换(networkaddrestranslation,NAT)软件、防火 墙(软件等。 firewal) 5.2 软件定义网络的控制平面和数据平面 1. 软件定义网络(softwaredefinednetwork,SDN)是一种将控制平面和数据平面分离,构 建可编程控制的网络体系结构。SDN的网络交换设备仅需实现数据平面的功能,而控制平 面的功能集中在远程控制器上实现。为区别于传统路由器,SDN将受控网络交换设备称为 SDN网元(t,或SDN交换机。SDN的控制平面和数据平面如图5. 所示。 networkelemenNE) 4 图5. 4SDN的控制平面与数据平面 SDN控制平面的实现是集中式的。SDN的控制逻辑全部在SDN控制器中实现,SDN 控制器通过控制数据平面接口(controltodata-planeinterface,CDPI)对SDN交换机进行 控制和管理,控制数据平面接口也称为南向接口(southboundinterface,SBI )。SDN控制器 ·172· 与SDN 交换机之间的通信基于OpenFlow 协议。SDN 交换机通过OpenFlow 协议向SDN 控制器传递本地观察到的事件;SDN 控制器利用收集到的这些事件,管理网络状态信息,维 护流表(lal并通过Opnow 协议将流表下发给SDN 交换机。流表包括匹配域 fowtbe) , eFl(matchfields)、计数器集(counters)和动作(actions)等信息,每个流表项是一条规则,指明 与流表项匹配的分组应该执行的动作。 流表的匹配域是首部字段的集合。OpenFlow 协议规范允许基于一组首部字段与收到 的分组进行匹配操作,这些首部字段分别来自传输层协议首部、网络层协议首部和数据链路 层协议首部。计数器集包括分组数、字节数、持续时间等已经与该表项匹配的分组的统计数 据。动作是指当收到的分组与流表项匹配时应该采取的转发、丢弃、修改指定的首部字段等 操作。 SDN 控制器通过北向接口(northboundinterfaces,NBI)向网络控制应用程序开放编程 能力。网络控制应用程序利用SDN 控制器提供的API 来定义和控制网络设备中的数据平 面。例如,一个路由选择应用程序可以定义分组转发规则;一个防火墙应用程序可以定义分 组通过或丢弃规则。如果需要在SDN 中提供额外的服务,仅需要编写并部署新的网络控制 应用程序,不需要在SDN 控制器或SDN 交换机中安装软件。 SDN 的数据平面采用通用转发策略,即基于流表的转发策略。SDN 交换机根据所收 分组中的首部字段,匹配流表,执行匹配的动作。由于SDN 的转发策略能够匹配协议栈中 的多个首部字段,比传统路由器更“通用”,因此SDN 的分组转发被称为通用转发。 SDN 控制平面与数据平面的分离会带来以下优点。 (1)网络的全局优化。集中式的控制平面更易于进行网络的全局优化。 (2)灵活性。通过开发新的网络控制应用程序可以部署新业务,更易于新业务的灵活 和快速部署。 (3)开放性。传统网络设备中的控制平面功能由网络设备厂商开发实现,与网络设备 捆绑销售,SDN 的北向接口向软件企业开放了编程能力,可使更多的软件企业参与网络控 制应用程序的开发。 SDN 的控制平面与数据平面分离也会带来以下问题。 (1)服务能力问题。随着网络规模的扩大,集中式控制结点的服务能力有可能成为网 络性能的瓶颈。 (2)单点故障问题。SDN 控制器的故障会造成整个受控网络发生故障,因此SDN 控 制器通常以控制器集群的形式存在。 (3)高可用性问题。传统网络设备的控制平面和数据平面集成在一起,数据平面与控 制平面的通信延迟极小,数据平面具备高可用性,但SDN 的控制平面与数据平面通过网络 远程连接,网络的延迟可能会带来数据平面可用性问题。 虽然SDN 已经提出并发展多年,目前也已经有很多支持SDN 的网络设备面世并应用 , 部分基于SDN 的网络已经商用,但是在互联网领域,由于以下几点原因,SDN 仍不可能完 全取代传统网络。 (1)SDN 仍然没有统一的国际标准。 (2)互联网上已经部署了大量的传统网络设备。 (3)互联网中自治系统之间所用的路由协议为边界网关协议(bordergateway ·173 · protocol,BGP),它的功能和作用仍不可替代。 在目前的互联网中,传统网络仍然占据较大市场。本书的介绍依然以传统网络为主,关 注SDN的读者可以参考相关专业书籍进行学习。 1.本章的主要协议 5.3 本章主要介绍以下协议。 (1)互联网协议(nentprtcl, ItreoooIP )。网络层核心协议以及传输层的TCP 、UDP等 协议的数据都通过IP数据报传输。 (2)互联网控制报文协议(Internetcontrolmesageprotocol,ICMP )。它提供与网络 配置信息和IP数据报处置相关的诊断和控制信息。 ICMP报文直接封装在IP数据报内传输,从封装层次看与TCP 、UDP等传输层协议一 致,但是ICMP是IP的辅助协议,必须与IP一起实现。通常ICMP被认为是网络层协议, 也有人将其归为3.即网络层和传输层之间的协议。 5层协议, (3)路由协议(routingprotocol)。它是路由器之间用来交换路由信息、链路状态信息 routinginformationprotoco 或网络拓扑信息的协议,主要包括路由信息协议(l,RIP )、开放 最短通路优先(openshortestpathfirst,OSPF)协议和边界网关协议(bordergatewayprotocol,BGP )。 RIP报文封装在UDP数据报中传输;OSPF协议报文直接封装在IP数据报中传输; BGP报文封装在TCP报文段中传输。从封装层次上看,RIP和BGP与应用层协议一致,而 OSPF与传输层协议一致。如果将路由选择看作一种特殊的应用,将路由器看作特殊的主 机,路由协议可以归为应用层协议。 从功能上看,各路由协议都是为路由器控制平面中的路由选择算法提供数据支持的。 由于路由选择功能属于网络层,本书将路由协议放在本章后面介绍。 (4)多协议标记交换(multi-protocollabelswitching,MPLS )。它为IP等网络层协议 提供面向连接的服务质量,支持流量工程(traficenginering,TE)和负载均衡(load balance,LB),支持MPLSVPN,在运营商和ISP中得到广泛应用。 5层协议。 MPLS首部位于数据链路层首部和网络层首部之间,因此也可以将其归为2. 与网络层IP相关的协议还有地址解析协议(addresresolutionprotocol,ARP )。从封 装层次上看,ARP与IP一致,封装在数据链路层的数据帧内传输,因此ARP通常被归为网 络层协议。但由于ARP的功能是将IP地址解析为数据链路层地址,与数据链路层关系紧 密,故有人将其归为2.本书将在第6 章中介绍。 5层协议。学习ARP需要用到数据链路层相关的知识, 5.互联网协议 2 5.1 互联网协议概述 2. 互联网协议(nentpoooIP) 是互 itrertcl,是TCP/IP协议族中两个最重要的协议之一, 联网的正式标准。IP的协议数据单元通常称为IP分组或IP数据报。目前有两个版本的 ·174· IP正在使用,分别是IPv4和IPv6。IPv4由RFC791规定,在RFC2474 、RFC3168和RFC6864 等文档中做了更新。IP6由RFC8200规定。本章介绍IP4,6的相关知识将在第7章 vvIPv 中介绍。本书中,如未特别说明,“”均代表IP4。 IPvIP是为了实现网络互连才设计的协议。利用IP,可以实现在不同网络之间转发分组。 当多个异构网络通过路由器互相连接起来后,如编址方案、 IP屏蔽了底层网络的实现细节( 协议格式等),向上层协议实体提供了统一的接口和服务。 如图5.路由器的每个接口连接一个网络, 可以是无 5所示, 这些网络的实现各不相同, 线局域网(wireleslocalareanetwork,WLAN )、以太网(Ethernet)、点对点网络或移动网络 等。采用IP后,路由器转发的都是统一的IP数据报,网络层地址都采用统一的IP地址,网 络层之上的协议实体都无须再考虑具体网络的实现细节,每一个具体网络的细节由数据链 路层协议实现。统一采用了IP的网络,也称为IP网络或简称IP网。 图5. 5IP数据报在互联网中的传送 在IP网络中,路由器的每个接口具有一个IP地址,这些IP地址属于不同的网络。在 第2章已经介绍了IP地址的相关知识,已经知道IP地址目前是按照CIDR的方案进行编 ·175· 址和管理的。在CIDR编址方案中,相同网络的含义为,在掩码作用下,具有相同网络前缀 的IP地址属于相同网络。与之类似,在掩码作用下,具有不同网络前缀的IP地址属于不同 网络。在本书后续的介绍中,如无特殊说明,“相同网络”和“不同网络”两个名词均指上述 含义。在 图5.5中,源主机H1 产生的IP数据报,经过多个路由器的转发,最终到达目的主机 H2。IP数据报的源IP地址IP1 和目的IP地址IP2 在传送过程中均不发生变化(暂不考虑 NAT)。IP地址唯一地标识了互联网上的一台主机,更确切地说,唯一地标识了该主机的一 个网络接口。因此,IP的作用范围是源主机的网络接口到目的主机的网络接口,如图5.6 所示。 图5.6 IP的作用范围 IP向上层仅提供简单灵活的、无连接的、尽力而为服务的数据报服务。在发送IP数据 报时不需要先建立连接。每一个IP数据报独立发送,与其前后的IP数据报无关。IP不提 供服务质量的承诺。也就是说,所传送的IP数据报可能出错、丢失、重复和失序,当然也不 保证IP数据报交付的时限。 5.2.2 IP数据报格式 为了观察IP数据报,在Linux虚拟网络环境中构建如图5.7所示网络拓扑①,然后利用 Linux的nc命令从主机ns56A 向主机ns57C 发起UDP 通信②,观察IP 数据报的首部 格式。执 行如下Linux命令,利用UDP,从主机ns56A 向主机ns57C 发送长度3500B 的 文件。 #ip netns exec ns57C nc -lvu 4499>3500.1 #ip netns exec ns56A nc -u 192.168.57.254 4499<3500.0 在主机ns56A 上,启动Wireshark软件截获IP数据报如图5.8所示。3500B数据经过 UDP和IP的处理后,被分为3个IP数据报发送,Wireshark为其编号1~3。图5.8中显示 的是2号IP数据报。 IP数据报封装在数据链路层帧内部,由IP首部和数据部分组成。IP首部长度为20~ 60B,其中前20B是固定首部,其余是不超过40B的选项部分,如图5.9所示。 ·176· ①② 本实验网络拓扑的配置脚本可以参考本书配套电子资源。 执行命令前,需要关闭网卡GSO功能。网卡GSO功能允许将IP分片操作交给网卡执行,如果不关闭GSO,用 Wireshark截获数据时,在发送方不能观察到IP分片。 图5. 7 网络层通信实例拓扑图 图5. 8IP 数据报实例 ·177· 图5. 9IP数据报格式 IP数据报的固定首部各字段含义如下。 1.版本 版本字段指IP的版本号,占4位。 图5.8所示IP数据报实例的2号数据报中,版本字段值为4,代表IPv4。 2.首部长度 首部长度字段指IP首部长度,占4位。首部长度以4B(32位)为单位,因此IP首部长 度必须是4B的整数倍。首部长度最大取值为15,对应IP首部最大长度为60B,因此IP首 部的选项部分长度不超过40B 。 如图5.在IP数据报实例的2号数据报中, 代表IP首部长 8所示, 首部长度字段值为5, 度为20B 。这说明该IP数据报仅包含20B固定首部,未包含选项。 3.区分服务 区分服务(diferentiatedservices,DS)字段和紧随其后的ECN字段共占8位。这8位 最初被RFC791定义为服务类型(e,字段,可以为IP数据报定义优先级, typeofservicToS) 用来为IP提供差异化服务。IETF在RFC2474中重新定义了服务类型字段,但仅使用了前 6位,命名为区分服务(DS)字段。重新定义的DS字段与早期的服务类型字段能够部分 兼容。 支持区分服务(DS)功能的结点称为DS结点。DS结点根据DS字段的值来处理IP数 据报的转发。因此,利用DS字段的不同值就可提供不同等级的服务质量。互联网建议标准 RFC2474中将DS字段的取值称为区分服务码点(diferentiatedservicescodepoint,DSCP), 6位DS字段可以定义64个DSCP 。 o如表5. RFC2474和RFC8436按照用途将64个DSCP分为3个池(pol), 1所示,表中 x可取值0或1。 DS结点依据DSCP值对IP数据报采取的转发处理行为称为每跳行为(per-hopbehavior,PHB )。RFC2474要求对每跳行为的描述应该足够清晰。因具有公共约束条件, 而能够同时实现的一组PHB被称为PHB组(PHBgroup)。 ·178· 表5. 1 DSCP用途 池DSCP空间用途 1 xxxxx0 标准用途 2 xxxx11 实验或本地用途 3 xxxx01 标准用途① ①RFC2474中规定将池3初始定义为实验或本地用途,当池1的空间耗尽时,转为标准用途。2018年RFC8436 发布时,虽然池1空间尚未耗尽,但是已经定义了22个标准DSCP,因此将池3的用途转为标准用途。2019年,RFC8622 定义了第一个属于池3的DSCP 。 1)默认PHB DSCP的默认值为全“0”,该DSCP值对应的PHB称为默认PHB(defaultPHB,DF PHB )。默认PHB采用常规的尽力而为服务(bestefort)的IP数据报转发策略。 2)类别选择PHB组 RFC2474规定,按照从高位到低位的顺序,DS字段的第0~2位与早期服务类型字段 中的优先级定义保持兼容,DS字段中的第3~5位均为“0”的DSCP值称为类别选择码点 (classelectorcodepoint),其对应的PHB称为类别选择PHB(classelectorPHB,CS PHB)组。CSPHB的定义如表5. 2所示。 表5.服务类型和典型应用 2 DSCP定义、 服务类型DSCP名称DSCP值PHB定义典型应用是否应用AQM 保留(未定义) CS7 111000 RFC2474 网络控制CS6 110000 RFC2474 BGP路由协议是 电话语音(容量 许可) VOICE-ADMIT 101100 RFC5865 IP电话语音否 电话语音EF 101110 RFC3246 IP电话语音否 电话信令CS5 101000 RFC2474 IP电话信令否 多媒体会议AF41 AF42 AF43 100010 100100 100110 RFC2597 视频会议 是 (每PHB) 实时交互CS4 100000 RFC2474 交互式游戏否 多媒体流AF31 AF32 AF33 011010 011100 011110 RFC2597 音频或视频点播 是 (每PHB) 广播视频CS3 011000 RFC2474 IPTV广播否 低延迟数据AF21 AF22 AF23 010010 010100 010110 RFC2597 基于Web的客户-服务器应用 是 (每PHB) 操作和维护CS2 010000 RFC2474 网络维护是 ·179·