当前位置: 首页 > news >正文

华为数通HCIP-IP组播基础

点到点业务:比如FTP,WEB业务,此类业务主要特点是不同的用户有不同的需求,比如用户A需要下载资料A,用户B需要下载资料B。此类业务一般由单播承载,服务器对于不同用户发送不同的点到点数据流。
 

ospf、isis、BGP--ping通,单播路由--单播路由表;

mpls--单播标签互通

点到多点业务流量下发

 

1、通过广播

        一对所有发送;

        缺陷:导致流量的有偿性、安全性得不到保障;

2、通过单播

        一对一发送;

        缺陷:服务器需要重复下发多份一样的业务流量,浪费链路资源以及中间设备的转发资源;

        服务器需要获取所有客户的ip信息,不现实

使用组播承载点到多点业务

组播方式下,单一的信息流沿组播分发树被同时发送给一组用户,相同的组播数据流在每一条链路上最多仅有一份。相比单播和广播,使用组播的好处如下:
相比单播,用户的增加不会导致信息源负载的加重,不会导致网络资源消耗的显著增加。
相比广播,不会造成网络资源的浪费,并能提高信息传输的安全性,而且组播可以实现跨网段的传输。

 

        一对多发送;

        原理:为点到多点业务流量的用户,分配一个组播地址,作为组播组(group),其余非用户无法加入该组播组,组播源发送的流量,会以对应的组播组作为dip,只有加入了该组别的用户可以接收;

        特点:无重复流量、流量的有偿性以及安全性均能得到保障;

 组播数据报文结构

组播数据报文的结构与单播报文类似,但组播数据报文的目的MAC地址与目的IP地址与单播报文有很大差异。
组播目的IP地址:目的IP地址为组播IP地址,地址范围从224.0.0.0到239.255.255.255
组播目的MAC地址:目的MAC地址为组播MAC地址,组播MAC地址由组播IP地址映射而来

组播地址

D类(224.0.0.0~239.255.255.255)

其中224.0.0.0~224.0.0.255为永久组播地址,分配给固定协议使用,无法分配给组播客户端使用;

224.0.0.1:网段内所有设备;

224.0.0.2:网段内的所有路由器;

224.0.0.5:所有ospf路由器;

224.0.0.6:DR/BDR;

224.0.0.12:DHCP服务器;

224.0.0.13:pim路由器;

224.0.0.18:VRRP路由器;

224.0.0.22:IGMPv3路由器;

其余的均为临时组播地址,用于承载点到多点业务流量,分配给组播客户端使用;

232.0.0.1~232.255.255.255:用于SSM模型;

其余均用于ASM模型;

组播mac地址

自动生成;

大小格式:48bit、十六进制;

作用:用于封装组播组播流量的数据链路层头部中的dmac;

生成规则:前面24bit固定为01-00-5E,第25bit固定为0,最后23bit从组播ip地址的后23bit映射下来;

EG: 238.1.1.1——01-00-5E-01-01-01
            232.0.2.1——01-00-5E-00-02-01
            239.1.2.3——01-00-5E-01-02-03
            239.1.1.1——01-00-5E-01-01-01

缺陷:如果组播ip地址的后23bit一致,那么映射出来的mac地址也一致;(丢失的5bit)
             可能会导致组播接收者在收到组播流量时,看到数据链路层头部中的dmac,会误认为该组播流量是给自己的,进行拆包,拆包后,发现dip不是自身加入的组播组,再丢弃该流量,增加了设备开销;(无法通过数据链路层头部判断流量是否是给自己的)

解决:1、规划时注意点;
              2、在路由器与组播接收者之间的交换机上开启IGMP SNOOPING,实现按需转发;(交换机收到业务组播流量,默认泛洪)

组播网络基本架构

组播网络大体可以分为三个部分:
源端网络:将组播源产生的组播数据发送至组播网络。
组播转发网络:形成无环的组播转发路径,该转发路径也被称为组播分发树(Multicast Distribution Tree)。
成员端网络:让组播网络感知组播组成员位置与加入的组播组。

常见概念

 1、组播源(组播发送者):负责发送组播流量,指定组播流量的dip;(服务器)
  2、组播接收者(终端):负责接收组播流量,根据自身加入的组播组别进行组播流量接收;(只有收到dip为自身加入的组播组别的流量才能收)
   3、中间设备(路由器、交换机):负责根据组播流量的dip查找组播路由表进行转发;

