图的概念:由端点集V和边集E组成的图G,称为图,记为G={V,E}
端点集:图中所有的节点组成的集合
边集:图中所有的端点之间的连接边组成的集合
有向图:表示端点与端点之间的传递是有方向的
有权图:表示有向图的方向上面有相应的权值
端的度数:与某一端点相关联的边数,记为d(vi)
端的出度:有向图中,离开或者从端Vi射出的边数
端的入度:有向图中,进入或射入端Vi的边数
有向图中,端的度数=入度+出度
子图的概念:跟子集概念一样,例如G’边集和端点集都属于G,则G’是G的子图
真子图:G‘属于G,但是边集并不是一一对等的,简单来说就是属于但是不等于就是真子图
生成子图:包含原图所有端点的子图
最大连通子图:若G’是图G的一个连通子图,若再加上属于原图G中的任何一个其他元素,图G’就失去了连通性,成为非连通图,则G’为图G的最大连通子图
破圈法:见圈破圈,即看到图中有圈,则选择去掉一条边,重复过程,直到图中无圈为止。
先把边按照权值由小到大排列,依次挑选尽可能小的边构造成树,首先选择权值最小的边,再从其余剩余的边中选择出不能与此边构成圈的权值最小的边,添加边,按照上述的步骤,直到不存在合适的边停止,此时得到最小生成树。
图的联结度:最小割端集中的端数。
最小割端集:联结图去掉部分端之后,部分数增加,这些端的集合称为割端集。
一般是去掉部分端以后图变为非连通子图。
图的联合度:最小割集的边数。
割集:割边集的真子集。
割边集是去除部分边之后图变为非连通子图。
1.利用破圈法求生成树
2.求解连枝集,连枝集=G-T(除去破圈的边之外的边的集合,也称为树枝)
3.基本割集:生成树中每条树枝+某些连枝
4.判断组合的去除之后,原来的图是否是非连通子图,如果是连通子图,可以判定此组合为非割集
如果是非连通组合,此时可以判定组合为割边集。
5.对于割边集,前面也说了,割集是割边集的真子集,要判断割集,则就要判断此割边集中真子集是否是割边集。
6.如果判断的割边集中的真子集都不是割边集,可以得到此组合为割集!
上述的判断是根据去掉这个边,原图能够称为--非连通子图--的则为割边集!
无向图
只要此边是属于两个端点之间的,则两个端点都对其负责,矩阵中都为1
有向图
分为流入和流出,对于流入的为-1,不需要自己负责,流出的为1,需要自己负责
避圈法的主要思想是:首先选一条权最小的边,以后每一步,在未选的边中,选择一条权最小且与已选的边不构成圈的边。每一步中,如果有两条或两条以上的边都是权值最小的边,则从中任选一条,此时最小生成树不唯一。
步骤:
1. 首先将给定的赋权图G中所有的边按照权值大小排序,从小到大排序,记为e1,e2....em
2. 将e1纳入规划中,也就是将e1放入T(树枝集)
3. 考虑e2,如果加入e2不会产生回路,则加入,如果产生回路则考虑e3,重复此选择过程,直到无边可选。此时得出的T
就是G的最小生成树
4. 算法执行的次数:n端点数,n-1执行次数
步骤:
G = {V,E}带权无向连通图 T = {Vt, Et}为G的最小生成树
1. 初始化,任意选择一个节点vi,将其加入到Vt中,判断与其关联的所有边,选择权值最小的那条边,将这条边连接的 另外一个节点加入到Vt中
2. 重复执行上述步骤n-1次,直到Vt=V截止
上述步骤注意,一旦此结点进入到Vt中,不可二次加入!
P算法的每一步得到的都是一个图,不用考虑回路问题。
定义:在一个赋权图G中,任给两点u,v,从u到v可能有多条路,其中所带的权和最小的那条路称为图G中从u到v的最短路径。u到v的最短路径上每条边所带的权和称为u到v的距离。在赋权图中求给定两个顶点之间最短路径的问题称为最短路问题。
算法思想:
1. 设置两个顶点集合S,T。S存放已确定的最短路径的顶点,集合T存放尚未确定为最短路径的顶点,初始时,S中只有起 始起点v
2. 按照最短路径递增的顺序逐个将集合T中的顶点加入到S中,直到从v出发可以到达所有的顶点都加入到S中结束,这一 过程称为顶点迭代
上述算法的主要思想是按照最短的路径先来,此路径的结点没有接入的时候,与其相关的需要转接的结点都处于不可达状态,不可计算路径,只有接入以后才可以计算,最先被定义的路径长度,后续如果长度有变小的趋势才可以更新路径长度。
以上图为例子,计算a到所有结点的最短路径。
上述步骤描述:注意(*)表示该结点接入下一步迭代退出
1.初始化,a为0,其余距离都是无穷
2.a加入以后,b可达,c可达,标出路径长度
3.此时b路径较小,b接入,此时发现c的路径经过b转接路径距离变小,更新c路径长度,此时e可达,更新路径
4.c距离较小,接入,此时其余路径长度不能经过c变小,所有都不变,f在c的接入下,还是不可到达,所以不变
5.e距离较小接入,此时f可达,更新f的路径长度。
6. ........最后可以得到a到每一个点的最短路径
F算法与D算法原理相同,只是F算法使用矩阵来表示,并有一个系统化的运算。
主要的不同是因为F算法中有W径长矩阵和R转接路由矩阵
这个计算过程比较复杂,每次经过一个点转接就需要计算一次的转接路由矩阵,且每次计算的时候都要从第一个点判读是否距离有减少,减少的才可以进行更新,同时路由矩阵也需要改变。
**需要注意:**R转接路由矩阵中的值是根据转接点的下标来定。
G={V,E}表示一个通信网,V表示端集,E表示边集
边的容量:每条边能通过的最大的流量被称为容量。使用cij表示
每条边的实际流量用fij表示
可行流:满足非负性、有限性、连续性条件的流。不同的流量分配可以得到不同的可行流。
两种可行流的优化问题:
概念:
前向边:与割集方向一致的边。
后向边:与割集方向相反的边。
割量:定义割集的前向边容量之和为割量。
对于前向边而言:
饱和边:fij=cij 一个是边的实际流量,一个是边的最大流量
非饱和边:fij
ij 可增流:表示前向边都是非饱和的,后向边都是非零流量的
性质:在可增流路上,所有正向边上的流量可增加。
最大流量-最小割量定理:
当源宿端的流量达到最大的时候,每个割集(X,X_)中的前向流量f+(X,X_)都等最大流量Fmax
并且总存在这样一个割集(X,X_),其每条正向边都是饱和的,其割量在各个割集中达到最小值,且也等于Fmax
即:最大流量等于最小割量
算法的目的:求解最大流量
算法思路:具体的思路我就不照搬照抄了。
核心的要点:M算法就是来求最大流量的,而且这个求出的最大流量还是一定正确的。下面举个例子:
需要求解上述最大的流量:
求解步骤:
1. 首先看Vs-V1这条路,从V1-Vt传输的是8,而实际Vs-V1只有4的流量,即fs1=4此时可知道自己没又达到标准8,需 要其他线路的支援,V1等待支援中.......
2. 然后看V2,V2直接是到不了Vt的,此时它需要寻求其他运输线帮忙运输自己的流量,此时看V2-V1,总流量为5,可是 Vs-V2只有3,即fs2=3,f21=3,此时3就被支援到了V1,此时f1t也就是V1-Vt实际流量f1t=4+3=7,还是没有到8, 此时仍需要支援....
3. 看Vs-V4,传送的为9,但是运输到Vt的轨道只能传输3的流量,此时V4到V1支援1,所以fs4=4,f4t=3,此时被支援
f1t = 7+1=8,此时不需要支援了。
4. 看Vs-V3,V3-Vt最大能传输的是4,得到fs3=4,f3t=4
综上我们可以得到最大的的可行流为:
fs1=4, fs2=3, fs3=4, fs4=4
f21=3, f41=1
f1t=8, f3t=4, f4t=3
最大总流量为:
Ftmax = f1t + f3t + f4t = fs1 + fs2 + fs3 + fs4 = 15
问题:如果每条边eij都有自己的费用函数aij,当总流量Fst相同时,如何找到满足条件的,最小费用的可行流。
目的:达到流量的最佳分配
先举例子:图中数字按照cij,aij(容量,费用)
1.寻找此图的最佳流
2.找到一组可行流
此时的总流量为Fst=6
总费用为Cost=69
3.根据图a做出图b的补图
4.根据补图寻找负价环
5.根据负价环做相应的计算
此时的负价环为v1-v2-v3-v1, 负价环的单位流费用为:2+1-6=-3
表明每增加一个单位流费用减少3
取环中最小的流也就是2作为增流的量:此时节省的费用为:-3x2 = -6
此时总费用Cost=69-6=63
6.得出新的可行流
负价环算法的原理:
1、在图中找到任一满足总流量Fst的可行流
2、根据原图和可行流的图做出补图
3、补图的做法:Cij>Fij,表示未达到最大的容量,此时需要作出一条新的边eij,容量为Cij-Fij,费用为aij
若Fij>0,需要做边eji,容量为fij, 费用为-aij
4、找负价环,然后计算负价环单位流量费用,根据环中流最小的那个来增流
5、修改原有的边的流,得到新的可行流。如果没有负价环的话,算法终止。
1.求解此图需要的总流量为Fst=9,求最佳流
2.在图上找满足9的可行流
此时的总费用为Cost = 102
3.根据图a做出图b的补图
4.找负价环
5.计算
此时得到负价环为v2-v3-v4-v2
负价环增流的单位费用:-6+1+3=2
最小的增流量为:min{3,4,3}= 3
此时的费用:Cost = 102 - 3x2 = 96
6.得出最佳的可行流
7.根据图a和图d做补图
8.找负价环
已找不出负价环,此时算法结束。最佳流分配如图d,费用为96
路由:指导IP报文发送的路径信息
路由来源分类:
静态路由 | 动态路由 |
---|---|
由网络管理员手工指定的路由 | 路由器使用路由协议从其他路由器那获取的路由 |
当网络拓扑发生变化时,管理员需要手动更新静态路由 | 当网络拓扑结构发生变化时,路由器自动更新信息 |
路由协议是路由器之间交互信息的一种语言。路由协议定义了一套路由器之间通信时使用的规则,路由协议维护路由表、提供最佳转发路径。
常见的动态路由协议
路由协议算法:
1.RIP协议是一种分布式的基于距离向量的内部路由选择协议。
2.RIP协议是通过“距离”的定义,来实现对最短路径的寻找。它认为一个好的路由就是它通过的路由器的数目少, 即“距离短”。
3.使用无连接的UDP进行路由信息的交互
4.RIP支持:水平分割、毒性逆转、触发更新(都是用来解除RIP环路的机制)
RIP协议的工作流程:
1.向周围路由发送请求报文
2.等待周围路由器的响应
3.路由器收到响应后,修改本地路由
4.向周围路由广播路由修改信息
5.一连串的广播后,所有连着的路由信息都被更改
6.老化机制对超时的路由进行老化处理,实时更新
注意:
首先需要知道什么是路由环路
路由环路:数据包不断的在网络中传输,却始终到达不了目的地,导致掉线或者网络瘫痪。
流程:
路由环路就是路由器C将11.4.0.0设置为不可达,准备在自己更新周期来的时候通知B,但是B的更新周期提前到来,B更新的时候导致C从B处知道了从B可以到11.4.0.0,于是C-B-C就跳数为2,后面真的到了C的更新周期,由于此时在这里的信息是路由器C知道自己不能到达11.4.0.0,但是可以从B处到达11.4.0.0,于是B认为可以通过C到达此IP地址,于是更新跳数为3,于是就不断循环C认为B可以,B认为C可以,其实从第一次开始的时候就错了!这就形成了一个环路!
1.水平分割
实现:水平分割技术不反向通告任何从终端收到的路由更新信息,而只通告那些不会由于计数到无穷而清除的路由。原理就是路由器从某个接口接收到的更新信息不允许再从这个接口发回去。
2.触发更新
实现:一般的更新都是需要等待一个周期时间的,但是触发更新不用,当11.4.0.0不可达的时候,C立即向B报告并将其到达11.4.0.0的metric标为16,此时B收到消息之后将到达11.4.0.0的路径表metric标为16,表示路径失效不可达,然后通知A,做同样的事情,依次毒化各个路由器。环路解除。
3.抑制时间
实现:路由环路的生成是因为B更新周期先来,现在抑制一个时间片之后让B更新,可以避免环路的产生,原理:当路由器从邻居接收到以前能够访问的网络现在不能访问的更新后,就将该路由标记为不可访问,并启动一个抑制计时器,如果再次收到从邻居发送来的更新信息,包含一个比原来路径具有更好度量值的路由,就标记为可以访问,并取消抑制计时器。
4.抑制时间结合触发更新
实现:这个对于避免环路产生的准确率更高。
5.路由抑制(路由毒化)
实现:当网络11.4.0.0出现故障无法访问的时候,路由器C便向邻居路由发送相关的更新信息,并将到达该网络的度量值标为无穷大,告诉他们11.4.0.0不可达,路由器B接收到这个消息以后将该链路路由表标记为无穷大,表示此路径已经失效,并向A通告更新消息,依次毒化各个路由器,通知11.4.0.0已经失效,从而避免环路的产生。上图中的B通告C这是毒性反转的一个例子,即B知道11.4.0.0的度量值为无穷大的时候,就发送一个毒性反转的消息给C,表明11.4.0.0不可达,这样保证了所有的路由器都被毒化。
OSPF属于IGP内部网关路由协议,运行于IP协议之上,基于链路状态算法
开放式最短路径优先;“开放”表明它是公开发表的;
“最短路径优先”是因为使用了 Dijkstra 提出的最短路径算法SPF。
是一种分布式的链路状态协议,基于链路状态来选择最佳路线,使用洪泛法向本自治系统中所有路由器发送信息。
**链路状态算法的路由计算过程,图中显示的是获取拓扑信息的方式,还需要生成最短路径树,再计算路由,具体: **发送一个hello报文,周围节点接收到hello报文之后给出自己的地址返回给发送方表示我是你周围的临界点。发送方再发送echo报文,接收方收到echo立刻返回,根据时间戳就可以测出链路成本了。然后这个路由器就可以用相邻链路成本用LS算法计算自己的路由表信息。
路由器之间通过交换链路状态来生成网络拓扑信息
区域是一组路由器与网络的集合
单区域:是指所有运行OSPF协议的路由器被划分到同一区域
多区域:是指所有运行OSPF协议的路由器被划分到不同的区域
自治系统:是指同一个技术管理机构使用统一选路策略的一些路由器的集合
为什么需要划分多区域?
单区域LSDB庞大,SPF计算复杂;拓扑结构变化的概率增大,造成网络中大量的OSPF协议报文在传递,降低了网络的带宽利用率
IS-IS直接运行于链路层之上,在链路层的帧头之后直接封装IS-IS数据
集成IS-IS协议是中基于链路状态算法的IGP协议,可以在CLNP和IP环境中运行,采用TLV设计,扩展性好,目前在大型ISP的网络中被广泛部署。
参考博客----https://blog.csdn.net/achejq/article/details/19400885
共同之处:
1 都是链路状态路由协议,都要求区域内的路由器交换链路状态信息,链路状态信息被收集到链路状态数据库中
2 都是用了一种实现路由选择信息交换相似机制
3 都在广播网络中选择指定路由器来控制扩散并降低这类介质中多对多邻接的系统资源需求
4 都是基于链路状态库中的信息,采用几乎相同的算法-SPF算法来计算最佳路由
5 都支持两个分层路由选择
6 都支持IP前缀的无类路由选择(支持VSLM)
不同之处:
IS-IS | OSPF | |
---|---|---|
1 | ISIS支持ISOCLNP和IP两种网络 | 仅支持IP网络 |
2 | ISIS报文封装在数据链路层帧中 | 封装在IP包中 |
3 | SIS路由器通告包含直连邻居及路由信息的TLV的LSP,使用LSP承载所有的路由选择信息 | OSPF使用不同类型的LSA承载不同的路由信息,LSA被封装进LSU通告给邻居 |
4 | ISIS数据包利用TLV字段承载所有易于扩散的信息 | OSPF只有LSA可扩展,而LSA扩展性太差 |
5 | ISIS路由器只属于一个特定区域。 | OSPF基于接口划分区域,路由器可属于不同的区域。 |
6 | 对于所有实际应用,ISIS仅支持广播和点对点链路。不支持NBMA链路。在NBMA环境下,可配置为p2p子接口或者广播链路(如果是全互联的连接方式)。 | OSPF支持如下网络类型:p2p、广播、NMBA、点到多点和按需链路。 |
7 | 区域的边界在链路 | 区域的边界在路由器上。 |
8 | 仅仅在广播链路实现3步邻接关系,IETF正在努力指定点到点链路的3步进程。 | OSPF邻接关系的建立涉及到一个更加复杂的过程。 |
9 | 由于ISIS区域中IP前缀是SPF数的叶子,故部分路由计算(PRC)较多,通常这就意味着在一个大的区域中路由处理器的负载较低。 | 部分SPF被限制用于域间和外部路由,任何要求较小的区域和分层拓扑扩展引起的域间链路动荡导致完全的SPF计算。 |
10 | 最初数据库同步在邻接关系建立后进行。 | 最初数据库同步在邻接关系形成前进行。 |
题目:R3是R1邻居路由,按照下列信息更新路由表
上面的例子是要更新到所有目标网络的跳数,也就是更新R1的路由表:
1.N2,R1到N2下一跳是R2,由于R3中没有更少的跳数,所以不更新
2.N5,R1到N5下一跳是R3,由于RIP协议中的规定,下一跳是邻居路由无论跳数增大还是减少都必须跳,所以R3到N5的跳 数为4,R1经过R3,跳数变为5.更新
3.N6,R1到N6经过R2跳数为5,但是R3到N6跳数只有3,即使R1先到R3再到N6,也只要跳数4,所以更新N6,4,下一跳 R3
4.N8,R1到N8经过R4跳数为2,R3到不了,所以不更新
5.N9,R1到N9直接到是到不了,只有根据R3转,所以跳数为3,下一跳为R3,更新
排队系统:
排队系统的组成:
排队系统的三个基本参数:
ρ \rho ρ= λ / m \lambda/m λ/m\mu :排队强度,也叫作稳定性参数。
排队论中常用的两个分布:
具体参照:
排队论文档