第四章、网络层——数据平面

第四章、网络层——数据平面

1、概述网络层

网络层是协议栈中毋庸置疑是最复杂的层次,它能够被分为数据平面和控制屏幕。我们现在学习数据平面的功能——网络层中每台路由器的功能,该数据平面功能决定达到路由器输入链路的数据报(即网络层分组)如何转发到该路由器的输出链路之一。

如图所示的简单网络,从主机H1到主机H2,路由器的数据层面功能就是从其输入链路到输出链路转发数据报;控制层面的主要作用是协调这些本地的每路由器转发动作,使得数据报沿着源和目的地主句之间的路由器路径最终进行端到端的传送。
在这里插入图片描述

主要到如图中的路由器,他们的协议栈只有物理层、数据链路层、网络层,所以他们具有截断的协议栈,没有网络层以上部分。

1.1、转发和路由选择:数据平面和控制平面

网络层的两种重要功能:

  • 转发。一个分组从输入链路到路由器的某个输出链路的移动,转发是数据层面实现的唯一功能。分组也可能被现有路由器阻挡,比如来自恶意主机的分组。
  • 路由选择。当分组从发送方流向接受方时,网络层必须决定这些分组所采用的路由或者路径,使用的算法就叫做路由选择算法(routing algorithm)。它位于控制平面。

转发(forwarding)是指分组从一个输入链路接口转移到适当输出接口的路由器本地动作,它需要在纳秒级内完成防止阻塞发送,所以通常使用硬件实现。

路由选择(routing)是指分组从源到目的地所采用的端到端路径的网络范围处理过程,一般为秒,毫秒,所以采用软件实现。

路由器如何实现转发?

每台网络路由器具有一个关键元素——转发表(forwarding table),路由器根据到达的分组的首部字段值,使用其某种查找算法,从查找表中找到对应的输出链路,从而将分组转发到该条输出链路。

在这里插入图片描述

关于转发表的配置方法:

  • 控制平面:传统方法——使用路由选择算法,它决定插入路由器转发表的内容,通过各个路由器的通信(发送路由选择报文,经过路由选择协议)进行交互,生成转发表。路由器含路由选择协议。

  • 控制平面:SDN方法(Software-Defined Network SDN,软件定义网络),从路由器物理上分离的办法,远程控制器计算和分发转发表以供每台路由器使用,路由器和远程控制器的通信是通过交换包含转发表和其他路由选择信息的报文实现。所以路由器不含路由选择协议。

    在这里插入图片描述

1.2、网络服务模型

我们如何构建网络服务模型呢?要考虑它可能提供的服务:

  • 可靠传输?
  • 有序分组交付?
  • 确保最小带宽。这种网络层服务模型在发送和接受主机之间一条特定比特率的传输链路行为。只要发送主机以低于特定比特率的速率传输比特,则所有的分组最终会交付到目的主机。
  • 安全性。

因特网的网络层提供了单一的服务——尽力而为服务(best-effort service)。我们也可以认为是无服务的委婉说法。但是它已经被证明了这个模型是能够用于大量应用的。

分组交换机——链路层交换机,基于链路层帧中的字段做出转发决定的,因此称为链路层设备(第二层),而其他分组交换机称为路由器(router),基于网络层数据报的首部信息做出转发决定,是网络层(第三层)设备。

2、路由器的工作原理

我们现在详细了解转发功能,将一个分组从一台路由器的输入链路传送到适当的输出链路。

在这里插入图片描述

从上图我们可以看到路由器的内部结构有:

  • 输入端口。输入端口处需要执行查找功能,通过查询决定路由器的输出端口。然后通过交换结构转发到输出端口。一台路由器所支持的端口数量很大,从几十到几百。
  • 交换结构。
  • 输出端口。当链路是双向的,输出端口通常和该链路的输入端口位于同一个线路卡上。
  • 路由选择处理器。路由选择处理器执行控制平面的功能,传统路由器中,执行路由选择协议,维护路由选择表和关联链路状态信息,并未该路由器计算转发表。SDN路由器中,路由选择处理器负责和远程控制器通信,接受由远程控制器计算的转发表项,并在该路由器的输入端口安装这些表项。路由选择处理器还执行网络管理功能。

在这里插入图片描述

2.1、输入端口处理和基于目的地转发

分组到达输入端口,我们需要查找输出端口,这个查找必须尽可能快地进行。
在这里插入图片描述

现在我们考虑分组基于目的地转发到输出端口的情况。

