- 控制平面:控制源到目的地址的路径中的路由器的路由方式 - 数据平面实现转发,对于输入到路由器的分组,路由器必须决定这个分组该转发到哪一个链路
- 控制平面实现路径选择,涉及到路由选择算法
路由选择算法
- 路由选择算法是为了确定从发送方到接收方的一条较好的路径而准备的
- 一个计算法网络的抽象图
![image]()
以c(x,y)表示节点x,y的权值。没有边则为无穷大表示
路由算法的分类
- 按集中式分散式划分
- 集中式路由选择算法
- 集中式算法需要整个网络拓扑图的完整信息,然后获得一个全局结果
- 具有全局信息的算法叫做链路状态算法(LS算法)
- 分散式路由选择算法
- 节点只有网络链路开销的部分信息。以迭代分布式的方式计算出最低开销路径。
- 距离向量算法(DV算法)就是一种分散式路由选择算法
- 按静态动态划分
- 静态路由选择算法:人工调整
- 动态路由选择算法:随着网络流量负载或拓扑发生变化动态改变路由选择路径
- 按对负载的敏感度划分
链路状态算法
- 通过让每一个节点向其他节点广播状态从而获得全局结果
- 实现:迪杰斯特拉算法,普里姆算法
- 有一点需要注意,网络中的拓扑图可能并不是一个无向图,而可能是一个有向图,一条边来和去的开销不一定相等。
- 如果考虑链路上的负载,那么每条边的权值还要受到负载影响
- 链路振荡
![image]()
如上图所示,对于x,y,和z节点来说,此时它们都发现逆时针方向到w的花费更大,于是把路径都改为顺时针,这样顺时针花费又会变得太大,于是又改为逆时针方向,如此往复,就会产生振荡现象
- 避免振荡,就要减少同步,一种构想是让路由器在不同时刻运行LS算法,而不是一直运行,但是据研究发现这样依然会产生振荡的可能,因此提出了另外一种方法,让不同路由器发送链路通告的时间随机
距离向量算法
- 是一种迭代的异步的分布式的算法
- 分布式指的是每一个节点都要从一个或者多个节点收到信息
- 迭代指的是接收信息的过程会一直继续直到邻居间没有更多信息要进行交换
- 异步指的是不要求所有节点步伐一致
- 数学依据:$$d_x(y)=min_v{c(x,v)+d_v(y)}$$,满足最优子结构,是一种动态规划思想的体现
- 对于DV算法,应用上述方程式,假设已经知道了一个节点v'满足上述方程的最小值,那么来自于x的分组此时应该发送给v',剩下的让v'去处理。问题来了,x节点怎么知道邻居的$$d_v'(y)$$的最小值呢?我们可以让邻居节点每过一段时间就给自己的邻居发送自己的$$d_v'(y)$$值,这样就实现了更新。
- 距离向量算法有一个重大的缺陷,以下面的图为例子
![image]()
a中,对于节点x,D(y)=4,D(z)=5;对于节点y,D(x)=4;D(z)=1;对于节点z,D(x)=5,D(y)=1;当权值为4的那条边改变为60的时候,y发现了到x的变化,于是Dy(x)=min{c(y,x)+Dx(x),c(y,z)+Dz(x)}=min{60+0,1+5},发现一个问题,那就是Dz(x)本来就是取得x-y-z路径,Dy(x)变化,y通知z于是Dz(x)=6+1=7,Dz(x)变化,那么Dy(x)也发生变化,变为7+1=8,如此往复44次,才能够稳定,这会导致信息增加得很慢。
- 为了避免上述的情况,如果z节点到x的Dz(x)是由Dy(x)计算得到的,那么z节点就会给y节点发送一个欺骗消息,告诉y节点Dz(x)=∞,于是避免了上述情况,但是这种方法只能解决两节点间的无穷计数问题,对于三个及以上的节点就无能为力了
LS与DV比较
- 报文:
- LS为了获取全部网络拓扑情况,需要发送NE个报文,N是节点数,E是边数
- DV只在两个节点之间交换报文
- 收敛速度:
- LS通过O(N^2)次数得到结果
- DV收敛较慢,而且会与到选择环路,无穷技术的情况
- 健壮性:
- 由于LS是单独计算自己的转发表,而DV是传播式的计算转发表,所以当DV中一个节点计算故障,就会牵连其他节点
自治系统内和自治系统间的路由路由选择协议
- 因特网是巨大的,如果对整个系统使用一个路由算法,那么路由之间的选择信息的开销将会变得非常大,所以要采取一些措施
- 一些ISP网络更愿意自己管理自己内部的网络系统
因此产生了自治系统(AS)内部路由选择协议
什么是OSPF
- 是一种链状态协议,使用泛洪链路状态信息和迪杰斯特拉算路径开销算法
- 管理员可以设置链路的开销
OSPF的优点
- 安全,仅仅有受信任的路由可以参与AS内部的OSPF协议,非法入侵者被拒绝。不同路由器间可以使用共享密钥来进行验证
- 多条路径选择,如果有多条路径可以选择,那么OSPF允许使用多条路径进行传输
- 支持单播和多播路由
- 支持在单个AS中配置多层次结构。OSPF系统可以层次化的配置多个区域,每个区域都可以运行自己的OSPF算法
什么是BGP
- BGP是一个自治系统间的选择协议,期间可能跨越多个AS
- BGP全名叫做边界网关协议
- 对于一个BGP系统来说,路由表中的项一般以(x,I)来表示,x表示前缀,I表示端口,一个子网对应一个前缀
- 路由器可以从邻居AS中获得前缀可达性信息
- 可以帮助确定最合适的路由
BGP工作原理
- 网关路由:在子网的边缘,与其它子网相连
- 内部路由:在子网内部
- eBGP:两AS之间的连接
- iBGP:AS内部两个路由器之间的连接
- 一个AS要告知其它AS自己的存在,需要给其他的AS发送BGP告知报文,一个列子如下:
![image]()
这个网络中,假设AS3的前缀标记为x那么AS3可以给AS1直接发送一个BGP报文,或者给AS2发送一个报文,AS2再把报文转发给AS1
- BGP的两特别属性
- AS-PATH:存放路径,比如当AS3的BGP消息经过AS2发送到AS1中,那么AS-PATH中就为AS2 AS3 x,x是地址前缀;AS-PATH还可以起到环路检测的作用,当一个AS再一次接收到BGP时,会检查AS-PATH,如果有自己的AS记录,就说明产生了环路
- NEXT-HOP,指示该向哪个路由器发送数据报。例如对于上面的AS2 AS3 x,中,NEXT-HOP存放了AS2的地址
烫手山芋选择法
- 思想就是把数据送出自己的AS,越快越好,换句话说,如果一个AS内部路由要给另一个AS路由发送信息,那么它会找到距离自己网关最快的一条路径,到达网关之后由网关处理
控制平面中的SDN
组成部分
- 控制器
- 网络控制应用程序
![image]()
一个SDN应用结构
特点
- 随心所欲定制流表,可以实现任意形式的转发模式;而对于传统软件来说,要必须改变所有路由器中的软件,这些路由器有可能是多个厂商提供的,因此更增加了复杂性
- 已经实现内部AS的SDN,正在向外部AS扩展
控制器
- 层级结构
- 通信层:控制器与受控设备之间的通信。是控制器体系结构的最底层
- 网络范围状态管理层:作出最终的控制决定,例如设置自己想要的端到端转发,以实现网络的负载均衡,或者因为防火墙设置想要拦截某些数据。
- 为网络控制应用程序提供的抽象接口,使得网络应用程序可以读取状态管理层的读写网络状态和流表
- 控制器被认为是逻辑上集中的,但实现是分布式的,这是为了让系统更加健壮
![image]()
控制器的组件图
OpenFlow协议
- 应用在控制器和被控制的交换机或者其他实现了OpenFlow API的设备之间
- 运行在Tcp之上,端口号是6653
- 从控制器到受控器流动的报文主要包含以下几种:
- 配置相关报文:包含现有配置信息,也可以包含设置交换机的配置参数
- 状态修改报文:被控制器发出,用来增删改交换机流表中的表项并设置交换机的端口特性
- 读状态报文:从交换机的流表或端口中获得统计数据和计数器值
- 发送分组:命令交换机从特定端口中发送一个特定报文
- 从受控器到控制器流动的报文主要有以下几种:
- 流删除报文:通知控制器自己已经删除的报文,可能是因为超时,或者是因为收到修改报文的命令
- 端口状态:通过该报文向控制器反馈自己的状态
- 分组入:如果一个分组到达流表之后不能与任何一个流表项匹配,就会被发送给控制器进行额外处理
ICMP协议
用途
- 全称因特网报文控制协议,被用来沟通主机和路由器
- 典型用途是差错报告
- ping到主机的过程就用到了ICMP报文
结构
- 在IP报文中承载,承载在IP分组中,被认为是IP的一部分。虽然从结构上来说是位于IP之上的。类似于Tcp协议
- ICMP报文中有一个类型字段和一个编码字段,是用来确定报文类型的,相应图表如下所示:
![image]()
ping用的是8,0类型报文,是回显请求类型
网络管理和SNMP
网络管理的组件
- 管理服务器:是一个应用程序,有人的参与,运行在网络运营中心的集中式网络管理工作站上
- 被管理设备:网络组件,例如交换机,路由器,主机等等
- 管理信息库MIB:放置被管理设备的被管理对象信息,如计数器,UDP接收数量等等。MIB对象由SMI数据描述语言所定义
- 网络管理代理:运行在被管理设备中的一个进程,与管理服务器通信,在其命令下采取本地动作
- 网络管理协议:运行在管理服务器和被管理服务器之间,经过代理来采取行动
简单网络管理协议
- SNMP是简单网络管理协议的缩写,是应用层协议
- 管理员给代理发送信息常用请求-响应模式,管理员向代理发送请求,代理执行后并响应
- 代理可以给管理服务器发送一种非请求报文,称为陷阱报文,用于通知服务器产生的异常情况导致的MIB对象值改变
- SNMP2定义了七种类型的报文,每一个报文被称为协议数据单元PDU,PDU格式如下
![image]()
- PDU类型
- GetRequest、GetNextRequest、GetBulkRequest PDU是管理服务器向代理发送的,请求被管理设备的一个或者多个MIB对象值,差异在于请求的粒度不同,代理使用Response报文响应
- SetRequest PDU是用来设置被管理设备的一个或者多个MIB对象的值,代理返回Response报文,里面包含了差错状态字段,表示该值是否被设置成功
- InformRequest PDU通知另一个MIB信息管理服务器,这个通常是一个远程信息服务管理器
- 陷阱报文,被管理设备在管理服务器要求响应的事件发生时响应
posted @
2021-12-16 16:58
NoBugNoError
阅读(
413)
评论()
收藏
举报