计算机网络:网络层 —— 多播路由选择协议

文章目录

      • 多播路由选择协议
        • 多播转发树
        • 构建多播转发树
          • 基于源树的多播路由选择
            • 建立广播转发树
            • 建立多播转发树
          • 组共享树的多播路由选择
            • 基于核心的生成树的建立过程
        • 因特网的多播路由选择协议

多播路由选择协议

仅使用 IGMP 并不能在因特网上进行IP多播。连接在局域网上的多播路由器还必须和因特网上的其他多播路由器协同工作,以便把 IP 多播数据报用最小的代价传送给所有的多播组成员,这就需要使用多播路由选择协议

多播转发树

多播路由选择协议的主要任务是:在多播路由器之间为每个多播组建立一个多播转发树

  • 多播转发树连接多播源和所有拥有该多播组成员的路由器。

  • IP多播数据报只要沿着多播转发树进行洪泛,就能被传送到所有拥有该多播组成员的多播路由器。

  • 之后,在多播路由器所直连的局域网内,多播路由器通过硬件多播,将IP多播数据报发送给该多播组的所有成员。

![[多播转发树.png]]

针对不同的多播组需要维护不同的多播转发树,而且必须动态地适应多播组成员的变化,但此时网络拓扑并不一定发生变化,因此多播路由选择协议要比单播路由选择协议(例如 RIP、OSPF等)复杂得多

  • 即使某个主机不是任何多播组的成员,它也可以向任何多播组发送多播数据报

  • 为了覆盖多播组的所有成员,多播转发树可能要经过一些没有多播组成员的路由器(例如上图中的 R2)

构建多播转发树

目前有以下两种方法来构建多播转发树:

  • 基于源树(Source·BaseTree)多播路由选择

  • 组共享树(Group-Shared Tree)多播路由选择

基于源树的多播路由选择

基于源树的多播路由选择的最典型算法是反向路径多播(Reverse Path Multicasting,RPM)算法。

RPM 算法包含以下两个步骤:

  1. 利用反向路径广播(Reverse Path Broadcasting,RPB)算法建立一个广播转发树

  2. 利用剪枝(Pruning)算法,剪除广播转发树中的下游非成员路由器,获得一个多播转发树

建立广播转发树

要建立广播转发树,可以使用洪泛(Flooding)法

路由器 R1 向其邻居路由器 R3 发送广播分组,R3 收到后,复制该广播分组,并向自己的所有下游邻居路由器转发,即向除 R1 外的所有邻居路由器转发。

在这里插入图片描述

若网络中存在环路,使用洪泛法会产生严重的问题,即广播分组的一个或多个副本将在环路中永久兜圈。最终将导致该网络中产生大量的广播分组,使得网络带宽被完全占用。

而利用反向路径广播RPB算法生成的广播转发树不会存在环路,因此可以避免广播分组在环路中兜圈。

RPB 中“反向路径”的意思是:在计算最短路径时把源点当作终点

RPB 算法的要点是:每一台路由器在收到一个广播分组时,先检查该广播分组是否是从源点经最短路径传送来的(即转发分组的路由器是否在自己到源点的最短路径上)

  • 若是,本路由器就从自己除刚才接收该广播分组的接口的所有其他接口转发该广播分组。

  • 否则,丢弃该广播分组。

  • 如果本路由器有好几个邻居路由器都处在到源点的最短路径上,也就是存在好几条同样长度的最短路径,那么只能选取一条最短路径。选取的规则是,这几条最短路径中的邻居路由器的IP地址最小的那条最短路径

![[RPB算法生成的广播转发树.png]]

![[RPB算法生成的广播转发树2.png]]
经过上述过程,最终可以得出转发广播分组的广播转发树,以后就按该广播转发树转发广播分组,这样就避免了广播分组兜圈子,同时每一个路由器也不会收到重复的广播分组
![[RPB算法生成的广播转发树3.png]]

建立多播转发树
  • RPB 里然很好地解决了转发环路的问题,但只是实现了广播,要实现真正的多播,还要将 R8 这样没有多播组成员(使用IGMP来探测)、并且也没有下游路由器的叶节点从广播转发树上剪除。就可实现多播转发树

  • 尽管 R2 没有多播组成员,但也要保留 R2 以确保多播转发树的连通性

假设需要剪除 R8,则 R8 向其上游路由器 R5 发送一个剪枝报文,将自己从多播转发树上剪除

![[剪枝报文.png]]

如果被剪枝的路由器,通过IGMP又发现了新的多播组成员,则会向上游路由器发送一个嫁接报文,并重新加入到多播转发树中

![[嫁接报文.png]]

组共享树的多播路由选择

组共享树多播路由选择采用基于核心的分布式生成树算法来建立共享树。该方法在每个多播组中指定一个核心(core)路由器,以该路由器为,建立一棵连接多播组的所有成员路由器的生成树,作为多播转发树。