我们需要解决的是查找算法和交换结构的速度上要相协调。

查找算法和查找执行速度

在这里插入图片描述

一旦查找确定了分组的输出端口,则该分组进入交换结构,这个时候我们就要考虑如果来自其他输入端口的分组占用了我们该分组的输出端口,则该分组需要排队,所以我们又需要考虑分组的阻塞、排队、调度。

2.2、分组交换的结构

交换的结构有三种:

  • 经内存交换。最简单最早的路由器采用的就是内存交换。分组到达端口,然后引发中断,路由选择处理器将分组复制到内存中,然后提取数据处理选择输出端口,最后将分组复制到对应的输出端口内存中。许多现代路由器通过内存进行交换,但是和早期路由器的泣别是目的地址的查找和将分组存储进行适当的内存处理是通过输入线路卡处理的
  • 经总线交换。该方式不需要路由选择处理器的干扰,让输入端口预先为分组分配一个交换机内部标签来指示本地输出端口,然后分组在总线上传送和传输到该端口。该分组能由所以的输出端口收到,但是只有和该标签匹配的端口才能保存该分组。然后标签在输出端口被去除,标签的作用仅用于交换机内部跨越总线。
  • 经互联网络交换。内部是一个互联网络,由2N条总线组成的互联网络,形成纵横式网络,它能够并行转发多个分组,是非阻塞的,只要没有其他分组当前被转发到该输出端口,转发到该输出端口的分组不会被到达输出端口的分组阻塞。然而,如果来自两个不同输入端口的两个分组其目的地为相同输出端口,另一个分组必须在输入端等待。

在这里插入图片描述

2.3、输出端口处理

在这里插入图片描述

2.4、何处出现排队

我们可以很清楚的地知道——输入端口和输出端口处都可以形成分组排队。排队的位置和程度将取决于流量负载、交换结构的相对速率和线路速率。随着这些队列的增长,路由器的缓存空间最终可能会耗尽,并且无内存可用于存储达到的分组时将会出现丢包(packet loss)。

输入排队什么时候会发生?

如果交换结构不能快得(相对输入链路速度)使所有达到的分组无时延地通过它的传送,输入端口也将出现分组排队,到达分组加入输入端口队列,等待。

输出队列什么时候发生?

在这里插入图片描述

2.5、分组调度

我们现在要考虑分组如何经过输出链路传输的问题,涉及到了分组的通过次序问题。按照对生活的实际映射和算法的思考,有如下几种:

  • FIFO(先进先出)。当队列不够长,到达的分组将被丢弃。注意,这个先到是指分组到达输出链路队列的次序来选择分组在链路上的传输。

在这里插入图片描述

  • 优先权排队(priority queuing),就好像腾讯vip等级,不同级别的人排的队列不同,由不同的优先权队列,高优先权队列只要还有分组,则优先传输该分组。然后同一等级的队列,使用FIFO来完成。
    在这里插入图片描述

  • 循环和加权平均队列

    在这里插入图片描述

    实际例子:在这里插入图片描述

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

我们平时都能听到IPv4和IPv6,那么他们是什么呢?他们就是网络层著名的两个网际协议(IP,Internet Protocol)。

3.1、IPv4数据报格式

如图所示IPv4的数据报格式:

在这里插入图片描述

  • 版本(版本号)。4比特,规定了数据报的IP协议版本。通过查看版本号,路由器能够确定如何解释IP数据报的剩余部分,不同IP版本数据报格式不同。

  • 首部长度。一个IPv4数据报可包含一些可变变量选项(包含在数据报首部中),故需要用4比特来确定数据报中的载荷(封装的报文段),大多数IP数据报不含选项,故一般IP数据报首部为20字节。

  • 服务类型。服务类型(TOS)比特包含在IPv4首部,以便使不同类型IP数据报能够相互区别开来。

  • 数据报长度。指示IP数据报的总长度(首部加数据)。其为16比特,故理论最大长度为65536字节。实际上IP数据报很少超过1500字节,该长度使得IP数据报能够容纳最大长度以太网帧的载荷字段

  • 16比特标识、标志、13比特片偏移。该三个字段和IP分片有关。新版本IPv6不允许在路由器上对分组分片。

  • 寿命。(Time-To-Live,TTL)寿命字段用来确保数据报不会永远在网络中循环。每当一台路由器处理数据报时,该字段的值减1,当减到0,该数据报必须丢弃

  • 上层协议。该字段通常仅当一个IP数据报到达其最终目的地时才会用。它指示了IP数据报要将数据部分交付给哪个特定的传输层协议。(6表示TCP,17表示UDP)。其作用就和传输层报文中的端口号的作用。

  • 首部检验和。用于帮助路由器检测接收IP数据报中的比特错误。在这里插入图片描述

  • 源和目的IP地址。当某个源生成一个数据报,它会在源字段插入自己的IP地址,然后通过DNS查找决定目的地址,在目的IP地址字段插入最终的目的地址IP。

  • 选项。选项字段运行IP首部被扩展,它很少使用。IPv6中已经将选项去除了。

  • 数据(有效载荷)。这是最重要的载荷,大多数情况下IP数据报中的字段包含要交付给目的地的运输车报文段(TCP或UDP)。

    在这里插入图片描述

