路由选择
路由选择
路由选择算法#
分类 | 算法 |
---|---|
全局式 | 全局式路由选择算法(global routing algorithm) |
分散式 | 分散式路由选择算法(decentralized routing algorithm) |
静态 | 静态路由算法(static routing algorithm) |
动态 | 动态路由算法(dynamic routing algorithm) |
负载敏感 | 负载敏感算法(load-sensitive algorithm) |
负载迟钝 | 负载迟钝算法(load-insensitive algoriyhm) |
链路状态路由选择算法(Link State, LS)#
- 属于全局式路由选择算法,在链路状态算法中,网络拓扑和所有的链路费用都是已知的;
- 实践中通过让每个结点向网络中的所有其他结点广播链路状态分组,其中每个链路状态分组包含它所连接的链路和费用(链路状态广播算法)
距离向量路由选择算法(Distance-Vector, DV)#
- 分布式:属于分散式路由选择算法,在距离向量路由选择算法中,每个节点都要从一个或多个直接相邻邻居接收某些信息,执行计算,然后将其计算结果分发给邻居;
- 迭代的:计算过程一直要持续到邻居之间无更多信息交换为止;
- 自我终止的:没有计算应该停止的信号,该算法就停止了;
- 异步的:算法不要求所有结点互相之间步伐一致地操作;
贪心:每个结点只需要考虑到达邻居的最短路径即可;
LS与DV路由选择算法的比较#
- 报文复杂性:LS算法要求每个结点都知道网络中的每条链路的费用;DV算法要求在每次迭代时,在两个直接相连邻居之间交换报文;
- 收敛速度:LS是一个$O(N^2)的算法;DV算法收敛较慢,且在收敛时会遇到路由选择环路,以及会遭遇无穷计数的问题;
- 健壮性:对应LS算法,一台路由器故障仅会导致一个结点异常;在DV算法下,一个结点故障可能会将异常值扩散到整个网络;
因特网中的路由选择#
- 自治系统(Autonomous System, AS):每个AS由一组通常处在相同管理控制下的路由器组成,在相同的AS中的路由器全部运行同样的路由选择算法;
- 自治系统内部路由选择协议(intra-autonomous system routing protocol):在一个自治系统内运行的路由选择算法;
- 网关路由器(gateway router):负责向在本AS之外的目的地转发分组的路由器,在一个AS内至少存在一个网关路由器;
- 自治系统间路由选择协议(inter-autonomous system routing protocol):用于从相邻AS获取可达性信息和向该AS中所有路由器传播可达性信息;
自治系统内部的路由选择#
AS内部路由选择协议(又称为内部网关协议)用于确定在一个AS内执行路由选择的方式
路由选择信息协议(Routing Information Protocol, RIP)#
RIP是一种距离向量协议,使用跳数作为费用测度,即每天链路的费用为$1$;
在RIP中,费用实际上是从源路由器到目的子网;
- 跳:沿着从源路由器到目的子网(包括目的子网)的最短路径所经过的子网数量;
一台路径的最大费用被限制为15,因此RIP的使用限制在网络直径不超过15跳的自治系统内;
RIP响应报文(RIP response message):也被称为RIP通告,用来承载邻居间的路由选择更新信息,大约30秒互相交换一次;
路由选择表(routing table):每台路由器维护一张RIP表,包括该路由器的距离向量和该路由器的转发表;
- 一台路由器一旦超过180秒没有从邻居听到报文,则该邻居不再被认为是可达的;
路由器在UDP上使用端口520互相发送RIP请求与响应报文
;
开放最短路优先(Open Shortest Path First, OSPF)#
OSPF的核心是一个使用洪泛链路状态信息的链路状态协议和一个dijkstra
最低费用路径算法;
在OSPF中,各条链路费用是由网络管理员配置的;
在使用OSPF时,路由器向自治系统内的所有其他路由器广播路由选择信息,而不仅仅是向其相邻路由器广播;
- OSPF报文:包含OSPF通告,该报文直接由IP承担,对OSPF其上层协议的值为89;
OSPF的优点:
- 安全,能够鉴别OSPF路由器之前的交换(如链路状态更新);
- 允许多条相同费用的路径;
- 对单播与多播路由选择的综合支持;
- 支持在单个路由选择城内的层次结构;
自治系统间路由选择协议#
边界网关协议(Broder Gateway Protocol, BGP)#
BGP使每个子网向因特网的其余部分通告它的存在,BGP确保在因特网中的所有AS知道该子网以及如何到达;
BGP为每个AS提供了以下进行工作的手段:
1)从相邻AS处获得子网可达性信息;
2)向本AS内部的所有路由器传播这些可达性信息;
3)基于可达性信息和AS策略,决定到达子网的“好”路由;
1、BPG基础
- 在BPG中,路由器对通过使用178端口的半永久TCP连接来交换路由选择信息;
- 对于每条TCP连接,位于连接端点的两台路由器称为BGP对等方(BGP peers),沿着该连接发送的所有BGP报文的TCP连接称为BGP会话(BGP session);
- eBGP:跨越两个AS的BGP会话称为外部BGP(eBGP)会话(external BGP session);
- iBGP:在同一个AS的两台路由器之间的BGP会话称为内部BGP(iBGP)会话(internal BGP session);
在BGP中,目的地不是主机而是CDIR化的前缀(prefix),每个前缀表示一个子网或一个子网的集合;
BGP会话分发前缀可达性信息流程:
- 两个相邻的AS之间通过网关路由器间的eBGP会话交换其可达性信息;
- 在任何AS中的网关路由器接收到eBGP学习到的前缀后,该网关路由器使用它的iBGP会话来向该AS中的其他路由器发布这些前缀;
- 当一台路由器(网关或不是网关)得知一个新前缀时,它为该前缀在其转发表中创建一个项;
- 经过前面3步,这三个AS中的所有路由器都能够知道其他两个AS的可达性信息;
2、路径属性和BGP路由
- 自治系统号(Autonomous System Number, ASN):在BGP中,一个自治系统由其全局唯一的ASN所标识,与IP地址一样,ASN由ICANN地区注册机构分配;
当一台路由器通过BGP会话通告一个前缀时,它在前缀中包括一些BGP属性,带有属性的前缀被称为一条路由(route);
- AS-PATH:该属性包含了前缀的通告已经通过的那些AS,当一个前缀传送到一个AS时,该AS将它的ASN增加到AS-PATH属性中;如果一台路由器看到它的AS被包括在该路径列表中,它将拒绝该通告;因此,路由器使用该AS-PATH属性来检测和防止循环通告;
- NEXT-HOP:用于指示到达目标网络的下一跳路由器的IP地址,标识一个开始某AS-PATH的路由器接口,路由器使用NEXT-HOP属性正确地配置它们的转发表;
当一台网关路由器接收到一台路由器通告时,它使用其输入策略(import policy)来决定算法接收或过滤该路由,是否设置某种属性;
3、BGP路由选择&选择策略
对于相同前缀的路由,BGP选取规则如下:
- 本地偏好值:由该路由器设置或在相同AS中的另外一台路由器学习;
- 最短AS-PATH路由;
- 最靠近(即费用最低)NEXT-HOP路由器的路由;
- BGP标识符;
桩网络(stub network):所有进入桩网络的流量必定是去往该网络,所有离开桩网络的流量必定源于该网络,也就是说,桩网络不会转发其他网络的流量,图中W和Y是桩网络,X是一个多宿主桩网络;
桩网络不会向邻居通告除了它自身之外的其他任何目的地的路径;
提供商网络直接是否能够互相转发流量具体由提供该网络的ISP之间相互协商的;
广播和多播路由选择#
广播路由选择(broadcast routing):网络层提供了从一种源结点到网络中的所有结点交付分组的服务;
多播路由选择(multicast routing):使单个源结点能够向其他网络结点的一个子集发送分组的副本;
广播路由选择算法#
受控洪泛#
序号控制洪泛(sequence-number-controlled flooding)
源节点将其地址(或其他唯一的标识符)以及广播序号放入广播分组,再向它的所有邻居发送该分组。
每个结点维护它已经收到的、复制的和转发的源地址和每个广播分组的序号列表;
当结点接收到一个广播分组时,它首先检查该分组是否在列表中:
- 在,丢弃该分组;
- 不在,复制该分组并向该结点的所有邻居(除了分组来源)转发;
反向路径转发(Reverse Path Forwarding, RPF)
当一台路由器接收到具有给定源地址的广播分组时,判断该分组到达的链路是否正好位于它自己的返回其源的最短单播路径上:
- 若在,路由器向其所有出链路(除了分组来源)传输报文;
- 不在,路由器丢弃入分组而不向任何它的出链路转发分组;
RPF示例图,粗线表示从结束方到源(A)的最低费用路径:
生成树广播#
- 最小生成树(minimun spanning tree):如果每段链路具有响应的费用并且一颗树的费用就是其链路费用之和,则在该图的所有生成树中费用最小的生成树被称为最小生成树;
首先对网络结点构造出一颗生成树,当一个源结点要发送一个广播分组时,它向所有属于该生成树的特定链路发送分组。接收广播分组的结点则向在生成树中的所有邻居转发该分组(除分组来源);
- 一个结点不必知道整颗树,只需要知道它在图中的那些邻居是生成树的邻居
一种生成树的算法是基于中心的方法(center-based approach)建立一颗生成树:
1、定义一个中心结点,也称为汇合点(rendezvous)或核(core);
2、结点向中心节点单播加入树(tree-join)报文;
3、加入树报文使用单播路由选择朝着中心点转发,直到它到达一个已经属于生成树的结点或到达该中心;
多播#
在多播通信中需要解决:
- 标识多播分组的接收方;
- 为发送到接收方的分组编址;
间接地址(address indirection):用一个标识来表示一组接收方,寻址到该组的分组副本被交付给所有与该组相关联的多播接收方,且该组使用这个单一标识符;
- 表示一组接收方的单一标识就是一个D类多播地址;
- 与一个D类地址相关联的接收方小组被称为多播组(multicast group);
因特网组管理协议(IGMP)#
- IGMP运行在一台主机与其直接相连的路由器之间;
- 主机通过IGMP通知与其相连的路由器:在主机运行的一个应用程序想加入一个特定的多播组;
- 网络层多播路由选择算法负责协调及因特网内的多播路由器,以便多播数据报能路由到其最终目的地;
与ICMP类似,IGMP报文也是承载在一个IP数据报中;
IGMP的三种报文类型:
- membership_query报文:由一台路由器向所有与主机相连的接口发送,用于确定该接口上主机已加入的所有多播组集合;
- membership_report报文:
- 主机接收到query报文时,用于响应;
- 一个应用程序首次加入一个多播组时,直接响应;
- membership_group报文:可选报文,当无主机响应一个具有给定组地址的query报文时,该路由器就推断出已没有主机在这个多播组了;
软状态(soft state):状态如果未被显式更新,则通过超时事件被删除;
多播路由选择算法#
确定多播路由选择树的两种方法:
- 使用一颗组共享树的多播路由选择;
- 使用一颗基于源的树的多播路由选择;
在因特网中的多播路由选择#
- 距离向量多播路由选择协议(Distance Vector Multicast Routing Protocol, DVMRP):DVMRP实现了具有反向路径转发与剪枝算法的基于源的树;
- 协议无关的多播(Protocol Independent Multicast, PIM)路由选择协议:
- 稠密模式(dense mode):使用一种洪泛与剪枝反向路径转发技术;
- 稀疏模式(sparse mode):使用聚集点来建立多播分发树;
作者:issenxiao
出处:https://www.cnblogs.com/issenxiao/articles/18273412
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】