计算机网络note_路由选择算法

1、路由

1.1、路由的概念

路由:按照某种指标(传输延迟、跳数、拥塞程度)找到一条从源主机到目标主机的“较好”的路径。

路由器连接子网,主机在子网当中,主机之间的路径,可以等价于源子网到目标子网的路径;


1.2、路由选择算法的原则

  • 正确性:路径能正确导向目标IP,且没有处理不了的目标IP;
  • 简单性:算法简单,最优但复杂的算法延迟很大并不实用;
  • 健壮性:能适应网络拓扑的变化,带宽的变化;
  • 最优性:某个指标最优(可次优);

2、网络拓扑的一些概念

2.1、网络拓扑图的概念

  • 节点:路由
  • 边:代价;(延时、拥塞程度等)

问题:求节点u到节点z的一条路径,使得代价最小;


2.2、汇集树(sink tree)

一个节点到所有其他节点的最优路径形成的树;

网络拓扑是(a),B的汇集树是(b),(b)中显示了节点B到其他任意一个节点的最优路径;


3、link state 算法

基于全局路由信息,所有的路由器拥有完整的拓扑和边代价的信息;

  • 获得整个网络拓补和代价信息;
  • 使用LS路由算法(dijstra算法),计算本节点到其他节点的最优路径(汇集树);
  • 按照这个最优路径得到路由表,转发;

LS算法工作过程:

1、获知相邻节点网络地址

  • 一个路由器上电之后,向所有线路发送HELLO分组;
  • 其他路由器收到HELLO分组,应答,告知自己的名字(全局唯一);
  • 在LAN中通过广播HELLO分组获得其他路由器的信息,可以认为引入一个人工节点;

2、测量到相邻节点的代价(延迟、开销)

  • 实测法,发送一个分组要求对方立即响应,测出RTT;

3、组装一个LS分组,描述它到其他相邻节点及代价的情况;

4、将LS分组泛洪到所有其他路由器;

  • 要避免环状泛洪;比如加一个TTL字段;

5、以上4步,获取整个网络拓扑和边代价,通过Dijstra算法找出到其他所有节点最短路径;

可能会震荡,比如指标是拥塞程度,大家通过计算都从轻载的路径走,导致轻载变重载,又切换到另一条可能原本重载的路径;

LS算法应用情况

  • OSPF协议,用于Internet;
  • IS-IS(intermediate system - intermediate system),用于Internet主干中;

4、distance vector算法

4.1、DV算法思路

利用Bellman-Ford方程,迭代地与邻居交换路由信息,更新路由信息;

一个简单的例子,u的邻居有x,v,w,要计算到z的值,就计算通过三个邻居到达z的值+u本身到邻居的值,取最小; 


4.2、DV算法整体工作流程

初始

  • 三个节点XYZ都只知道自己到邻居XYZ的距离;

第一次交换

  • 对于X,YZ的信息交给X,X开始重新计算自己到XYZ的代价,发现有短路径,于是更新;
    • X到X的代价,0;
    • X到Y的代价,X直接到Y,X通过Z到Y,取最小值2;
    • X到Z的代价,X直接到Z,X通过Y到Z,取最小值3;
  • 对于Y,XZ的信息交给Y,Y重新计算,发现自己不需要更新;
  • 对于Z,XY的信息交给Z,Z重新计算,需要更新;

第二次交换

  • 对于X,把Z的信息更新;
  • 对于Y,把XZ的信息更新;
  • 对于Z,把X的信息更新;


 4.3、DV算法的特点及改进

好消息传得快;(某个路由器接入,或有更短路径)

好消息的传播,以每一个交换周期前进一个路由器的速度进行;


坏消息传得慢,无限次循环;(比如某个路由器断开连接)

初始,B、C、D、E到达A的代价是1;然后,A断开; 

第一次交换,A的表项无了,B要更新信息,B到A = B到C + C到A =1+2=3;

第二次交换,由于B的表项更新了,C的表项也要更新,C到A = C到B + B到A = 1+3=4;

第三次交换,由于C的表项更新了,B和D的表项更新,B和D到A都是从C这个邻居的,因此是C到A+1=5;

第四次交换,B更新了C又要更新,C又加1变成6;同时上次D更新了导致E更新,消息这才传到E,而且还是不对的,后面循环.....

 


水平分裂(split horizon)算法,对上述无穷计算问题的解决方法

还是按上面的图说明,一开始BCDE是1234,然后A断开;

第一次交换,A的表项无了,B要更新信息,B问C,由于C到A是经过B的所以C告诉B自己不可达A;

第二次交换,由于B的表项更新了,C的表项也要更新,通过邻居B到不了A了,通过邻居D也到不了A(原因同上,D知道自己是经过C到A的,所以当C问自己到A的代价,回复不可达)

 

 

5、LS和DV算法比较

  • 消息复杂度
    • LS:有n个节点,E条链路,发送报文O(nE)个;
    • DV:只和邻居交换信息;
  • 收敛时间
    • LS:O(n^2),也可优化到O(nlogn);
    • DV:收敛比较慢; 
  • 健壮性(某个路由器故障)
    • LS:影响局部;
    • DV:会扩散到全局;

参考链接:关于Dijstra看视频,跟着画画想想比文字描述的算法要清楚;

【算法】最短路径查找—Dijkstra算法_哔哩哔哩_bilibili

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值