3.2、IPv4数据报分片

不是所有的链路层协议都能承载相同长度的网络层分组,有些能承载大分组有些只能承载小分组。我们定义:

一个链路层帧能够承载的最大数据量为最大传送单元(Maximum Transmission Unit,MTU)。

故链路层协议的MTU严格限制IP数据报的长度,因为发生方到接受方可能使用不同链路层协议,每种协议的MTU可能不同。那么一个大的IP数据报如何通过一个MTU小于其IP数据报长度的链路呢?答案是数据报分片,将大的IP数据报分片为若干个小的IP数据报,用单独的链路层帧封装这些IP数据报,然后通过输出链路发生这些帧。这些较小的数据报称为片(fragment)。

片到达目的地运输层前需要重新组装,因为TCP/UDP希望接收到完整的报文不是分片的,IPv4设计者决定了将数据报的重新组装工作放到端系统,而不是放到网络路由器来增加性能负担。

IP数据报分片过程

在这里插入图片描述

3.3、IPv4编址

3.3.1、主机和路由器连入网络

在这里插入图片描述

点分十进制记法(dotted-decimal notation)——IP地址

每个IP地址长度为32比特(4字节),2的32次方个IP地址即约40亿个可能的IP地址。IP地址通常使用点分十进制记法书写,每个字节用10进制数表示,然后用“.”分割。如:在这里插入图片描述

在全球因特网中的每台主机和路由器上的每个连接,都必须有一个全球唯一的IP地址(NAT后面的接口除外)。然而这些地址不能随意地自由选择。一个接口的IP地址的一部分需要由其连接子网来决定。

3.3.2、子网(subnet,也叫IP网络)

什么是子网:

在这里插入图片描述

如何确定子网:

在这里插入图片描述

3.3.3、无类别域间路由选择(Classless Interdomain Routing,CIDR)实现子网寻址

上面的讨论,我们可以知道,一个具有多个以太网段和点对点链路的组织将具有多个子网,在给定子网上的所有设备都具有相同的子网地址。原则上不同的子网能够具有完全不同的子网地址。实践中,他们的子网经常有许多相同的地方。因此我们来关注全球因特网如何处理编制的。

因特网的地址分配策略为无类别域间路由选择(Classless Interdomain Routing,CIDR),使用子网寻址时,32比特的IP地址被分成了两部分,并且具有点分十进制形式a.b.c.d/x,其中x指示了地址的第一部分的比特数。

  • x位最高比特构成了IP地址的网络部分,经常被称为该地址的前缀(prefix或网络前缀)。一个组织通常被分配一个连续的地址块,具有相同前缀的一段地址,这种情况下组织内部的设备的IP地址共同享有相同的前缀。当该组织外部的一台路由器转发一个数据报,且该数据报的目的地址位于该组织的内部时,仅需要考虑前x比特即可,这大大减少了这些路由器中转发表的长度。
  • 剩余的32-x比特认为是用于区分该组织内部设备的,其中所有的设备具有相同的网络前缀。这些较低比特可能具有另外的子网结构,如果让划分的x变得更大,则容纳的子网内部设备更小,从而子网里面包含子网。比如32-21,子网内部的主机序号使用后11比特,里面可以包含子网,主机序号使用11比特里面的低比特

采用CIDR的好处:

在这里插入图片描述

传统的分类编址(classful addressing)

在这里插入图片描述

广播IP地址

在这里插入图片描述

3.3.4、主机和子网的获得与分配IP

现在我们已经知道了IP编址了,那么我们还需要知道主机或子网最初是如何得到他们的地址的。首先来看一个组织如何为其设备得到一个地址块的,然后再看一个设备(如一台主机)如何从某个组织的地址块里面分配到一个地址的。

