• 《计算机网络 自顶向下方法》整理(四)网络层:数据平面


    在网络中的每一台主机和路由器中都有一个网络层部分,这里将网络层分解为两个相互作用的部分,即数据平面和控制平面。数据平面即网络层中每台路由器的功能,该数据平面功能决定到达路由器输入链路之一的数据报如何转发至该路由器的输出链路之一,这里会涉及传统的IP转发和通用转发,以及IPv4和IPv6协议及其寻址。网络的控制平面即网络范围的逻辑,该控制平面功能控制数据包沿着从源主机到目的主机的端到端路径中路由器之间的路由方式,其中将涉及路由选择算法及各种路由选择协议。传统上,这两大功能已被实现成一个整体,位于一台路由器中。

    一、网络层概述

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

    转发:指将分组从一个输入链路接口转移到适当的输出链路接口的路由器本地动作,时间为几纳秒,它是在数据平面中实现的唯一功能;

    路由选择:指确定分组从源到目的地所采取的端到端路径的网络范围的处理过程,通常使用软件来实现,时间约为几秒;

    每台网路路由器中有一个关键元素是它的转发表。路由器检查到达分组首部的一个或多个字段值,并使用这些值在转发表中索引链路接口转发分组。

    1、控制平面:传统的方法

    每台路由器中都包含转发和路由选择两种功能。一台路由器中的路由选择算法与其他路由器中的路由选择算法通信,以计算出它的转发表的值。

    2、控制平面:SDN方法

    与传统方法不同的是,控制平面的路由选择功能与物理的路由器是分离的,即路由器仅执行转发,而远程控制器计算并分发转发表。远程控制器可能实现在具有高可靠性和冗余的远程数据中心中,并可能由ISP或某些第三方管理。这类控制平面方法是软件定义网络(SDN)的本质。因为计算转发表并与路由器交换的控制器是用软件实现的,故网络是软件定义的。

    2、网络服务模型

    网络服务模型定义了分组在发送和接收端系统之间的端到端运输特性,这些服务包括:①确保交付;②具有延时上限的确保交付;③有序分组交付;④确保最小带宽;⑤安全性

    因特网的网络层提供了单一的服务,称为尽力而为服务,但不保证顺序地被接受,不保证最终交付,不保证端到端的时延,也不能保证有最小的带宽。

    二、路由器的工作原理

    如下图,一台路由器包含4个组件:

    • 输入端口,显示下图输入端口最左侧的方框和输出端口最右侧的方框,它还要与位于数据链路远端的数据链路层交换来执行数据链路层功能,如下图输入端口和输出端口部分的中间框。输入端口还要执行查找功能,这显示在输入端口的最右侧方框,正是在这里,通过查询转发表决定路由器的输出端口。
    • 交换结构:交换结构将路由器的输入端口连接到它的输出端口;
    • 输出端口:输出端口存储从交换结构接受的分组,并通过执行必要的链路层和物理层功能在输出链路上传输这些分组;
    • 路由选择处理器:路由选择处理器执行控制平面功能,还执行网络管理功能

    image-20201114161053020

    路由器的控制功能包括执行路由器选择协议,对上线或下线的连接链路进行响应,与远程控制器通信和执行管理功能通常由软件实现并在路由选择处理器上执行。为了具体和简单起见,我们在本节假定转发决定仅基于分组的目的地址,而非基于通用分组首部字段

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

    如下图为输入端口的处理图例:

    image-20201114163015352

    路由器使用分组目的地址的前缀与转发表中的表项进行匹配,如果存在一个匹配项,则路由器向与该匹配项相关联的链路转发分组。当由多个匹配项时,路由器使用最长前缀匹配规则。一旦通过查找确定了某分组的输出端口,则该分组就能够发送进入交换结构,在某些设计中,如果该交换结构当前存在分组,则当前分组会被暂时阻塞。

    2、交换

    交换结构位于一台路由器的核心部位,正是通过这种交换结构,分组才能实际地从一个输入端口交换到一个输出端口中。交互可以有多种方式:

    • 经内存交换:输入端口与到达的数据包首先通过中断向路由处理器发出信号。然后,该数据包被从输入端口复制到处理器存储器中。然后,路由处理器提取头中的目的地址,在转发表中查找相应的输出端口。并将数据包复制到输出端口的缓冲区
    • 经总线交换:输入端口直接将一个数据包传输到输出端口。在共享总线上,无需路由处理器的干预。这通常是通过让输入端口在数据包上预先贴上一个交换机内部标签(头),表明本地输出端口的位置。并将该数据包传送到总线上。所有输出端口接收数据包,但只有符合标签的端口才会保留数据包。标签是在输出端口被移除,因为这个标签只在交换机内用于跨越总线
    • 经互联网交换:与前两种方式不同的是,纵横式网络是非阻塞的,能够并行转发多个数据包

    image-20201114164509667

    3、输出端口处理

    输出端口处理去除已经存放再输出端口内存中的分组并将其发送到输出链路上,包括选择和取出排队的分组进行传输,执行所需的链路层和物理层传输功能

    image-20201114165648766

    4、何时出现排队

    在输入端口和输出端口都可以形成分组队列,对着队列的增长,路由器的缓存空间最终会耗尽,当无内存可用于存储到达的分组时会出现丢包。

    • 输入排队:如果交换结构不能快的使所有到达分组无时延地通过它传送,输入端口将出现分组排队。以纵横式交换结构,当两个或多个输出队列的分组要发往同一个输出端口,或者前进的路径被其他分组占有,那么将会发生阻塞,这种现象称为线路前部阻塞
    • 输出排队:当有N个分组到达同一个输出端口时,是有可能出现输出排队的。当没有足够的内存来缓存一个入分组时,要么丢弃到达的分组(弃尾策略),要么删除一个或多个已排队的分组来为新的分组腾出空间。在缓存填满之前丢弃一个分组的策略在某些情况下是有利的,它可以为发送方提供给一个阻塞信号。这一系列的处理办法称为主动队列管理(AMQ)算法随机早期检测算法是最广泛研究和实现的AMQ算法之一。

    5、分组调度

    排队的分组如何经输出链路传输?

    5.1、先进先出

    FIFO调度规则按照分组到达输出链路队列的相同次序来选择分组在链路上传输

    5.2、优先权排队

    到达输出链路的分组被分类放入输出队列中的优先权类。基于不同的分组分配不同的权限,在同一优先权的分组之间通常以FIFO的方式进行选择。在非抢占式优先权排队规则下,一旦分组开始传输,就不能打断。

    5.3、循环和加权公平排队

    分组像使用优先权排队那样被分类,然而在类之间不存在严格的服务优先权,循环调度器在这些类之间轮流提供服务。保持工作排队规则在有分组排队等待传输时,不允许链路保持空闲。当寻找给定类的分组没有找到时,保持工作的循环规则将立即检查循环序列中的下一列。一种通用形式的循环队列已经广泛的实现在路由器中,它就是所谓的加权公平排队(WFQ)。它与循环队列不同的地方在于每个类在任何时间间隔可能收到不同数量的服务。

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

    1、IPv4数据报格式

    IPv4数据报格式如下图所示,其关键字段如下:

    • 版本号:这4比特规定了数据报的IP协议版本;
    • 首部长度:一个IPv4数据报可包含一些可变数量的选项,所以需要用4比特来确定IP数据报中的载荷(如被封装的运输层报文段)实际开始的地方,大多数IP数据报不包含选项,所以一般的IP数据报具有20字节的首部;
    • 服务类型:服务类型比特包含在IPv4首部中,以便使不同类型的IP数据报能相互区别开来;
    • 数据报长度:IP数据报的总长度(首部加上数据),以字节计。该字段长为16比特,所以理论最大长度为65535字节,但数据报很少有超过1500字节的;
    • 标识、标志、片偏移:与IP分片有关,但新版的IPv6不允许在路由器上对分组分片;
    • 寿命:确保数据报不会永远在网络中循环,每台路由器处理数据报时减1,直至为0被丢弃;
    • 协议:该字段仅当一个IP数据报到达其最终目的地时才有用,指示了IP数据报的数据部分应交给哪个特定的运输层协议,如6表示TCP,17表示UDP;
    • 首部检验和:用于帮助路由器检测收到的IP数据报中的比特错误,将首部中的每两个字节当作一个数,用反码算术对这些数求和;
    • 源和目的IP地址:当源生成一个数据报时,它在源IP字段中插入它额IP地址,在目的IP地址字段中插入目的地地址;
    • 选项:选项字段允许IP首部被扩展,它很少被使用,它会增加校验的复杂性,IPv6首部中已经去掉了IP选项;
    • 数据(有效载荷):大多数情况下该字段包含要交付给目的地的运输层报文(TCP或UDP),该字段也可以承载其他类型的数据,如IMCP报文

    image-20201114175045903

    2、IPv4数据报分片

    不是所有的链路层协议都能承载相同长度的网络层分组。如以太网帧能够承载不超过1500字节的数据,而某些广域网链路的帧可承载不超过576字节的数据。一个链路层帧能够承载的最大数据量叫做最大传送单元(MTU)。如何将过大的IP分组置入链路层帧的有效载荷字段呢?解决方法就是将IP数据报中的数据分片成N个较小的IP数据报。

    在路由器中重新组装数据报会给协议带来相当大的复杂性并且影响路由器的性能,因而将数据报的组装工作放到端系统中是更好的选择。IPv4将标识、标志和片偏移字段放在IP数据报的首部中。当一个数据报被创建时,发送主机会在数据报上打上一个标识号以及源地址和目的地址,发送主机在发送每一个数据报时都会递增标识号。当路由器需要对数据报进行分片时,每个产生的数据报(即分片)都具有原始数据报的源地址、目的地址和标识号。

    当目的地收到来自同一发送主机的一系列数据报时,它可以检查数据报的标识号,以确定哪些数据报实际上是同一个较大数据报的碎片。由于IP是一种不可靠的服务,一个或多个碎片可能永远不会到达目的地。由于这个原因,为了让目的主机绝对确定它已经收到了原始数据报的最后一个碎片,最后一个碎片的标志位设置为0,而所有其他碎片的标志位设置为1。同时,为了让目的主机确定是否丢失了一个片段(也为了能够按照正确的顺序重新组合片段),偏移字段被用来指定片段在原始IP数据报中的位置。

    3、IPv4编址

    主机与物理链路之间的边界叫做接口。在一些情况下,一个网络可以由一个以太网交换机互联,或者通过一个无线接入点互联。互联多个主机接口与一个路由器接口的网络形成了一个子网,IP编址为子网分配的子网掩码可以记为“/24”,指示32比特中最左侧24比特定义了子网地址。为了确定子网,分开主机和路由器的每个接口,产生几个隔离的网络岛,使用接口端连接这些隔离的网络的端点,这里隔离的网络中的每一个都叫做一个子网。

    因特网的地址分配策略被称为无类别域间路由选择(CIDR)。当使用子网寻址时,32比特的IP地址被划分为两部分,a.b.c.d/x,其中x指示了地址的第一部分中的比特数,x最高比特构成了IP地址的网络部分,并且经常被称为该地址的前缀(或网络前缀)。一个组织通常被分配一块连续的地址,即具有相同前缀的一段地址。使用单个网络前缀通告多个网络的能力通常称为地址聚合,也称为路由聚合路由摘要

    一个地址的剩余32-x比特可以认为是用于区分该组织内部设备的,其中的所有设备具有相同的网络前缀。在CIDR被采用之前,IP地址的网络部分被限制为长度为8、16或24比特,这是一种称为分类编址的编址方案。这是因为具有8、16、24比特子网地址的子网分别被称为A、B、C类网络,一个C类地址(/24)可以容纳28-2(其中两个地址用作特殊用途)台主机。B类(/16)可以容纳216-2台主机,如果实际没有那么多台主机则会导致B类地址空间迅速损耗以及分配地址利用率的低下。

    1、获取一块地址

    为了获取一块IP地址用于一个组织的子网内,管理员可以与他的ISP联系,该ISP可能会从已分配给它的更大地址快中提供一些地址。但显然必须有一种方法提供ISP本身得到一块地址,该项工作由因特网名字和编号分配机构ICANN管理。ICANN向区域性因特网注册机构分配地址,这些机构一起形成了ICANN的地址支持组织,处理本区域内的地址分配/管理。

    2、获取主机地址:动态主机配置协议

    主机地址可以手动配置,但目前更多的是使用动态主机配置协议(DHCP)来完成,DHCP允许主机自动获取一个IP地址。网络管理员可以配置DHCP使得某给定的主机每次与网络连接时都能得到一个相同的IP地址,或者某主机将被分配一个临时的IP地址。DHCP还允许一台主机得知其他信息,如它的子网掩码、它的第一跳路由器地址(默认网关)与它的本地DNS服务器的地址。DHCP由于一系列的自动处理能力,又被称为即插即用协议零配置协议

    • DHCP是一个客户-服务协议,客户通常是新到达的主机。在最简单的场合下,每个子网都具有一台DHCP服务器,如果某子网中没有服务器,则需要一个DHCP中继代理(通常是一台路由器)。DHCP协议是一个4个步骤的过程:
    • DHCP服务器发现。一台新到达的主机会使用DHCP发现报文,向广播地址255.255.255.255广播主机源IP地址0.0.0.0,DHCP客户将该IP地址传递给链路层,链路层将该帧广播到所有与该子网连接的节点。
    • DHCP服务器提供。DHCP服务器收到一个DHCP发现报文后,用DHCP提供报文向客户做出反响应,该报文向子网的所有广播节点仍然使用IP广播地址255.255.255.255,因为在子网中可能存在多个DHCP服务器,每台服务器提供的报文包含该报文的事务ID、向客户推荐的IP地址、网络掩码和IP地址租用期。
    • DHCP请求。新到达的客户从一个或多个服务器中选择一个,并向选中的服务器提供用DHCP请求报文进行响应,回显配置参数。
    • DHCP ACK。服务器使用DHCP ACK报文对DHCP请求报文进行相应,证实要求的参数。

    一旦客户收到DHCP ACK后,交互便完成了。

    4、网络地址转换

    如果子网变大了,则需要分配一块较大的地址,如果ISP已经为该网络当前的地址范围分配过一块连续的地址该怎么办?有一种简单的方法,网络地址转换(NAT)。NAT使能路由器对外界的行为就如同一个具有单一IP地址的单一设备,从本质上讲,NAT使能路由器对外界隐藏了家庭网络的细节。广域网到达NAT路由器的所有数据报都有相同的目的IP地址,那么该路由器又是如何将某个分组转发给内部对应的主机呢?技巧就是使用NAT路由器上的NAT转换表。NAT的行为总结就是重写首部IP地址和端口号

    5、IPv6

    5.1、IPv6数据报格式

    IPv6引入的最重要的变化显示在其数据报格式中,其中包括:①扩大地址容量:IPv6将IP地址长度从32比特增加到128比特;②简化高效的40字节首部:允许路由器更快的处理IP字数据报;③引入流标签的概念。IPv6定义的字段包括:

    • 版本:使用4个比特用于标识IP版本号,IPv6将该字段值设置为6;
    • 流量类型:该8比特字段与IPv4中的TOS字段含义相似;
    • 流标签:该字段用于给属于特殊流的分组加上标签,这些特殊流是发送方要求特殊处理的流;
    • 有效载荷长度:该16比特值是一个无符号整数,给出了IPv6数据报中跟在定长的40字节数据报首部后面的字节数量;
    • 下一个首部:标识数据报中的内容需要交付给哪个协议(如TCP/UDP),与IPv4中的协议字段使用相同的值;
    • 跳限制:转发数据报的每台路由器对该字段的内容减1,如果变为0,该数据报将被丢弃;
    • 源地址和目的地址;
    • 数据:IPv6数据报的有效载荷部分,当数据包=报到达目的地时,该有效载荷就从IP数据报中移出,交给下一个首部中的协议;

    image-20201114213430304

    IPv4数据报中的几个字段将不会出现在IPv6中,包括:

    • 分片/重新组装:IPv6不允许在中间路由器上进行分片与重新组装,只能在源和目的地执行;
    • 首部校验和:由于运输层和数据链路层协议已经执行了校验和操作,设计者觉得多余所以去掉了该功能;
    • 选项:选项字段没有消失,它被允许出现在下一个首部字段,从而使得IP首部称为定长的40字节

    5.2、从IPv4到IPv6的迁移

    已经部署的IPv4系统无法处理IPv6的数据报,在实践中广泛采用的方法包括建隧道。两台IPv6路由器之间的中间IPv4路由器的集合称为一个隧道。隧道发送端的IPv6节点可以将整个数据报放到IPv4数据报的数据字段中,隧道的接受端最终会收到该数据报。

    四、通用转发和SDN

    OpenFlow是一个得到高度认可的通用转发标准。匹配加动作转发表在OpenFloe中称为流表,它的每个表项包括:

    • 首部字段值的集合,入分组将与之匹配;
    • 计数器集合,可以包括已经与该表项匹配的分组数量,以及上次更新以来的时间;
    • 当分布匹配流表项时所采取的动作集合

    ...略...

  • 相关阅读:
    移动端滑动效果
    使用Bash时的几点总结
    docker-It's possible that too few managers are online. Make sure more than half of the managers are online.
    基于elk 实现nginx日志收集与数据分析。
    python-num18 - django进阶一
    文成小盆友python-num17 - django基础
    文成小盆友python-num15 - JavaScript基础
    文成小盆友python-num14 - web 前端基础 html ,css, JavaScript
    文成小盆友python-num13 整个堡垒机
    install pip3 for python 3.x
  • 原文地址:https://www.cnblogs.com/Jscroop/p/13991726.html
Copyright © 2020-2023  润新知