组播组(Multicast Group):用IP组播地址进行标识的一个集合。任何用户主机(或其他接收设备),加入一个组播组,就成为了该组成员,可以识别并接收发往该组播组的组播数据。
组播路由器(Multicast Router):支持组播、运行组播协议的网络设备,实际上不仅仅路由器能够支持 组播,交换机、防火墙等设备也能够支持组播(取决于设备型号),路由器仅是一个代表。
第一跳路由器(First-Hop Router):组播转发路径上,与组播源相连且负责转发该组播源发出的组播数据的PIM路由器。
最后一跳路由器(Last-Hop Router):组播转发路径上,与组播组成员相连且负责向该组成员转发组播数据的PIM路由器。
IGMP(Internet Group Management Protocol,因特网组管理协议),是TCP/IP协议族中负责IP组播成员管理的协议,它用来在接收者和与其直接相邻的组播路由器之间建立、维护组播组成员关系。
 

组播模型

组播组成员在接收组播数据时可以对于组播数据源进行选择,因此产生了ASM(Any-Source Multicast,任意源组播)和SSM(Source-Specific Multicast,指定源组播)两种组播服务模型。
ASM:组成员加入组播组以后,组成员可以接收到任意源发送到该组的数据。
SSM:组成员加入组播组以后,组成员只会收到指定源发送到该组的数据。

  1、ASM(任意源模型)
        组播接收端,无法指定接收来自哪些组播源的组播流量,只要组播流量的dip满足自身加入的组播组,则可以接收;


  2、SSM(特定源模型)
        组播接收端,可以指定接收来自哪些组播源的组播流量,收到的组播流量sip、dip都必须满足自身的指定要求,才会接收;

 

组播数据转发的困局

组播数据转发需要依赖路由表项。但是基于目的网络的路由表在转发组播数据时存在一定问题:

 

 组播路由与RPF检查

由于组播转发容易产生环路,次优,重复报文,所以组播路由表项除了目的网络和出接口外还需要添加组播源和入接口的信息。设备仅转发从特定唯一的入接口收到的组播数据,从而避免组播转发时产生环路,次优,重复报文(部分解决)等问题。
对于相同的组播源,设备通过RPF(Reverse Path Forwarding,反向路径转发)检查可以确定设备上唯一的组播流量入接口。
组播路由表项以及与RPF检查的关系如下:

 

 RPF检查工作原理

RPF检查过程如下:

 

 组播路由器根据报文的源地址通过路由表(单播路由表、MBGP路由表或组播静态路由表)查找到达“报文源”的路由,查看到“报文源”的路由表项的出接口是否与收到组播报文的入接口一致。如果一致,则认为该组播报文从正确的接口到达,从而保证了整个转发路径的正确性和唯一性。这个过程就被称为RPF检查。

RPF路由选举规则

RPF路由可以从单播路由、MBGP路由、组播静态路由中选举产生。当路由器收到一份组播报文后,如果这三种路由表都存在,具体检查过程如下:

 

 根据以下原则从这三条最优路由中选择一条作为RPF路由:
如果配置了按照最长匹配选择路由,则从这三条路由中选出最长匹配的那条路由;
如果这三条路由的掩码一样,则选择优先级最高的那条路由;
如果它们的优先级也相同,则按照组播静态路由、MBGP路由、单播路由的顺序进行选择。
MBGP:
MBGP(Multicast BGP,组播BGP)主要用于传递组播源相关的路由条目。
组播静态路由表:
手工配置组播源与出接口的对应关系。

组播分发树

组播数据转发需要保证转发路径无环,无次优路径且无重复包。
通过RPF机制与组播路由协议,组播网络可以最终形成无环、无次优且无重复包的组播转发路径,该路径可以被称为组播分发树。
组播分发树以组播源为根,以组成员为叶子形成转发路径,组播数据在转发时都基于组播分发树进行转发。

 组播数据转发流程

组播数据转发基本流程如下:

 组播路由表项出接口与组播转发路径由组播路由协议决定。
组播路由协议主要有:PIM,MBGP,MSDP。

组播协议

组播网络需要基于多种组播协议才能建立转发路径:
工作在成员端网络的主要是IGMP(Internet Group Management Protocol,因特网组管理协议)协议,用于告知组播网络,组成员的位置与所加组播组。
工作在组播转发网络的协议主要有PIM,MSDP,MBGP。
PIM(Protocol Independent Multicast,协议无关组播)协议主要作用是生成AS域内的组播分发树。
MSDP(Multicast Source Discovery Protocol,组播源发现协议)主要作用是帮助生成AS域间的组播分发树。
MBGP(Multicast BGP,组播BGP)主要作用是帮助跨域组播流进行RPF校验。

 

相关文章:

华为数通HCIP-IP组播基础