每个多播组中除了核心路由器,其他所有成员路由器都会向自己多播组中的核心路由器单播加入报文。加入报文通过单播朝着核心路由器转发,直到它到达已经属于该多播生成树的某个节点或者直接到达该核心路由器

加入报文所经过的路径,就确定了一条从单播该报文的边缘节点到核心路由器之间的分支,而这个新分支就被嫁接到现有的多播转发树上。

基于核心的生成树的建立过程

假设源主机给该多播组发送了一个多播分组,当 R1 收到后将该多播分组封装到目的地址为核心路由器 R5 的单播分组中,将该单播分组发送给 R5。当核心路由器 R5 收到分组后,将被封装在单播分组中的多播分组解封出来,在多播转发树上洪泛转发

在这里插入图片描述

因特网的多播路由选择协议

目前还没有在整个因特网范围使用的多播路由选择协议。下面是一些建议使用的多播路由选择协议:

  • 距离向量多播路由选择协议(Distance Vector Multicast Routing Protocol, DVMRP) [RFC 1075]

  • 开放最短路径优先的多播扩展(Multicast Extensions to OSPF, MOSPF)[RFC 1585]

  • 协议无关多播-稀疏方式(ProtocolIndependentMulticast-Sparse Mode,PIM-SM)[RFC 2362]

  • 协议无关多播-密集方式(Protocol Independent Multicast-Dense Mode,PIM-DM)[RFC 3973]

  • 基于核心的转发树(Core BasedTree,CBT)[RFC 2189,RFC 2201]

尽管因特网工程任务组 IETF 努力推动着因特网上的全球多播主干网(Multicast Backbone On the Intemnet,MBONE)的建设,但至今在因特网上的 IP 多播还没有得到大规模的应用。

主要原因是:改变一个已成功运行且广泛部署的网络层协议是一件极其困难的事情。目前 IP 多播主要应用在一些局部的园区网络、专用网络或者虚拟专用网中。

P2P 技术的广泛应用推动了应用层多播技术的发展,许多视频流公司和内容分发公司通过构建自己的应用层多播覆盖网络来分发它们的内容。但上述多播路由选择协议的算法思想在应用层多播中依然适用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/658.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【力扣打卡系列】删除链表重复节点

坚持按题型打卡&刷&梳理力扣算法题系列,语言为go,Day14 删除链表中的节点 题目描述 解题思路 删除指定节点(只知道Node,不知道Node上一个节点的情况下)将该节点(node)的后一个节点的值…

【大模型LLM面试合集】大语言模型架构_tokenize分词

tokenize分词 0.总览 分词方法特点被提出的时间典型模型BPE采用合并规则,可以适应未知词2016年GPT-2、RoBERTaWordPiece采用逐步拆分的方法,可以适应未知词2016年BERTUnigram LM采用无序语言模型,训练速度快2018年XLMSentencePiece采用汉字、…

opencv - py_imgproc - py_grabcut GrabCut 算法提取前景

文章目录 使用 GrabCut 算法进行交互式前景提取目标理论演示 使用 GrabCut 算法进行交互式前景提取 目标 在本章中 我们将了解 GrabCut 算法如何提取图像中的前景我们将为此创建一个交互式应用程序。 理论 GrabCut 算法由英国剑桥微软研究院的 Carsten Rother、Vladimir K…

内存马浅析

之前在jianshu上写了很多博客,但是安全相关的最近很多都被锁了。所以准备陆陆续续转到csdn来。内存马前几年一直是个很热门的漏洞攻击手段,因为相对于落地的木马,无文件攻击的内存马隐蔽性、持久性更强,适用的漏洞场景也更多。 J…

串口接收,不定长数据接收

###1.CUBE-MX配置串口 2.我采用串口中断接收,打开中断接口 3.时钟同样8倍频,1分频,使用内部时钟 打开串口中断 main() { __HAL_UART_ENABLE_IT(&huart1, UART_IT_IDLE); // 启用空闲中断__HAL_UART_ENABLE_IT(&huart1, UART_IT_R…

CentOS 7 更换软件仓库

CentOS 7 于2024年6月30日停止维护,官方仓库已经没有软件了,想要继续使用 ,需要更换软件仓库,这里更换到阿里云的软件仓库 https://developer.aliyun.com/mirror/ 查看目前可用的软件数量 yum repolist 更换软件仓库&#xff1a…

Gorilla Mk1机器人:CubeMars电机加持,助力高空作业新突破

在澳大利亚输电网络的高空作业领域,一款由Crest Robotics研发的创新机器人正悄然改变着工作方式。这款名为Gorilla Mk1的机器人,凭借先进的技术和精密的动力系统,在高压输电线路的维护和检修作业中提供了前所未有的安全性和高效性。而这背后&…

