与运输层和应用层不同的是,在网络中的每一台主机和路由器都有一个网络层部分,网络层能被分成两个相互作用的部分,即数据平面和控制平面。数据平面的功能,即网络层中每台路由器的功能,该数据平面功能决定到达路由器输入链路之一的数据报(即网络层分层)如何转发到该路由器的输出链路之一。网络层的控制平面功能,即网络范围的逻辑,该控制平面功能控制数据报沿着从源主机到目的主机的端到端路径中路由器之间的路由方式
4.1 网络层概述
报文段在网络中运输时,每台路由器的数据平面的主要作用是从其输入链路向其输出链路转发数据报,控制平面的主要作用是协调这些本地的路由器的转发动作,使得数据报沿着源和目的地主机之间的路由器路径最终进行端到端传送
路由器具有截断的协议栈,即没有网络层以上的部分,因为路由器不运行应用层和运输层协议
4.1.1 转发和路由选择:数据平面和控制平面
网络层的作用从表面上看极为简单,即将分组从一台发送主机移动到一台接收主机
转发:当一个分组到达某路由器的一条输入链路时,该路由器必须将该分组移动到适当的输出链路,转发是在网络层的数据平面中唯一,也是最重要的功能
路由选择:当分组从发送方流向接收方时,网络层必须决定这些分组所采用的路由或路径,计算这些路径的算法称为路由选择算法,路由选择在网络层的控制平面中实现
类比:
当X驾车从A到B的过程中,X经过的每个路口,立交桥可以看作进行了一次转发,X规划从A到B的过程,可以看作是路由选择
每台网络路由器中都有一个关键元素是它的转发表,路由器检查到达分组首部的一个或多个字段值,进而使用这些首部值在其转发表中索引,通过这中方法来转发分组,这些值对应存储在转发表中的值,指出了该分组将被转发的路由器的输出链路接口
控制平面:传统方法:路由选择算法决定了插入该路由器转发表的内容,路由选择算法运行在每台路由器中,并且在每台路由器中都有转发和路由选择这两种功能。在一台路由器中的路由选择算法与在其它路由器中的路由选择算法通信,以计算出它的转发表的值
路由器中物理上存在的转发表的内容可以是人类直接配置的,进一步说明转发和路由选择功能的区别和不同。在这种情况下,不需要任何路由选择协议。但人工配置更容易出错,并且对于网络拓扑变化的影响比起路由选择协议更慢
控制平面:SDN方法:路由器也可以物理上分离,即远程控制计算机和分发转发表以供每台路由器使用,路由选择设备仅执行转发,而远程控制器计算并分发转发表,远程控制器可能实现在具有高可靠性和冗余的远程数据中心,并可能由ISP或某些第三方的管理,这种控制平面方法是SDN,因为计算机转发表并于路由器交换的控制器是用软件实现的,故网络是‘软件定义’的
4.1.2 网络服务模型
网络服务模型定义了分组在发送和接收端系统之间的端到端运输特性
网络层可能包含的服务:确保交付,具有时延上界的确保交付,有序分组交付,确保最小带宽,安全性
因特网的网络层提供了单一的服务,称为尽力而为服务,虽然对上述服务不保证,但因特网的尽力而为服务模型与适当带宽供给结合已经足够好,能用于大量的应用
4.2 路由器工作原理
网络层的转发功能,实际上是将分组从一台路由器的入链路传送到适当的出链路
输入端口:它在路由器中执行终结入物理链路的物理层功能,还要与位于入链路远端的数据链路层交互来执行数据链路层功能,在输入端口还要执行查找功能。在输入端口,通过查询转发表决定路由器的输出端口,到达的分组通过路由器的交换结构转发到输出端口,控制分组(如携带路由选择协议信息的分组)从输入端口转发到路由选择处理器
交换结构:交换结构将路由器的输入端口连接到它的输出端口,这种交换结构包含在路由器中,即它是一个网络路由器中的网络
输出端口:输出端口存储从交换结构接收的分组,并通过执行必要的链路层和物理层功能在输出链路上传输这些分组
路由器的输入,输出端口和交换结构几乎都是硬件实现
路由选择处理器:路由选择处理器执行控制平面功能,在传统的路由器中,它执行路由选择协议,维护路由选择表与关联链路状态信息,并为该路由器计算装发表。在SDN路由器中,路由选择处理器负责与远程控制器通信,目的是接收由远程控制器计算的转发表项,并在该路由器的输入端口安装这些事项,还执行网络管理功能
分组转发需要面对的两种情况:基于目的地转发和通用转发
4.2.1 输入端口处理和基于目的地转发
输入端口的线路端接功能与链路层处理实现了用于各个输入链路的物理层和链路层。在输入端口中执行的查找对于路由器的运行是至关重要的,正是在这个地方,路由器使用转发表来查找输出的端口,使得新到达的分组能经过交换结构转发到该输出端口。转发表是由路由选择处理器计算更新的,或者转发表接收来自远程SDN控制器的内容
路由器用分组目的地址的前缀与该表中的表项进行匹配,如果存在一个匹配项,则路由器向与该匹配项相关的链路转发分组,当有多个匹配时,该路由器使用最长前缀匹配规则,即在该表中寻找最长的匹配项,并向与最长前缀匹配相关联的链路接口转发分组
一旦通过查找确定了某分组的输出端口,则该分组就能够发送进入交换结构。如果来自其它输入端口的分组正在使用交换结构,一个分组可能会在进入交换结构时被暂时阻塞,因此,一个被阻塞的分组必须要在输入端口处排队
尽管查找在输入端口处理可以认为是最重要的动作,但必须采取其它许多动作,1,必须出现物理层和链路层处理,2,必须检查分组的版本号,检验和以及寿命字段,3,必须更新用于网络管理的计数器
4.2.2 交换
交换结构位于一台路由器的核心部位,因为正是通过这种交换结构,分组才能实际地从一个输入端口交换(转发)到一个输出端口中
三种交换技术:(经内存交换,经互联网络交换,经总线交换)
4.2.3 输出端口处理
输出端口处理取出已经存放在输出端口内存中地分组并将其发送到输出链路上,这包括选择和取出排队地分组进行传输,执行所需地链路层和物理层传输功能
4.2.4 如何出现排队
在输入端口和输出端口处都可以形成分组队列,排队的位置和程度将取决于流量负载,交换结构的相对速率和线路速率,随着这些队列的增长,路由器的缓存空间最终会被耗尽,当无内存可用时就会出现丢包
4.2.5 分组调度
为了解决排队的分组如何确定次序经输出链路传输有三种调度方式
先进先出 FIFO:FIFO也称先来先服务(FCFS),用编号指示了分组到达的次序,利用FIFO规则,分组按照到达的相同次序离开
优先权排队:在优先权排队规则下,到达输出链路的分组被分类放入输出队列中的优先权类,网络操作员可以配置一个队列,这样携带网络管理信息的分组(如,由源或目的TCP/UDP端口号所标识)获得超过用户流量的优先权。每个优先权类通常有自己的队列,当选择一个分组传输时,优先权排队规则将从队列为非空的最高优先权类中传输一个分组,在同一优先权类的分组之间的选择通常以FIFO方式完成
循环和加权公平排队:在循环排队规则中,分组像使用优先权排队那样被分类,类之间不存在严格的服务优先权,循环调度器在这些类之间轮流提供服务
加权公平排队是一种通用形式的循环排队它已经广泛实现在路由器中
4.3 网际协议 IPv4,寻址,IPv6及其它
网际协议(IP),掌握IP编址就是掌握因特网的网络层
4.3.1 IPv4数据报格式
网络层分组称为数据报
版本号:这4比特规定了数据报的IP版本协议,通过查看版本号,路由器能够确定如何解释IP数据报的剩余部分,不同的IP版本使用不同的数据报格式,新版本为IPv6
首部长度:因为一个IPv4数据报可以包含一些可变数量的选项(这些选项包括在IPv4数据报首部中),故需要用这4比特来确定IP数据报中的载荷(如数据报中被封装的运输层报文段)实际开始的地方
服务类型 TOS:包含在IPv4首部中,以便使不同类型的IP数据报(如,一些特别要求低时延,高吞吐量或可靠性的数据报)能相互区分开
数据报长度:这是IP数据报的总长度(首部加数据),因为该字段长为16比特,所以IP数据报理论最大长度为65535字节
标识,标志,片偏移:这三个字段与IP分片有关,新版本的IPv6不允许在路由器上对分组分片
寿命 TTL:寿命字段用来确保数据报不会永远(如由长时间的路由选择环路)在网络中循环。每当一台路由器处理数据报时,该字段的TTL减1,若TTL字段为0,则该数据报必须丢弃
协议:该字段通常仅当一个IP数据报到达其最终目的地才有用,该字段值指示了IP数据报的数据部分应当交给哪个特定的运输层协议,如,值为6表明数据部分要交给TCP,而值为17表示数据要交给UDP
首部检验和:首部检验和用于帮助路由器检测收到的IP数据报中的比特错误。如果数据报首部中携带的检验和与计算得到的检验和不一样,则检测出是个差错,路由器一般会丢弃检测出错误的数据报
源和目的地地址:当某源生成一个数据报时,它在源IP字段中插入它的IP地址,在目的IP地址中插入其最终目的地地址,通常源主机通过DNS查找来决定目的地址
选项:选项字段允许IP地址首部被扩展,首部选项意为着很少使用,在IPv6中已经去掉了IP选项
数据(有效载荷):这是数据报存在的首要理由,在大多数情况下,IP数据报中的数据字段包含要交付给目的地的运输层报文段(TCP/UDP),数据字段也可以承载其它类型的数据,如ICMP报文段
4.3.2 IPv4数据报分片
并不是所有链路层协议都能承载相同长度的网络层分组,由的协议能承载大数据报,而有的协议只能承载小分组,一个链路层帧能承载的最大数据量叫作最大传送单元 MTU,故链路层协议的MTU严格地限制着IP数据报的长度。对IP数据报长度具有严格限制并不是主要问题,问题在于在发送方与目的地路径上的每段链路可能使用不同的链路层协议,且每种协议使用不同的MTU
如何将一个过大的IP分组挤进链路层帧的有效载荷字段呢?解决该问题的方法是将IP数据报中的数据分成两个或更多较小的IP数据报,用单独的链路层帧封装这些较小的IP数据报,然后通过输出链路发送给这些帧,每个这些较小的数据报称为片
片在其到达目的地运输层以前需要重新组装,TCP与UDP的确都希望从网络层收到完整的,未分片的报文。但为了不影响路由器的性能,IPv4将数据报的重新组装工作放到端系统中,而不是放在网络路由器中
IPv4的设计者将标识,标志,偏移字段放在IP数据报的首部中用来处理有关数据报分片的问题
4.3.3 IPv4编址
IP要求每台主机和路由器接口拥有自己的IP地址,因此可以说,一个IP地址与一个接口相关联,而不是与包括该接口的主机或路由器相关联
每个IP地址长度为32比特,因此共有2^32个可能的IP地址,这些地址通常按所谓的点分十进制记法书写,即地址中每个字节用它的十进制形式书写,各字节间以句点隔开,如(193.32.216.9)的二进制记法为(11000001 00100000 11011000 00001001)。在全球因特网中的每台主机和路由器上的每个接口,都必须有一个全球唯一的IP地址,且这些地址不能随意地自由选择,一个接口地IP地址的一部分需要由其连接的子网来决定
上图从233.1.1.1到233.1.1.4,这四个接口通过一个并不包含路由器的网络互联起来,该网络可能由一个以太网LAN互联,在此情况下,这些接口将通过一台以太网交换机互联,或者通过一个无线接入点互联,我们将这种无路由器连接的这些主机的网络表示为一朵云
互联这三个主机接口与1个路由器接口的网络称为一个子网,IP编址为这个子网分配一个地址233.1.1.0/24,其中/24记法,有时称为子网掩码,指示32比特中的最左侧开始的24比特定义了子网地址
一个子网的IP定义并不局限于连接多台主机到一个路由器接口的以太网段。为了确定子网,分开主机和路由器的每个接口,产生几个隔离的网络岛,使用接口端接这些隔离的网络的端点,这些隔离的网络中的每一个都叫一个子网
一个具有多个以太网段和点对点链路的组织将具有多个子网,在给定子网上的所有设备都具有相同的子网地址。因特网的地址分配策略被称为无类别域间路由选择 CIDR,CIDR将子网寻址的概念一般化了。当使用子网寻址时,32比特的IP地址被划分成两部分,并且也具有点分十进制数形式,a.b.c.d/x,x指示了地址的第一部分中的比特数
形式为a.b.c.d/x的地址的x最高比特构成了IP地址的网络部分,并且经常被称为该地址的前缀,一个组织通常被分配一块连续的地址,即具有相同的前缀的一段地址。在这种情况下,该组织内部的设备的IP地址将共享共同的前缀
一个地址的剩余32-x比特可以认为是用于区分该组织内部设备的,其中的所有设备具有相同的网络前缀。在CIDR被采用前,IP地址的网络部分被限制长度为8,16,或24比特,这是一种分类编址,这是因为具有8,16,24,比特子网地址的子网分别被称为A,B,C类网络。IP广播地址255.255.255.255,当一台主机发出一个目的地址为255.255.255.255的数据报时,该报文会交付给同一个网络中的所有主机
获取一块地址:为了获取一块IP地址用于一个组织的子网内,可以先于ISP联系,ISP可能会从已分给它的更大的地址块中提供一些地址。
IP地址由因特网名字和编号分配机构 ICANN管理,ICANN的作用不仅是分配IP地址,还管理DNS根服务器,分配域名与解决域名纷争
获取主机地址:动态主机配置协议:系统管理员通常手工配置路由器的IP地址。主机地址也能手动配置,但这项任务目前更多的是使用动态主机配置协议 DHCP来完成,DHCP允许主机自动获取(被分配)一个IP地址。网络管理员能够配置DHCP,以使某给定主机每次与网络相连时能得到一个相同的IP地址,或者某主机被分配一个临时IP地址,每次与网络连接时该地址也许是不同地。除了主机IP地址分配外,DHCP还允许一台主机得知其它信息,例如它的子网掩码,它的第一起跳路由器(默认网关)与它的本地DNS服务器的地址
由于DHCP具有将主机连接进一个网络的网络相关方面的自动能力,故它又被称为即插即用协议或零配置协议。DHCP是一个客户-服务器协议,客户通常是新到达的主机,它要获得包括自身使用的IP地址在内的网络配置信息。在最简单的场合下,每个子网将具有一台DHCP服务器,如果某子网中没有服务器,则需要一个DHCP中继代理,这个代理知道用于该网络的DHCP服务器的地址
DHCP协议是一个4个步骤的过程:
1,DHCP服务器发现
2,DHCP服务器提供
3,DHCP请求
4,DHCP ACK
一旦客户收到了DHCP ACK后,交互便完成了,并且客户能在租用期内使用DHCP分配的IP地址。但从移动性角度看,DHCP存在非常严重的缺陷,因为每当节点连接到一个新子网,要从DHCP得到一个新的IP地址,当一个移动节点在子网间移动时,就不能维持与远程应用之间的TCP连接
4.3.4 网络地址转换
NAT使能路由器中的NAT转换表进行网络地址转换
4.3.5 IPv6
由于新的子网和IP节点以惊人的增长率连到因特网上(并被分配唯一的IP地址),32比特的IP地址空间将被耗尽,为了应对这种大IP地址空间的需求,开发出了一种新的IP协议,即IPv6
IPv6数据报格式:
扩大的地址容量:IPv6将IP地址长度从32比特增加到128比特,确保了全世界将不会用尽IP地址
简化高效的40字节首部:使用40字节定长首部允许路由器更快的处理IP数据报
流标签:IPv6有一个难以捉摸的流定义,该字段可用于‘给属于特殊流的分组加上标签,这些特殊流是发送方要求进行特殊处理的流,如一种非默认服务质量或需要实时服务的流’,
版本:该4个比特字段用于表示IP版本号
流量类型:该8比特字段与IPv4中的TOS字段含义相似
流标签:该20比特的字段用于识别一条数据报的流,能够对一条流中某些数据报给出优先权
有效载荷长度:该16比特值作为一个无符号整数,给出了IPv6数据报中跟在定长的40字节数据报首部后面的字节数量
下一个首部:该字段标识数据报中的内容(数据字段)需要交付给哪个协议(TCP/UDP)
跳限制:转发数据报的每台路由器将对该字段的内容减1,如果跳限制计数达到0,则丢弃该数据报
源地址和目的地址
数据:这是IPv6数据报的有效载荷部分,当数据报到达目的地时,该有效载荷就从IP数据报中移出,并交给在下一个首部字段中指定的协议处理
IPv6数据报去掉了IPv4数据报中的 分片/重新组装,首部检验和,选项
从IPv4到IPv6:
基于IPv4的公共因特网如何迁移到IPv6?虽然IPv6使能系统可做成向后兼容,即能发送,路由和接收IPv4数据报,但已部署的具有IPv4能力的系统却无法处理IPv6的数据报
在实践中已经取得广泛应用的IPv4到IPv6迁移的方法包括建隧道,建隧道依据的基本思想如下:将两台IPv6路由器中间的IPv4路由器的集合称为一个隧道,借助于隧道,在隧道发送端的IPv6节点可将整个IPv6数据报放到一个IPv4数据报的有效载荷中,通过隧道的传输运送到另一端的IPv6路由器,隧道接收端的IPv6路由器接收它并识别处理
4.4 通用转发和SDN
执行许多网络层功能的中间盒有了大量发展,NAT盒重写首部IP地址和端口号,防火墙基于首部字段值阻拦流量或重定向分组以进行其它处理,如深度分组检测(DPI),负载均衡器将请求某种给定服务的分组转发到提供该服务集合中的一个
由于运输层交换机和网络层路由器等中间盒的剧增,而且每种都有自己特殊的硬件,软件和管理界面,无疑给许多网络操作员带来了十分头疼的问题,然而软件定义网络的进展已经预示并且正在提出一种统一的方法,以一种现代的,简洁和综合方式,提供多种网络层功能以及某些链路层功能
基于目的地转发的特征总结为两个步骤:1,查找IP地址(匹配),2,将分组发送到有特定输出端口的交换结构(动作)