路由算法
路由算法分类
静态路由:
手工配置
路由更新慢
优先级高
动态路由:
路由更新快
定期更新
及时响应链路费用或网络拓扑变化
全局信息:
所有路由器掌握完整的网络拓扑和链路费用信息
E.g. 链路状态(LS) 路由算法
分散(decentralized)信息:
路由器只掌握物理相连的邻居以及链路费用
邻居间信息交换、运算的迭代过程
E.g. 距离向量(DV) 路由算法
链路状态路由算法
Dijkstra 算法
所有结点(路由器)掌握网络拓扑和链路费用
通过“链路状态广播”
所有结点拥有相同信息
计算从一个结点(“源”)到达所有其他结点的最短路径
获得该结点的转发表
迭代: k次迭代后,得到到达k个目的结点的最短路径
符号:
c(x,y): 结点x到结点y链路费用;如果x和y不直接相连,则=∞
D(v): 从源到目的v的当前路径费用值
p(v): 沿从源到v的当前路径,v的前序结点
N’: 已经找到最小费用路径的结点集合
Dijkstra 算法:讨论
算法复杂性: n个结点
每次迭代: 需要检测所有不在集合N’中的结点w
n(n+1)/2次比较: O(n 2 )
更高效的实现: O(nlogn)
存在震荡(oscillations)可能:
e.g., 假设链路费用是该链路承载的通信量:
距离向量路由算法
重点 :结点获得最短路径的 下跳 一跳, 该信息用于转发表中
异步迭代:
引发每次局部迭代的因素
局部链路费用改变
来自邻居的DV更新
分布式:
每个结点只当DV变化时才通告给邻居
邻居在必要时(其DV更新后发生改变)再通告它们的邻居
链路费用变化:
结点检测本地链路费用变化
更新路由信息,重新计算距离向量
如果DV 改变,通告所有邻居
t 0 : y 检测到链路费用改变 ,更新DV ,通告其邻居.
t 1 : z 收到y的 的DV 更新,更新其距离向量表,计算到达x 的最新其 最小费用,更新其DV ,并发送给其所有邻居.
t 2 : y 收到z的 的DV 更新, 更新其距离向量 表,重新计算y的 的DV, ,未发生改变,不再向z 发送DV.
好消息传播快!
毒性逆转(poisoned reverse)
如果一个结点(e.g. Z)到达某目的(e.g.X)的最小费用路径是通过某个邻居(e.g.Y),则:
通告给该邻居结点到达该目的的距离为无穷大
无穷计数问题
层次路由
将任意规模网络抽象为一个图计算路由- 过于理想化
标识所有路由器
“扁平”网络
在实际网络(尤其是大规模网络)中, 不可行!
网络规模:考虑6亿目的结点的网络
路由表几乎无法存储!
路由计算过程的信息(e.g. 链路状态分组、DV)交换量巨大,会淹没链路!
管理自治:
每个网络的管理可能都期望自主控制其网内的路由
互联网(internet) = 网络之网络(network of networks)
聚合路由器为一个区域:自治系统AS(autonomous systems),同一AS内的路由器运行相同的路由协议(算法),自治系统内部路由协议(“intra-AS” routingprotocol)
不同自治系统内的路由器可以运行不同的AS内部路由协议
网关路由器(gatewayrouter): 位于AS“边缘”, 通过链路连接其他AS的网关路由器
互连的AS
自治系统间(Inter-AS)
RIP协议简介
AS 内部路由
RIP: 链路失效、恢复
如果180秒没有收到通告→邻居/链路失效
经过该邻居的路由不可用
重新计算路由
向邻居发送新的通告
邻居再依次向外发送通告(如果转发表改变)
链路失效信息能否快速传播到全网?
可能发生无穷计数问题
毒性逆转技术用于预防乒乓(ping-pong)环路(另外:无穷大距离 = 16 hops)
RIP 路由表的处理
RIP路由表是利用一个称作route-d (daemon)的应用层进程进行管理
应用进程实现
通告报文周期性地通过UDP数据报发送
OSPF协议简介
”开放”: 公众可用
采用链路状态路由算法
LS分组扩散(通告)
每个路由器构造完整的网络(AS)拓扑图
利用Dijkstra算法计算路由
OSPF通告中每个入口对应一个邻居
OSPF通告在整个AS范围泛洪
OSPF报文直接封装到IP数据报中
与OSPF极其相似的一个路由协议:IS-IS 路由协议
OSPF 优点(RIP 不具备)
安全(security): 所有OSPF报文可以被认证(预防恶意入侵)
允许使用多条相同费用的路径 (RIP只能选一条)
对于每条链路,可以针对不同的TOS设置多个不同的费用度量 (e.g., 卫星链路可以针对“尽力”(best effort) ToS设置“低”费用;针对实时ToS设置“高”费用)
集成单播路由与多播路由
多播OSPF协议(MOSPF) 与OSPF利用相同的网络拓扑数据
OSPF支持对大规模AS分层(hierarchical)
分层的OSPF
BGP 协议简介
Internet AS 间路由协议
边界网关协议BGP (Border GatewayProtocol): 事实上的标准域间路由协议
将Internet “粘合”为一个整体的关键
BGP为每个AS提供了一种手段:
eBGP: 从邻居AS获取子网可达性信息.
iBGP: 向所有AS内部路由器传播子网可达性信息.
基于可达性信息与策略,确定到达其他网络的 “好”路径
容许子网向Internet其余部分通告它的存在:“ 我在这儿!”
BGP会话(session):
两个BGP路由器 (“Peers”)
交换BGP报文:
通告去往不同目的前缀(prefix)的路径 (“路径向量(path vector)”协议)
报文交换基于半永久的TCP连接
BGP报文:
OPEN: 与peer建立TCP连接,并认证发送方
UPDATE: 通告新路径 (或撤销原路径)
KEEPALIVE: 在无UPDATE时,保活连接;也用于对OPEN请求的确认
NOTIFICATION: 报告先前报文的差错;也被用于关闭连接
BGP路由选择
网关路由器收到路由通告后,利用其输入策略(import policy)决策接受/拒绝该路由
e.g., 从不将流量路由到AS x
基于策略(policy-based) 路由
路由器可能获知到达某目的AS的多条路由,基于以下准则选择:
本地偏好(preference)值属性: 策略决策(policy
decision)
最短AS-PATH
最近NEXT-HOP路由器: 热土豆路由(hot potato
routing)
附加准则
为什么采用不同的AS 内与AS 间路由协议
策略(policy):
inter-AS: 期望能够管理控制流量如何被路由,谁路由经过其网络等.
intra-AS: 单一管理,无需策略决策
规模(scale):
层次路由节省路由表大小,减少路由更新流量
适应大规模互联网
性能(performance):
intra-AS: 侧重性能
inter-AS: 策略主导