手撕计算机网络——网络层(三):路由选择

前言

        我们前面在网络层的数据平面学习了路由器的转发原理和方法,而在控接下来的控制平面的学习中我们将会弄清楚如何控制路由器转发以及如何配置和管理控制网络层组件和服务。在这篇文章中,荔枝会基于网络层的控制平面梳理路由选择算法、路由选择方法、SDN控制平面的相关知识。


文章目录

前言

一、引入 

二、路由选择算法

2.1 路由选择算法的分类

2.2 链路状态路由选择算法

2.3 距离向量路由选择算法

三、OSPF协议

四、BGP协议

4.1 通告

4.2 确定最好的路由 

五、SDN控制平面

5.1 SDN控制平面

5.2 OpenFlow协议

总结


一、引入 

        在前面的学习中,我们知道路由器是基于转发表和流表来实现路由转发的,这些转发表或流表是连接网络层的数据平面和控制平面的首要元素,在接下来的学习中荔枝也会基于网络控制平面梳理计算、维护和安装这些转发表和流表的流程和实现方法。网络控制平面的构建方法主要分为:每路由器控制和逻辑集中式控制。

每路由器控制

        每路由器控制是指在每台路由器中都会运行路由选择算法,路由器除了转发功能还有路由选择功能,每台路由器中都会有一个路由选择组件,该组件用于与其他路由组件通信和计算转发表;

逻辑集中式控制

        在数据平面中,我们知道的SDN其实在其控制平面中采用了逻辑集中式控制的方法,逻辑集中控制器计算并分发转发表到路由器的控制代理(CA)中,控制代理的任务就是与控制器通信并且执行控制器的命令。


二、路由选择算法

        我们知道路由选择是网络层控制平面的工作,控制平面的控制器会基于路由选择算法来发送方和接收方之间规划好一条通过路由器网络的最低开销的路径。路由选择算法有三种分类方式,下面就由荔枝梳理出来吧。

2.1 路由选择算法的分类

路由选择算法主要有三种分类方式,分别是:按集中式还是分散式来分、按静态和动态来分、按负载的敏感性来分。我们以此来看看着三种分类的方式,需要注意的是第一种分类方式是最常见的分类方式。

按集中式还是分散式来分:

  • 集中式路由选择算法:以所有节点之间的连通性和链路开销为输入,通过具备整个网络的全局状态信息来计算出从发送方到接收方的最低开销路径。这种知晓全局状态信息的算法又被称为链路状态算法(LS)
  • 分散式路由选择算法:该算法并不要求知晓网络中所有节点的状态信息,只需要知晓每个节点的与其直接连接的链路状态信息,路由器通过迭代、分布式的方法计算出最低开销路径。我们之后讲的距离向量选择算法(DV)就是一种典型的分散式路由选择算法。

按静态和动态来分:

  • 静态路由选择算法:路由随着时间的变化比较缓慢,通常需要人工进行调整
  • 动态路由选择算法:可以随着网络流量或拓补发生变化而改变路由选择路径,可周期性地运行或直接响应拓补或链路开销的变化,但可能出现路由选择循环和路由振荡地问题

按负载的敏感性来分:

  • 负载敏感算法:链路开销会动态地变化以反应出底层链路当前拥塞水平,在早期地路由选择算法是负载敏感的,但当今地因特网路由选择算法都是负载迟钝的(如:OSPF、BGP和RIP)

2.2 链路状态路由选择算法

        在链路状态算法中,网络拓补和所有的链路开销都是已知的,该过程是通过该节点向网络中的所有节点广播链路状态分组实现的,这经常是由链路状态广播算法来实现的。节点广播的结构就是每隔节点都有该网络的全局状态信息。LS算法通过选定节点的N次最低开销路径迭代来构建从源节点到目的节点的完整路径,算法的时间复杂度为O(n^{2})。在LS算法中,当我们同时在路由器中运行LS算法可能会导致路由选择的振荡,因此我们要避免每个节点上的算法执行时机相同。

2.3 距离向量路由选择算法

        距离向量算法(DV算法)是一种迭代的、异步的、分布式的算法。相较于LS算法使用全局状态信息,DV算法通过每个节点从其直接相连的节点中接收信息并计算,同时会将计算的结果信息发送给相邻节点,而该过程会一直持续到相连的节点没有信息需要交换为止。而计算最低开销路径我们使用的是Bellman-Ford方程:d_{x}(y)=min\left \{c(x,v)+ d_{v}(y)\right \},其中c(x,v)是从x到v的开销,d_{x}(y)是x到y最低开销路径的开销。Bellman-Ford方程得出的解为节点x转发表提供了表项,制定了一个新的节点作为下一跳的路由器。这里我们要学习两个概念:节点x的距离向量每个邻居的距离向量。节点x的距离向量包含了x到N中所有目的地y的开销估计值;每个邻居的距离向量就是对于每一个邻居我们求它的距离向量。我们在上面讲到的信息其实就是节点自身的距离向量副本。每个节点会从他的所有邻居接收到距离向量并保存,同时计算出自身的距离向量并发出去。所有的节点是以异步的方式来交换彼此的距离向量。