DDRPHY数字IC后端设计实现系列专题之后端设计导入,IO Ring设计

本章详细分析和论述了 LPDDR3 物理层接口模块的布图和布局规划的设计和实 现过程,包括设计环境的建立,布图规划包括模块尺寸的确定,IO 单元、宏单元以及 特殊单元的摆放。由于布图规划中的电源规划环节较为重要, 影响芯片的布线资…

Pinia-状态管理

Pinia-状态管理 特点: 1. 轻量和模块化 Pinia 是一个轻量级的状态管理库,支持模块化管理,即可以将应用的状态分成多个 store 以实现更好的组织。使用 Pinia,可以定义多个 store,每个 store 都是一个独立的模块&#x…

WPF界面控件Essential Studio for WPF更新至2024 v3,具有更高性能 | 附下载

Essential Studio for WPF界面控件包含了利于分析且高性能的Windows应用程序开发中所需的所有控件,如 grids、charts、gauges、menus、calendars、editors等等。同时,我们的文件格式库还允许您导出资料到Excel、World和PDF文件中,以及对这些格…

相关衍生 pika+mongo

衍生相关 pikamongo 很多平台不提供完整的数据展示, 翻页只能翻几页,不过提供相关推荐等方法可获取更多的数据; 使用 rabbitmq 是因为数据量可能有几十上百万, 且能持久化 mongo对于数据并不实时的更新到查询里 def main():# mongodb# client MongoClient(localhost, 27017)cl…

软件测试--BUG篇

博主主页: 码农派大星. 数据结构专栏:Java数据结构 数据库专栏:MySQL数据库 JavaEE专栏:JavaEE 软件测试专栏:软件测试 关注博主带你了解更多知识 目录 1. 软件测试的⽣命周期 2. BUG 1. BUG 的概念 2. 描述bug的要素 3.bug级别 4.bug的⽣命周期 5 与开发产⽣争执怎…

【Linux】————进程间通信(匿名管道)

作者主页: 作者主页 本篇博客专栏:Linux 创作时间 :2024年6月20日 进程间通信的目的: 数据传输:一个进程需要将它的数据发送给另一个进程资源共享:多个进程之间共享资源通知事件:一个进程需…

Android [调试方法]如何在编译日志中快速找出报错信息

问题描述: 在进行Android完整编译时,经常遇到各种编译导致编译失败的情况,但其日志信息的打印数量十分巨大,无法仔细阅读逐行阅读。对于不熟悉的方法的同学定位报错问题的位置往往需要耗费较长时间。因此本作者将较为典型的方法总…

论文阅读:Computational Long Exposure Mobile Photography (一)

这篇文章是谷歌发表在 2023 ACM transaction on Graphic 上的一篇文章,介绍如何在手机摄影中实现长曝光的一些拍摄效果。 Abstract 长曝光摄影能拍出令人惊叹的影像,用运动模糊来呈现场景中的移动元素。它通常有两种模式,分别产生前景模糊或…

将 IBM WatsonX 数据与 Milvus 结合使用,构建用于知识检索的智能 Slack 机器人

在当今快节奏的工作环境中,快速轻松地访问信息对于保持生产力和效率至关重要。无论是在 Runbook 中查找特定说明,还是访问关键知识转移 (KT) 文档,快速检索相关信息的能力都可以产生重大影响。 本教程将指导您构建一个…

法律智能助手:开源NLP系统助力法律文件高效审查与检索

一、系统概述 思通数科AI平台是一款融合了自然语言处理和多标签分类技术的开源智能文档分类工具,特别适用于法律行业。平台采用深度学习的BERT模型来进行特征提取与关系抽取,实现了精准的文档分类和检索。用户可以在线训练和标注数据,使系统…

在linux系统中安装pygtftk软件

1.下载和安装 网址&#xff1a; https://dputhier.github.io/pygtftk/index.html ## 手动安装 git clone http://gitgithub.com:dputhier/pygtftk.git pygtftk cd pygtftk # Check your Python version (>3.8,<3.9) pip install -r requirements.txt python setup.py in…

Kubernetes:(三)Kubeadm搭建K8s 1.20集群

文章目录 一、Kubeadm安装流程二、实验1.环境准备2.所有节点安装kubeadm&#xff0c;kubelet和kubectl&#xff08;除了Harbor节点&#xff09;3.部署 Dashboard4.安装Harbor私有仓库 一、Kubeadm安装流程 集群名称IP地址安装软件master&#xff08;2C/4G&#xff0c;cpu核心数…

前端之html(二)加入css开篇(一)

1.lebal标签-增大点击范围 性别:<input type"radio" name"gender" id"man"><lebal for"man">男</lebal> <lebal><input type"radio" name"gender" id"nv">女</leba…