IGMP V1 V2 V3 定义和区别

先来认识一下IGMP这个协议吧,它的全称是Internet Group Management Protocol,它和unicast和multicast的区别是它是发往一组计算机(属于它这个组播组的所有计算机),IGMP主要用于在线的视频和在线游戏,像IPTV就是一种比较广泛的应用.

现在IGMP有3个版本V1(RFC1112),V2(RFC2236),V3(RFC3376),

IGMP v1支持host membership query 和host membership report

report message是由IGMP host发给IGMP router来报告它加入的组播组.

query message是由IGMP router发给IGMP client来查询IGMP host所加入的组播组.

这样做之后,IGMP路由器就记录了它所在网段主机加入的所有组播地址.

下面看这个例子之后可能大家就比较清楚了,

在IGMP router的LAN端有2台PC,hostA,hostB,hostC,hostA加入了224.100.1.1,hostB加入了224.100.1.2,hostC没有加入任何的组播.

当IGMP router想要查询lan端的组播地址是,它以组播地址224.0.0.1 发到它的lan端,224.0.0.1代表子网中所有支持多播的设备的多播地址, 这个时候如果pc和IGMP router之间用hub或者layer2的交换机(没有enable IGMP snooping),那么包括hostC的3台主机都会收到,只不过hostC不会回应,hostA和hostB会发送报告信息给router,内容分别 为224.100.1.1和224.100.1.2.

如果hostA想要加入一个新的组播地址224.100.1.3,它会发个report信息给想要加入的组播地址,router收到后加入IGMP table.

IGMPv2,包括membership query,membership report, Leave Group message .

membership query 包括general query,group-specific query.

general query和IGMP V1一样,发224.0.0.1来查询在网络中有哪些组播组.

group-specific query,用来查询是否在网络中存在特定的组播组.

membership report,这个和V1一样,加入一个新的GROUP也一样.

Leave Group message是由这个组的最后一个成员发给224.0.0.2(网络中的所有组播路由器),内容为这个组播地址,IGMP router收到后,会发送一个group-specific query来查询是否网络中的这个组播地址已经不存在了,如果没有回应,就把这个组从IGMP table 中删除.

IGMP V3,

Membership Report

其中Membership Query分为三种:General Query,用于查询接口下所有多播成员信息;

Group-Specific Query,用于查询接口下指定组的成员信息;

Group-and-Source-Specific Query,该类型为IGMPv3中新增加的,用于查询接口下是否有成员需要接收指定源列表中的源所发出的特定组的多播流。

下面来谈谈IGMP V1,V2,V3的区别,

IGMPv1 :主机可以加入组播组。没有离开信息(leave messages)。路由器使用基于超时的机制去发现其成员不关注的组。

IGMPv2 :该协议包含了离开信息,允许迅速向路由协议报告组成员终止情况,这对高带宽组播组或易变型组播组成员而言是非常重要的。

IGMPv3 :与以上两种协议相比,该协议的主要改动为:允许主机指定它要接收通信流量的主机对象。来自网络中其它主机的流量是被隔离的。 IGMPv3 也支持主机阻止那些来自于非要求的主机发送的网络数据包。

IGMPv3同路由器的交互过IGMPv2程同相同。但是在IGMP V1/V2中,主机只根据组地址来决定加入某个组并从任何一个源接收发给该组地址的组播流。而使用IGMP V3的主机通告该主机所希望加入的 多播组,同时还通告该主机所希望接收的多播源的地 址。主机可以通过一个包括列表或一个排除列表来指明希望从哪些源能接收多播流。同时IGMP v3带来的另外一个好处是节省带宽,避免不需要的、非法的组播数据流占用网络带宽,这尤其在多个多播源共用一个多播地址的网络环境中表现明显。

下面这些是一些常见的IGMP multicast address ,

Range :

224.0.0.0~239.255.255.255

Well-known multicast group address:

224.0.0.1 - all systems on the subnet

224.0.0.2 - all routers on the subnet

224.0.0.5 - all OSPF routers on the subnet

224.0.0.9 - all RIP-2 routers on the subnet

224.0.0.12 - all DHCP/Relay Agent on the subnet

时间: 2024-10-17 06:13:36

IGMP V1 V2 V3 定义和区别的相关文章

从Inception v1,v2,v3,v4,RexNeXt到Xception再到MobileNets,ShuffleNet,MobileNetV2

from:https://blog.csdn.net/qq_14845119/article/details/73648100 Inception v1的网络,主要提出了Inceptionmodule结构(1*1,3*3,5*5的conv和3*3的pooling组合在一起),最大的亮点就是从NIN(Network in Network)中引入了1*1 conv,结构如下图所示,代表作GoogleNet 假设previous layer的大小为28*28*192,则, a的weights大小,1*

