IGMP——组播成员端网络协议

2024-05-28 23:12

本文主要是介绍IGMP——组播成员端网络协议,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

一.IGMP基本概念

(1)组播转发困境

(2)感知组播成员方式

(3)IGMP版本

二.IGMP各版本的区别与联系

(1)IGMPV1

1.普遍组查询报文

2.成员关系报告报文

3.IGMPV1报文格式

4.IGMPv1工作机制

5.IGMPV1查询器选举机制

6.IGMPV1离组机制

(2)IGMPv2

1.添加离组机制

2.添加查询器选举机制

(3)IGMPV3

1.添加特定源组查询报文

2.无专门Leave报文

三.IGMP特性

(1)IGMP Snooping——嗅探

(2)IGMP SSM Mapping

(3)IGMP代理


一.IGMP基本概念

用于组播成员端网络,感知组播组ID,组播成员位置。

(1)组播转发困境

组播工作原理是将组播信息发给一组特定组播成员,组播源发出组播数据时并不在意接收者的位置,所以需要IGMP感知组播成员的位置

(2)感知组播成员方式

静态——当然可以静态绑定,但这样不方便大型组网

动态——IGMP感知

接收者与最后一跳路由器建立维护组播成员关系。

(3)IGMP版本

有v1 v2 v3 三个版本

维护IGMP路由表项(组播组)和IGMP组表项(入接口)

组表项(*,G),用户向组播组发送IGMP加入报文,包括组ID,不知道出接口,*表示未知组播源

路由表项(S,G),用户加入组播组,包括组播组和出接口,S表示源IP地址

二.IGMP各版本的区别与联系

已知IGMP可发现组播成员,是组播网络的构成的一部分,那么IGMP如何实现发现成员网络,或者说如何获取出接口与组播组信息呐?

(1)IGMPV1

IGMPv1包含两个报文——普遍组查询报文,成员关系报告报文

1.普遍组查询报文

查询器(路由器)向共享网络中所有路由器和主机发送的查询报文,感知组播组成员

2.成员关系报告报文

成员向查询器(router)发,申请加入组,响应普通组查询报文

(查询器是发送组播查询报文的路由器,只有一台,如果最后一跳路由器有两个就选出一个作为查询器)

3.IGMPV1报文格式

version ——版本

type ——报文类型

0x11—普通组查询报文

0x12——成员关系报告报文

group address —— 加入组播组地址

4.IGMPv1工作机制

成员关系报告报文工作机制

(1)启动随机定时器(0-10S之间),PC1,PC2的定时器时间为随机数

        假设PC1为4S,PC2为6S

(2).PC1先倒计时结束,PC1先发送成员关系报告报文,是组播报文,

(3)PC2可以收到组播报文(PC1的成员关系报告报文),PC2倒计时结束时,发现PC1已经发         了,开启成员关抑抑制报文,不再发成员关系报告报文

5.IGMPV1查询器选举机制

无选举机制,依靠PIM选举

6.IGMPV1离组机制

不主动离组,静默离开

(2)IGMPv2

是在IGMPV1基础上建立的,普遍组查询报文和成员关系报告报文与IGMPV1相同

1.添加离组机制

IGMPV1静默离开,离组时间130S很长,IGMPV2进行改进

IGMPv2 是主动离开。

特定组查询报文与Leave报文一起完成成员主动离开

超过4S没收到成员关系报告报文就认为超时

2.添加查询器选举机制

(3)IGMPV3

IGMPV2都没有组播源的信息,属于ASM,

IGMPV3添加组播源信息,支持SSM网络

1.添加特定源组查询报文

成员关系报告报文有组播源信息

可能同组用户有不同源,取消成员抑制报文

2.无专门Leave报文

成员关系报告报文添加include (接收某些源)exclude(拒接某些源)

三.IGMP特性

(1)IGMP Snooping——嗅探

成员端网络希望最后一跳路由器按组发送组播数据,但最后一跳路由器与主机之间会有交换机,

交换机依靠泛洪传输数据,这就与广播处理的问题一样了

我们就利用IGMP Snooping——嗅探来解决这个问题

二层交换机侦听查询器与成员之间的IGMP报文,学习到组播组与出接口关系,在二层(数据链路层按需转发)

端口角色

路由器端口——二层组播朝向三层组播转发设备

成员端口——组播接口映射关系

关注成员离开,成员报告报文,普通查询报文

(2)IGMP SSM Mapping

用于不支持IGMPV3的情况

v1 v2无组播源信息,无法构建SSM网络

静态方式绑定组播组和组播源

(3)IGMP代理

有些情况下,成员离组或加组并不会改变组播路由表项或组播组表项,查询器却会收到报文,会处理大量组成员情况

就有了IGMP Proxy 代理接收成员关系报告报文,Leave,不影响组播表项的就不发给查询器

