路由协议与架构/组播路由
组播是将相同信息传输给多个最终用户的能力,无需强制单独寻址后者,因此无需为每个用户复制要传播的信息。
组播路由负责决定和传播在网络上通过多个互连组播路由器(mrouter)在局域网之间转发组播数据包所需的信息
- 确定特定局域网段是否存在接收者:如果不存在接收者,则没有必要将这些数据包转发到局域网→没有接收者的网络将从树中切断(修剪);
- 在整个 IP 网络上传播接收者的存在和位置:组播路由应跟踪各种接收者的位置,创建一个称为分发树的“生成树”,以便最大程度地减少成本并将数据包传递给每个人;
- 传输和转发数据:发送方使用特定组播目标地址生成数据包,组播路由器沿分发树将它们转发到接收者。
组播路由算法使用两种类型的分发树
- 源特定树(RPB、TRPB、RPM、链路状态):每个发送方都有一个树→路径是最优的,但更新更复杂;
- 共享树(CBT):每个组播组都有一个树,对所有发送方有效→更新更简单,但路径不是最优的。
- 组播路由算法
当路由器收到组播数据包时,它会将其发送到所有其他接口,前提是从其到达的接口位于路由器与源之间最短路径上。
- 问题
- 流量:它使网络的负载超出可接受范围
- 没有路由树:如果连接到局域网的两个路由器与源之间的最小距离相同,则在局域网上,同一个数据包的多个副本可以传递;
- 没有修剪:数据包始终分布在所有链路上,而不考虑可能没有监听器的事实;
- 对称网络:它考虑了从路由器到源的反向路径的成本,由于存在单向链路,该成本可能与从源到路由器的路径的成本不同。
建立了基于源(根节点)的分发生成树,数据包沿着该树的分支到达所有目标
- 父接口:从上层接收数据包的与源之间的最小距离的接口;
- 子接口:路由器的其他接口,数据包被发送到这些接口以到达子树(可能接收到的数据包总是被丢弃)。
在局域网上,同一个数据包的单个副本传递:在拥有局域网上子接口的路由器中,与源之间的距离最短的路由器被选为该链路的指定路由器(如果成本相等,则使用 IP 地址最低的接口)。
- 问题
- 流量:它使网络的负载超出可接受范围
- 没有修剪:数据包始终分布在所有链路上,而不考虑可能没有监听器的事实;
- 对称网络:它考虑了从路由器到源的反向路径的成本,由于存在单向链路,该成本可能与从源到路由器的路径的成本不同。
感兴趣的主机发送成员资格报告以订阅组播组→路由器将仅向感兴趣的主机发送组播数据包,并从树中删除没有收到成员资格报告的分支(修剪)。
不幸的是,分发树除了取决于源,还取决于组播组,导致报告带宽和路由器内存需求按组的总数乘以可能的源的总数的顺序→为了减少带宽和内存需求,仅删除没有监听器的叶局域网:叶局域网是没有其他路由器用于到达组播源的网络。
如何确定某个局域网是否是叶局域网?在带有中毒反向的分割视野中,通过发送公告的链路到达的目标被设置为距离等于无穷大:如果至少一个下游路由器以无穷大的距离传播与相关源相关的条目,则该路由器正在使用该链路作为到达源的最短路径→该链路不是叶,然后可能存在具有监听器的更下游叶局域网。
- 问题
无法执行整个子树的修剪,而只能删除叶局域网→无用的流量在树中的内部节点上传输。
可以执行整个子树的修剪
- 源发送的第一个数据包根据 TRPB 算法进行传播;
- 如果第一个数据包到达仅连接到没有该组监听器的叶局域网的路由器,则该路由器会向其父路由器发送非成员资格报告(NMR)消息;
- 如果父路由器从其所有子节点收到 NMR 消息,则它也会向其父节点生成 NMR 消息。
NMR 消息的有效性有限:当超时到期时,会再次采用 TRPB 算法。当在修剪的分支中添加了该组的监听器时,路由器会向其父节点发送成员资格报告消息,以在不等待超时的情况下快速启用树的分支。
- 问题
- 周期性广播风暴:它们是由于每次超时到期时 TRPB 算法引起的;
- 可扩展性:它至关重要,因为每个路由器都应为每个(源、组)对保留大量信息。
由于类似 LS 的(单播)路由协议构建了网络的完整地图,因此每个路由器都能够计算从每个源到每个潜在接收者的分发树。
“泛洪和修剪”不再需要,但每个路由器都能够自主地确定它是否在分发树上
- 在没有监听器的叶局域网上,主机会传达对该组的兴趣;
- 连接的路由器会泛洪地发送一个 LS 数据包,该数据包宣布存在具有监听器的局域网及其在网络中的位置;
- 网络中的其他节点会存储 LS 数据包,并依次将其泛洪传播到整个网络;
- 当第一个传输数据包到达路由器时,在转发数据包之前,需要计算最短路径树以确定数据包是否沿着分发树,如果是,则需要确定数据包应该在哪些链路上转发。
- 对于后续的数据包,不再需要进行此计算,因为信息将保存在缓存中。
- 问题
- 转发第一个数据包可能需要相当长的时间:每个路由器都需要为(源,组)对计算最短路径树。
- 内存资源:每个源都有指向每个目的地的不同树,这意味着路由表中存在每个活跃的(源,组)对的条目。
- CPU 资源:运行 Dijkstra 算法来计算路由树对于路由器来说是一个沉重的负担。
多播分发树对于整个多播组来说是唯一的,并且独立于源(共享树)。核心路由器是分发树中的主要路由器。
- 树的构建
- 主机通知其边缘路由器(叶子路由器)它希望加入多播组(作为接收者和发送者)。
- 边缘路由器向核心路由器发送加入请求消息。
- 接收加入请求消息的中间路由器将消息到达的接口标记为用于转发该组多播数据包的接口之一。
- 当核心路由器接收到加入请求消息时,它也会将该接口标记为转发接口,并停止信号。
如果消息到达一个已经属于树的路由器,则信号会在到达核心路由器之前停止,并且一条新分支将添加到之前的树中。
- 数据转发
- 组成员只需以多播方式发送数据包。
- 数据包首先沿着从源到核心路由器的分支转发,然后沿着从核心路由器到其他组成员的分支转发:每个接收数据包的路由器(包括核心路由器)都会将其发送到属于该多播组的所有接口上(除了数据包到达的接口),这些接口在树构建时定义。
- 优点
- 可扩展性:路由器中的状态信息很少。
- 缺点
- 使用“硬状态”:核心路由器是固定的,并且没有发送关于多播组状态的定期刷新消息,因此不适合高度可变的情况。
- 核心路由器是单点故障(尽管可以选择另一个路由器)。
- 核心路由器的位置会严重影响算法性能:核心路由器可能会成为瓶颈,因为所有流量都会通过它。
- 路径没有优化:分发树不是基于源的位置构建的,而是所有组成员都可以作为源。
域间路由需要层次化算法:传统算法的复杂性(以及需要维护的状态信息)无法扩展到整个互联网。
一般来说,路由策略会发挥作用,而“主机”会被“域”所取代。
- 非层次化路由:主机 X 想要接收组 A,B,C。
- 层次化路由:域 Y 想要接收组 A,B,C。