一个组织如何为其设备得到一个地址块

在这里插入图片描述

我们主要了解ISP如何给组织分配一个地址块:

在这里插入图片描述

一个设备(如一台主机)如何从某个组织的地址块里面分配到一个地址——动态主机配置协议DHCP

主机初始时候,IP地址为0.0.0.0,这个时候要获取分配的IP地址,它需要DHCP协议,它允许主机自动获取(被分配)一个IP地址。或者分配一个临时的IP地址,每次与网络连接时该地址也许是不同的。除了主机IP地址分配以外,DHCP还允许一台主机得知其他信息,例如它的子网掩码(/x),它的第一跳路由器地址(通常称为默认网关)与它的本地DNS服务器的地址。

由于DHCP具有将主机连接到一个网络的网络相关方面的自动能力,故它又又被称为即插即用(plug-and-play protocol)或者零配置(zeroconf)协议。

DHCP是一个客户-服务器协议,客户通常是新到达的主机,它要获得自身使用的IP地址在内的网络配置信息。下面考虑两种场景:

  • 每个子网都有一台DHCP服务器
  • 如果某个子网没有DHCP服务器,需要一个DHCP中继代理(通常是一台路由器),它知道DHCP服务器的地址。

具体的DHCP工作过程:

在这里插入图片描述

时序图:
在这里插入图片描述

3.4、网络地址的转换

假设我们之前的家庭,已经使用了一个IP地址块,那么作为用户,如果我们的设备一直增加,子网变大,需要把块地址变大但是之前的ISP已经为该网络分配过一块连续地址了怎么办?答案就是网络地址转换(Network Address Translation,NAT)。

NAT通俗点说就是NAT路由器隔开了我们这个网络和外界的网络,NAT路由器就相当于一个独立的设备,拥有一个IP地址,所以发送到该路由器的报文信息,都通过其内部的分发到达我们实际的主机。

在这里插入图片描述

3.5、IPv6协议

3.5.1、为什么要开发IPv6

在这里插入图片描述

3.5.2、数据报格式

在这里插入图片描述

IPv6对比IPv4,不存在的字段:

在这里插入图片描述

IPv6没有检验操作!

3.5.3、IPv4迁移至IPv6

在这里插入图片描述

4、通用转发和SDN

因特网路由器的转发决定传统上仅仅基于分组的目的地址。然后,我们已经知道了执行许多第三层功能的中间盒有了大量发展:

  • NAT盒重新首部IP地址和端口号
  • 防火墙基于首部字段值阻拦流量或重定向分组以进行其他处理——如深度分组检测(DPI)
  • 负载均衡请求器将请求某种给定的服务

因为第二层交换机和第三次路由器等中间盒的剧增,每种都有自己的特殊的硬件、软件和管理界面,这无疑给许多网络管理员带来了十分头疼的大麻烦。近期的软件定义网络SDN的进展已经预示并且正在提出一种统一的方法,以一种现代、简洁和综合方式提供了多种网络层功能以及某些链路层功能。

我们知道基于目的地的转发特征总结为两个步骤:

  • 1、查找目的IP地址(“匹配”)
  • 2、将分组发送到特定输出端口(“动作”)

现在我们要考虑一种更有意义的通用“匹配加动作”范式,其中能够对协议栈的多个首部字段进行“匹配”,这些首部字段是与不同层次的不同协议相关联的。“动作”包括:将分组转发到一个或多个输出端口(类似基于目的地的转发),跨越多个通向服务的离开接口进行负载均衡分组,重写首部值(同NAT一样),有意识地阻挡/丢弃某个分组(类似于防火墙)等动作。

通用转发中,一张匹配加动作的表,由远程控制器计算、安装、更新。所以通用匹配动作能力是通过计算、安装和更新这些表的远程控制器实现的。

我们可以对比三种方式:

在这里插入图片描述

我们后面的关于通用转发的讨论是基于OpenFlow,OpenFlow是一个得到高度认可和成功的标准,它已经成为匹配加动作转发抽象、控制器以及更为一般的SDN革命等概念的现取。我们现在考虑OpenFlow1.0,该标准以特别清晰和简明的动作引入了关键SDN抽象和功能。

在这里插入图片描述

4.1、匹配

在这里插入图片描述

4.2、动作

在这里插入图片描述

4.3、匹配加动作操作中的OpenFlow例子

在这里插入图片描述

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_44861675/article/details/114043579