接口角色

主机接口——代理的接口,面向查询器,

路由器接口——面向组成员

这个要记清楚,与他名字的意思相反

这篇关于IGMP——组播成员端网络协议的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1011963

相关文章

VC网络协议

// PCControlDlg.cpp : 实现文件//#include "stdafx.h"#include "PCControl.h"#include "PCControlDlg.h"#include "afxdialogex.h"#ifdef _DEBUG#define new DEBUG_NEW#endif// 用于应用程序“关于”菜单项的 CAboutDlg 对话框#ifde

c++的初始化列表与const成员

初始化列表与const成员 const成员 使用const修饰的类、结构、联合的成员变量,在类对象创建完成前一定要初始化。 不能在构造函数中初始化const成员,因为执行构造函数时,类对象已经创建完成,只有类对象创建完成才能调用成员函数,构造函数虽然特殊但也是成员函数。 在定义const成员时进行初始化,该语法只有在C11语法标准下才支持。 初始化列表 在构造函数小括号后面,主要用于给

C++/《C++为什么要有静态成员函数》

摘要        本文说明了什么是静态成员变量,什么是静态成员函数的概念,讨论了访问私有静态成员变量的三个方法。得出用静态成员函数访问静态私有成员变量是最佳方法即回答了“C++为什么要有静态成员函数“的问题。 类的静态成员 我们可以使用 static 关键字来把类成员定义为静态的。当我们声明类的成员为静态时,这意味着无论创建多少个类的对象,静态成员都只有一个副本。静态成员在类的所有对象中是

C++ 在外部访问对象的protected成员的方法

起因 起因在于,今天在写UE4插件时,有一个对象的protected成员我想要访问。这个类没有提供接口来访问那个成员,并且这个类是定义在引擎代码中的而我不想“污染”引擎代码。 不过,我想到这么做或许可以在不改变原有类的定义下访问其中的protected成员: 定义一个原有类的子类,在其中定义可以访问protected成员的接口。想要访问对象的成员时,将原有类类型的指针转变为子类类型的指针,然

一种在C++中外部强行访问私有成员的方法

问题 C++在设计上,是不允许类的私有成员在外部被访问读写的。 然而,有时是想要在外部访问私有成员的。我目前常见的情况是:想要访问UE引擎代码中的类的私有成员,但又不想“污染”其源代码将其private改为public。 方法 一种方法是,再建立一个完全相同结构的类,只不过将成员改为public: class MyClassA_MirrorPublic{public:int dat

在C++中成员初始化的区别

在C++中,构造函数中的成员初始化列表(member initializer list)和构造函数体(constructor body)中进行的初始化存在显著的不同。这种不同主要体现在初始化时机、效率和语义上。 成员初始化列表(Member Initializer List) 在你的示例中,CMotorCtrl的构造函数使用了成员初始化列表来初始化成员变量。这是通过在构造函数定义中的冒号:后面

【大数据Java基础-JAVA 面向对象09】类成员(三)类的结构:构造器(一)简介;属性赋值顺序;JavaBean的概念

1.构造器(或构造方法):Constructor 构造器的作用: 1.创建对象 2.初始化对象的信息   2.使用说明: 1.如果没显式的定义类的构造器的话,则系统默认提供一个空参的构造器 2.定义构造器的格式:权限修饰符 类名(形参列表){} 3.一个类中定义的多个构造器,彼此构成重载 4.一旦我们显式的定义了类的构造器之后,系统就不再提供默认的空参构造器 5.一个类中,至少会有一个构

【大数据Java基础-JAVA 面向对象07】类成员(二)类结构 方法(四)递归方法

1.定义: 递归方法:一个方法体内调用它自身。 2.如何理解递归方法? > 方法递归包含了一种隐式的循环,它会重复执行某段代码,但这种重复执行无须循环控制。 > 递归一定要向已知方向递归,否则这种递归就变成了无穷递归,类似于死循环。 3.举例: // 例1:计算1-n之间所自然数的和 public int getSum(int n) {// 3if (n == 1) {return 1;}

【大数据Java基础-JAVA 面向对象06】类成员(二)类结构 方法(三) JAVA的值传递机制

java的值传递机制 1.针对于方法内变量的赋值举例: System.out.println("***********基本数据类型:****************"); int m = 10; int n = m; System.out.println("m = " + m + ", n = " + n); n = 20; System.out.println("m = " + m + ",

PHP 成员方法和类的调用

1、PHP成员方法详解: <span style="font-size:18px;"><?php//屏蔽notice 级错误error_reporting(E_ALL^E_NOTICE);/* 成员方法的讲解:函数和成员方法关系:当我们把一个函数写到 某个类中,则该函数称为成员方法;成员方法的基本语法:访问修饰符号 function 函数名(参数列表)\{函数体retu