特别注意:节点具有的唯一信息是它到直接相连的邻居的链路开销和他从这些邻居中获取的信息。

        我们在上面讲到对于这种动态路由选择算法来说,容易遇到路由选择环路的问题:一般当我们的某一条路径开销突然变大的时候,假设有节点A、C和B,对于A来说它保持了初始状态下的路由B的距离向量,在做路由选择的时候A将通过B到达C。但此时对于B来说它觉得相比于直接到C,通过A到C的开销较小,这样就会导致了分组在AB两个节点间不停发送。解决这种问题我们可以增加毒性逆转,即B在向A发送通告时会欺骗它B到C开销为无穷大。分组直接从A到C后,A会将距离向量发送给B,B则会将其距离向量发送给A,这时候如果AC之间的大于A-B-C之间的开销,那么分组就会被毒化到这一路径下了。

LS算法和DV算法的区别:

        我们前面已经讲述了LS算法和DV算法的相关原理,其实在实际中我们采用互补的方式来解决路由选择的问题。二者区别在于:我们从报文的复杂性上来看,LS算法的报文复杂性明显要更高一些;收敛性上DV算法会慢很多,甚至会出现无穷计数的问题;DV算法的健壮性不高,一个不正确的节点计算值会扩散到整个网络。

三、OSPF协议

        随着网络的发展,路由器的规模变得很大,那么在大量的路由器中进行迭代的距离向量算法的运算无疑是不可行的,这时候就需要将路由器组织进自治系统(AS)来解决。通常来说,一个ISP中的路由器以及互联他们的链路会构成一个AS,一个AS会有一个全局的AS号(ASN)所标识。那么我们如何在一个自治系统中进行路由选择呢?我们需要在自治系统中运行一种路由选择算法——OSPF(开放最短路优先)。OSPF是一种链路状态协议,是LS算法的一种。使用OPSF的AS中一台路由器就构建了整个自治系统的完整拓补图,同时各条链路的开销是由网络管理员配置的,OPSF并不会强制使用设置链路权值的策略,而是提供一种机制为给定链路权值的集合确定最低开销的路径选择。

OPSF的优点:

  • 安全性:我们可以使用鉴别(简单的和MD5加密的)对分组信息进行真实性鉴别。默认情况下OPSF的报文是未被鉴别的;
  • 当到达某目的地的多条路径有相同的开销时,OPSF允许使用多条路径;
  • 对单播和多播路由的综合支持:使用MOPSF对OPSF进行拓展,提供多播路由选择;
  • 层次化配置AS中的多个区域。

四、BGP协议

        前面梳理了在一个AS之间使用运行OPSF路由选择算法来实现路由选择,其实在两个AS之间的源和目的地之间进行分组选路时,分组遵循的路径由自治系统间的路由选择协议——边界网关协议来决定。而BGP是最为重要的边缘网关协议,实现了数以千计的ISP粘合。BGP的功能其实就是决定两个AS之间源到目的地之间的的路由转发表的表项。在BGP中,分组并不是路由到一个特定的目的地址,而是路由到一个CIDR化的前缀(表示一个子网和子网的集合),即表项的形式为(x,y),其中x就是前缀,y是路由的接口号之一。实现BGP的路由选择功能需要保证两个过程的完成:通告BGP中的所有路由信息、确定到前缀的最低开销路由。

4.1 通告

        BGP允许每个子网向因特网的所有部分通告其存在,确保因特网中的所有AS知晓该AS中的所有子网。对于每个AS,其中的路由器要么是网关路由器,要么是内部路由器。网关路由器其实就是除了更该AS中的路由器相连接之外,还与其它的AS中的网关路由器相连接;而内部路由器则是仅与同一个AS中的路由器直接相连。在BGP中,每对路由器都会通过使用179端口的半永久TCP连接交换路由选择信息。每条直接连接以及所有通过该连接发送的BGP报文被称为BGP连接,跨越两个AS的BGP连接叫做外部BGP(eBGP)连接,其余叫做内部BGP连接(iBGP)。为了传播可达性信息,我们一般会同时开启eBGP和iBGP会话。