点到点业务:比如FTP,WEB业务,此类业务主要特点是不同的用户有不同的需求,比如用户A需要下载资料A,用户B需要下载资料B。此类业务一般由单播承载,服务器对于不同用户发送不同的点到点数据流。 ospf、isis…...

STM32 SPI学习

SPI 串行外设设备接口(Serial Peripheral Interface),是一种高速的,全双工,同步的通信总线。 SCK时钟信号由主机发出。 SPI接口主要应用在存储芯片。 SPI相关引脚:MOSI(输出数据线&#xff…...

分布式缓存与数据库的一致性记录

用户更新数据库,需要再去更新redis缓存,否则会造成缓存与数据库数据不一致 一致性的两种方法 1). 双写模式 更新完数据库之后,更新redis缓存数据 问题: 因为请求时间的问题,造成缓存数据不是最新的 数据。 原因:A先修…...

vue3的语法

main.js中写发生变化,并不兼容vue2的写法 //vue3 import { createApp } from vue import ./style.css import App from ./App.vuecreateApp(App).mount(#app)//vue2 import Vue from vue import ./style.css import App from ./App.vueconst vm new Vue({render:h…...

【git合并分支自定义提交消息】

开发分支 dev主分支 master 需求 dev分支开发完后合并到master分支自定义提交信息 通过 git merge dev --squash --no-commit此命令会拉取dev分支代码到当前分支,并不会自动提交,可以自己修改提交信息...

AttributeError: module ‘PyQt5.QtGui‘ has no attribute ‘QMainWindow‘

场景描述: 这个问题是使用PyUIC将ui文件变成py文件后遇到的 解决办法: 改动1:把object改成QtWidgets.QMainWindow 改动2:增加__init__函数,函数结构如下: def __init__(self):super(Ui_MainWindow,self).…...

基于Java+SpringBoot+Vue前后端分离电商项目

晚间lucky为友友们送福利啦~🎁 Tips:有需要毕业设计指导的童鞋一定要认真看哦,文末有彩蛋。 一.项目介绍 该电商项目是一个简单、入门级的电商项目,是基于JavaSpringBootVue前后端分离项目。前端采用两套独立的系统分别完成项目…...

Rpc服务消费者(Rpc服务调用者)实现思路