51nod Bash游戏(V1,V2,V3,V4(斐波那契博弈))

Bash游戏V1 有一堆石子共有N个.A B两个人轮流拿,A先拿.每次最少拿1颗,最多拿K颗,拿到最后1颗石子的人获胜.假设A B都非常聪明,拿石子的过程中不会出现失误.给出N和K,问最后谁能赢得比赛. 例如N = 3,K = 2.无论A如何拿,B都可以拿到最后1颗石子. Input 第1行:一个数T,表示后面用作输入测试的数的数量.(1 <= T <= 10000) 第2 - T + 1行:每行2个数N,K.中间用空格分隔.(1 <= N,K <= 10^9) Output 共T

51Nod 最大公约数之和V1,V2,V3;最小公倍数之和V1,V2,V3

1040 最大公约数之和 给出一个n,求1-n这n个数,同n的最大公约数的和.比如:n = 6 1,2,3,4,5,6 同6的最大公约数分别为1,2,3,2,1,6,加在一起 = 15 输入 1个数N(N <= 10^9) 输出 公约数之和 输入样例 6 输出样例 15 题解 \[ \sum_{i=1}^n\gcd(i,n)=\sum_{d|n}d\varphi(n) \] 暴力搞就行了. 1188 最大公约数之和 V2 给出一个数N,输出小于等于N的所有数,两两之间的最大公约数之和. 相当于计

Inception结构和Inception V1, V2, V3学习

Inception V1: https://medium.com/coinmonks/paper-review-of-googlenet-inception-v1-winner-of-ilsvlc-2014-image-classification-c2b3565a64e7 整体: https://zhuanlan.zhihu.com/p/32702031 http://baijiahao.baidu.com/s?id=1601882944953788623&wfr=spider&for=

C++ 变量的声明与定义的区别

变量声明和定义的区别 我们在程序设计中,时时刻刻都用到变量的定义和变量的声明,可有些时候我们对这个概念不是很清楚,知道它是怎么用,但却不知是怎么一会事,下面我就简单的把他们的区别介绍如下:(望我的指点对你受益) 变量的声明有两种情况: 1.一种是需要建立存储空间的.例如:int a 在声明的时候就已经建立了存储空间. 2.另一种是不需要建立存储空间的. 例如:extern int a 其中变量a是在别的文件中定义的. 前者是“定义性声明(defining declaration)”或者称为“定义

第2章 变量和基本类型 附2 --声明和定义的区别

变量声明和定义的区别 我们在程序设计中,时时刻刻都用到变量的定义和变量的声明,可有些时候我们对这个概念不是很清楚,知道它是怎么用,但却不知是怎么一会事,下面我就简单的把他们的区别介绍如下:(望我的指点对你受益) 变量的声明有两种情况: 1.一种是需要建立存储空间的.例如:int a 在声明的时候就已经建立了存储空间.----定义 2.另一种是不需要建立存储空间的. 例如:extern int a 其中变量a是在别的文件中定义的.-----声明 前者是“定义性声明(defining declara

(转)C++重写、重载和重定义的区别

C++ 重写重载重定义区别 (源自:http://blog.163.com/[email protected]/blog/static/111352259201102441934870/) 1 成员函数重载特征:   a 相同的范围(在同一个类中) b 函数名字相同 c 参数不同 d virtual关键字可有可无 2 重写(覆盖)是指派生类函数覆盖基类函数,特征是: a 不同的范围,分别位于基类和派生类中 b 函数的名字相同 c 参数相同 d 基类函数必须有virtual关键字 3 重定义(隐藏

函数的声明和定义的区别

函数声明和定义的区别(1) C语言编译系统是由上往下编译的.一般被调函数放在主调函数后面的话,前面就该有声明.不然C由上往下的编译系统将无法识别.正如变量必须先声明后使用一样,函数也必须在被调用之前先声明,否则无法调用!函数的声明可以与定义分离,要注意的是一个函数只能被定义一次,但可以声明多次. 函数声明由函数返回类型.函数名和形参列表组成.形参列表必须包括形参类型,但是不必对形参命名.这三个元素被称为函数原型,函数原型描述了函数的接口.定义函数的程序员提供函数原型,使用函数的程序员就只需要对函

C++中的内联函数和C中的宏定义的区别

在C++中内联函数: 内联函数即是在函数的声明和和定义前面加上“inline”关键字,内联函数和常规函数一样,都是按照值来传递参数的,如果参数为表达式,如4.5+7.5,则函数将传递表达式的值(这里为12),而宏定义则不同. 在C中的宏定义: C语言使用的预处理器语句#define来提供宏,例如:#define SQUARE(X)  X*X,这里宏并不是通过值传递来实现的,而是通过文本替换来实现的. 内联函数和宏定义的区别用下面的代码来观察: //内联函数 inline double squar