4.2 确定最好的路由 

        我们首先来学习几个BGP术语:当路由通过BGP连接通告前缀时,前缀会包含BGP属性。前缀及其属性就称为路由,其中有两个较为重要的属性就是AS-PATH和NEXT-HOP。AS-PATH属性通告已经通过的AS列表,BGP路由器还可以通过该属性来避免通告环路;NEXT-HOP属性记录了AS-PATH初始的路由器接口的IP地址,该IP地址并不属于目的路由器所在的AS中的IP地址集合。

        对于给定的任意目的地前缀,进入BGP路由选择算法的输入是到某前缀的所有路由的集合。如果到相痛的前缀有多条路径,则会顺序利用下面的规则去消除直至获得最好的路由:

  1. 路由会被指派一个本地偏好值作为其属性,改值可以是本地的路由器设置或者是从其它的路由器中学习得到,根据路由选择策略中的本地偏好值,具有最高的本地偏好值将会被选择;
  2. 具有最短的AS-PATH的路由;
  3. 使用热土豆路由选择,即找到送出该AS的最低开销路由;
  4. 使用BGP标识符。

特别注意的是:不管是BGP还是OPSF都是属于LS算法,至于DV算法我们还是基于SDN体系结构来讨论

五、SDN控制平面

        在前面的文章中我们也提及了SDN体系结构,现在荔枝就和大家一起深入整个SDN控制平面来学习控制分组在网络的SDN使能设备中转发的网络范围逻辑。我们会大致了解SDN的关键特征、SDN控制平面的组成以及OpenFlow协议。

关键特征:

  • 基于流的转发:SDN控制平面的工作是计算、管理和安装所有网络交换机中的流表项;
  • 数据平面和控制平面的分离:数据平面主要有网络交换机组成,负责执行流表中的动作加规则。控制平面主要有服务器以及决定和管理交换机的软甲组成;
  • 网络控制位于交换机外部:控制平面组要有两个组件组成:SDN控制器网络控制程序。控制器维护准确的网络状态信息,同时为网络应用程序提供能够监视和控制下面设备的方法;
  • 可编程:通过运行在控制平面的网络控制应用程序来利用API定义和控制网络设备中的数据平面,实现控制功能的可编程。

5.1 SDN控制平面

        SDN定义了一种网络功能分类:数据平面交换机、SDN控制器和网络控制应用程序。其中,SDN控制平面由SDN控制器和网络控制应用程序组成。控制器主要由三层功能:一是通信层上SDN控制器实现了与受控的网络设备之间的通信(南向接口API);二是具备有关网络主机、链路、交换机和其它的SDN控制设备的最新状态信息;三是为网络控制应用程序提供北向API,允许网络控制应用程序在状态管理层读写网络状态和流表。

5.2 OpenFlow协议

        OpenFlow协议是运行在SDN控制器和SDN控制的交换机或者是其他实现OpenFlow API的设备上,换句话说,该协议实现的是通信层上的通信,运行在TCP上,默认是6653端口。从控制器到受控交换机流动的重要报文有:

  • 配置:允许控制器查询并设置交换机的参数;
  • 修改状态:修改交换机流表中的表项,设置交换机端口特性;
  • 读状态:从交换机的流表和端口洲际统计数据和计数器值;
  • 发送分组:用于在受控交换机从特定端口发送的特定报文;
  • 流删除:通知控制器已经删除一个流表项,或作为收到修改报文的结果;
  • 端口状态:通知控制器交换机的端口状态变化;
  • 分组入:用于将分组发送给控制器。

总结

        在这篇文章中,荔枝主要梳理了网络层控制平面的路由选择功能实现,同时也介绍了SDN体系结构,并对OpenFlow协议进行一个简要的梳理。后续的文章荔枝将会对剩下的网络层协议进行整理,继续坚持。。。

今朝已然成为过去,明日依然向往未来!我是小荔枝,在技术成长的路上与你相伴,码文不易,麻烦举起小爪爪点个赞吧哈哈哈~~~ 比心心♥~~~

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经典卷积神经网络是指使用numpy纯写的卷积神经网络代码,该代码可以帮助理解卷积神经网络的原理。它不使用任何神经网络框架,适合那些有意愿深入理解卷积神经网络底层的人群。这个的代码相对简单,但是通过研究它,可以充分理解卷积神经网络的工作原理。 卷积神经网络(CNN)是一种常用于图像处理和识别的深度学习模型。它通过卷积层、池化层和全连接层等组成,实现了对图像特征的提取和分类。在卷积神经网络中,卷积层通过滤波器(卷积核)对输入图像进行卷积操作,以提取图像的局部特征。池化层则通过降采样的方式,减少特征图的尺寸,同时保留重要的特征信息。全连接层将特征图转化为一维向量,并通过神经网络的计算得出最终的分类结果。 通过经典卷积神经网络的代码,我们可以更加深入地了解卷积神经网络的计算过程。该代码中的全连接层实际上就是指上述提到的全连接神经网络,它将最后一次卷积操作的输出作为输入,并通过神经网络的计算产生最终的输出结果。 总之,经典卷积神经网络可以帮助我们更好地理解卷积神经网络的原理和计算过程。通过研究这个代码,我们可以深入了解卷积操作、池化操作和全连接操作在卷积神经网络中的应用,从而更好地应用和设计卷积神经网络模型。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值