Rpc服务消费者(Rpc服务调用者)实现思路 前面几节说到Rpc消费者主要通过UserServiceRPc_Stub这个protobuf帮我们生成的类来实现,上代码回顾一下 class UserServiceRpc_Stub : public UserServiceRpc {public:UserServiceRpc_Stub(::PROTOBUF…...

FANUC机器人实现2个RO输出信号互锁关联(互补)的具体方法

FANUC机器人实现2个RO输出信号互锁关联(互补)的具体方法 一般情况下,为了方便用户控制工装夹具上的电磁阀等控制工具,FANUC机器人出厂时给我们提供了8个RO输出信号,如下图所示,这8个RO信号可以各自单独使用。 那么,如果为了安全控制,需要将2个RO信号成对的进行安全互锁…...

权威认可|云畅科技再次入选中国信通院「高质量数字化转型产品及服务全景图」

7月27日,由中国信通院主办的2023数字生态发展大会暨中国信通院“铸基计划”年中会议在北京成功召开。 会上,中国信通院重磅发布了「高质量数字化转型产品及服务全景图(2023)」,云畅科技凭借其自研产品「万应低代码」在…...

爬虫小白-如何调试列表页链接与详情链接不一样并三种方式js逆向解决AES-ECB

目录 一、网站分析二、定位监听三、熟悉AES-ECB四、调试分析五、node运行js六、Python执行js 一、网站分析 三年前的案例,我的原始文章网站 ,如图我们直接点击标题进入到详情页,链接会发生跳转,且与我们在详情看到的链接&#xf…...

Ubuntu 离线部署的常见操作

Ubuntu 离线安装的常见操作 **说明:**很多情况下,生产环境都是离线环境,然而开发环境都是互联网的环境,因此部署的过程中需要构建离线安装包; 1. 下载但是不安装 # 例如使用 apt 下载 wireshark 安装包 sudo apt download wireshark # 下载…...

什么是多运行时架构?

服务化演进中的问题 自从数年前微服务的概念被提出,到现在基本成了技术架构的标配。微服务的场景下衍生出了对分布式能力的大量需求:各服务之间需要相互协作和通信,以及共享状态等等,因此就有了各种中间件来为业务服务提供这种分…...

【MySQL】mysql | linux | 离线安装mysqldump

一、说明 1、项目要求离线安装mysqldump 2、数据库服务已经使用docker进行安装,但是其他项目依赖mysqldump,所以需要在宿主机上安装mysqldum 二、解决方案 1、下载依赖 https://downloads.mysql.com/archives/community/ 2、下载内容 mysql-community-c…...

中国农村程序员学习此【JavaScript教程】购买大平层,开上帕拉梅拉,迎娶白富美出任CEO走上人生巅峰

注:最后有面试挑战,看看自己掌握了吗 文章目录 在 Switch 语句添加多个相同选项从函数返回布尔值--聪明方法undefined创建 JavaScript 对象通过点号表示法访问对象属性使用方括号表示法访问对象属性通过变量访问对象属性给 JavaScript 对象添加新属性删除…...

【Python】Web学习笔记_flask(2)——getpost

flask提供的request请求对象可以实现获取url或表单中的字段值 GET请求 从URL中获取name、age两个参数 from flask import Flask,url_for,redirect,requestappFlask(__name__)app.route(/) def index():namerequest.args.get(name)agerequest.args.get(age)messagef姓名:{nam…...

RabbitMQ 教程 | 第5章 RabbitMQ 管理

👨🏻‍💻 热爱摄影的程序员 👨🏻‍🎨 喜欢编码的设计师 🧕🏻 擅长设计的剪辑师 🧑🏻‍🏫 一位高冷无情的编码爱好者 大家好,我是 DevO…...

LLM微调 | Adapter: Parameter-Efficient Transfer Learning for NLP

目的:大模型预训练+微调范式,微调成本高。adapter只只微调新增的小部分参数【但adapter增加了模型层数,引入了额外的推理延迟。】 Adapters最初来源于CV领域的《Learning multiple visual domains with residual adapters》一文,其核心思想是在神经网络模块基础上添加一些残…...

在idea中添加try/catch的快捷键

在idea中添加try/catch的快捷键 在idea中添加try/catch的快捷键 ctrlaltt 选中想被try/catch包围的语句,同时按下ctrlaltt, 出现下图 选择try/catch即可。...

企业级开发中协同开发与持续集成持续部署

文章目录 1 创建代码仓库2 使用git协同开发2.1 独立团队开发2.2 多团队开发git工作流 2 持续集成和持续部署2.1 创建docker镜像2.2 使用coding构建 1 创建代码仓库 每个项目有唯一的代码仓库,所以不是每个开发者都需要创建一个代码仓库,一般都是项目负责…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)

服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)

笔记整理:刘治强,浙江大学硕士生,研究方向为知识图谱表示学习,大语言模型 论文链接:http://arxiv.org/abs/2407.16127 发表会议:ISWC 2024 1. 动机 传统的知识图谱补全(KGC)模型通过…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)

宇树机器人多姿态起立控制强化学习框架论文解析 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一) 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...

C++中string流知识详解和示例

一、概览与类体系 C 提供三种基于内存字符串的流&#xff0c;定义在 <sstream> 中&#xff1a; std::istringstream&#xff1a;输入流&#xff0c;从已有字符串中读取并解析。std::ostringstream&#xff1a;输出流&#xff0c;向内部缓冲区写入内容&#xff0c;最终取…...

【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分

一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计&#xff0c;提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合&#xff1a;各模块职责清晰&#xff0c;便于独立开发…...

rnn判断string中第一次出现a的下标

# coding:utf8 import torch import torch.nn as nn import numpy as np import random import json""" 基于pytorch的网络编写 实现一个RNN网络完成多分类任务 判断字符 a 第一次出现在字符串中的位置 """class TorchModel(nn.Module):def __in…...

stm32wle5 lpuart DMA数据不接收

配置波特率9600时&#xff0c;需要使用外部低速晶振...

JDK 17 序列化是怎么回事

如何序列化&#xff1f;其实很简单&#xff0c;就是根据每个类型&#xff0c;用工厂类调用。逐个完成。 没什么漂亮的代码&#xff0c;只有有效、稳定的代码。 代码中调用toJson toJson 代码 mapper.writeValueAsString ObjectMapper DefaultSerializerProvider 一堆实…...

leetcode73-矩阵置零

leetcode 73 思路 记录 0 元素的位置&#xff1a;遍历整个矩阵&#xff0c;找出所有值为 0 的元素&#xff0c;并将它们的坐标记录在数组zeroPosition中置零操作&#xff1a;遍历记录的所有 0 元素位置&#xff0c;将每个位置对应的行和列的所有元素置为 0 具体步骤 初始化…...

raid存储技术

1. 存储技术概念 数据存储架构是对数据存储方式、存储设备及相关组件的组织和规划&#xff0c;涵盖存储系统的布局、数据存储策略等&#xff0c;它明确数据如何存储、管理与访问&#xff0c;为数据的安全、高效使用提供支撑。 由计算机中一组存储设备、控制部件和管理信息调度的…...