IGMP的学习笔记
作者:互联网
写在开头:
1.为了不被打脸,赶在下班前东拼西凑点以前的笔记,时间太赶凑合看
2.现在已经不做开发,做了网络方面的测试人员,主要分享点网络方面的学习
3.以下分享内容借鉴了很多其他人的分享内容加上自己的一些理解,整理出的学习笔记而已
组播(IGMP)
一、为什么会有组播
一对多的通信场景(看直播)
1.单播
对于同一份数据存在多个接收者,server会发送与接收者相同数量的数据包
造成带宽的浪费
2.广播
在同一个广播域内的所有设备都会接收到这个数据包,同样会造成网络带宽浪费
3. 组播
只有加入到特定组播组的成员,才会收到组播数据.当存在多个组播成员时,源只需要发送一份数据.在一条链路上仅有一份数据,节约了网络带宽
一、igmp的作用
组播通信中组播源只是将数据发送到指定的组播地址中,发送者不关注接收者是否收到数据。要使组播报文最终能到到达接收者,因此需要组播路由器知道该网段中存在哪些接收者,同时保证接收者能进入对应的组播组中,Igmp就是用于主机和最后一跳组播路由器之间建立和维护组播成员关系的协议
二、IGMP v1 v2 v3的工作机制
1. IGMPv1的工作机制(asm模型) rfc1112
版本:1
类型:0×11和0×12 分别代表普遍组查询和report报文
组地址:普遍组查询报文组地址为0.0.0.0,report报文为要加入组的地址
普遍组查询报文(Membership Query):type:0×11
(1).组播路由器周期性发送普遍组查询报文,报文的目的地址为224.0.0.1(固定),报文中的组地址为0.0.0.0
(2).如果组播路由器超时时间内130S(2*60+10)没有收到一个Membership Report消息,路由器会认为这个子网段里没有成员,不会再向这个子网发送组数据。普遍组查询报文默认60秒发一次
加入报文(Membership Report):type 0×12
(1).当收到组播路由器发的普遍组查询报文,如果想加入组播组的就会在最大响应时间内回复 Membership Report报文。报文的目的地址和组地址都为想加入组播组的ip地址
(2).当主机刚加入网络中可以立马发送Report报文,不需要等待普遍组查询报加快主机接收组播流量的时间
响应抑制机制
(1).在普通组查询报文中有一个“最大响应时间”(默认10秒)
(2).如下图clinetA和clinetC收到普通组查询报文,会根据最大响应时间自动随机生成一个定时器
(3).比如clinetA生成的是5秒和clinetC生成的是7秒。那等clinetA 5秒倒计时结束后clineA就会发送Membership Report报文。这个Report报文路由器和clinetC会收到,这时候clinetC就不会再发送Membership Report报文
(4).clinetB在同网段也可以收到clinetA的Report报文但是检测到clinetA想要加入的组不是相同的组,所以clinetB会发送Report报文??
2. IGMPv2工作机制 rfc2236
类型:0x11:表示查询报文,IGMPv2的查询报文包括普遍组查询报文和特定组查询报文两类;0x12:表示IGMPv1成员报告报文;0x16:表示IGMPv2成员报告报文
0x17:表示成员离开报文
最大响应时间:只在查询报文中生效,普遍组查询最大值为10秒,特定组查询报文最大响应时间1秒
组地址:普遍组查询报文组地址为0.0.0.0,其他三类report报文、离开报文、特定组查询报文组地址为加入的组播地址
1.增加离开报文 (Leave Report):type 0×17
(1). IGMPv1的主机的离开属于“默默离开”,主机会直接离开,路由器等待130秒超时后才会删除的记录
(2).IGMPv2当成员想离开组播组的时,需要在网络中洪泛igmp组播离开报文。该报文的目的地址为224.0.0.2(固定)
2.增加特定组查询报文 (Membership Query):type:0×11
(1).当igmp查询器收到某一个组播组成员发送的igmp离开报文,查询器就会发送特定组查询报文用于确认该组是否还有成员。目的地址为该发出离开报文成员所在组的组播地址
(2).查询器会连续发送2次特定组查询报文(每次间隔1秒),如果两次都没有成员回复Membership Report报文,则路由器会认为该组内没有成员,会删除相关的组播表象
(3).如图clinetA和clinetB在相同组播组内,当clinetB发送离开报文后,路由会发送clinetB所在组播组的特定组查询包,clinetA和clinetB收到后。clinetA会立刻回复Membership Report报文,clinetB不会回复。因为路由器收到了Membership Report报文所以不会在路由器内删除clinetA和clinetB对应的组播表项。如果clinetA也不回复就会删除组播表项
3. 增加查询器的选举
1. IGMPv1的查询器是通过其他组播路由协议(pim)进行选举
2. IGMPv2,如果在一个网段中存在多台组播路由器。如图RA和RB都会发送普遍组 查询报文,RA和RB会把收到查询报文中的源ip和自己的ip地址做对比。Ip地址 小的选举为查询器
3. RB为非查询器会监听RA是否周期性的发送普遍组查询报文,如果超时时间(125s)都未收到,那么R2就会又开始发送普通组查询器报报文,开始新一轮的查询器选举
3. IGMPv3的工作机制(ssm模型) rfc3376
IGMPv3查询报文格式:
Type:0×11
Group Address:组播组地址。在普遍组查询报文中,该字段设为0.0.0.0;在特定组查询报文和特定源组查询报文中,该字段为要查询的组播组地址。
Max Response Code:最大响应时间。
Number of Sources:报文中包含的组播源的数量。对于普遍组查询报文和特定组查询文,该字段为0;对于特定源组查询报文,该字段非0。此参数的大小受到所在网络MTU大小的限制(这个值越大后面带的源地址越大,可能超过mtu值)
Source Address:组播源地址,其数量受到Number of Sources字段值大小的限制。
IGMPv3加入报文格式:
Type:0x22
Number of Group Records:报文中包含的组记录的数量
Group Record:组记录
Grounp Record字段格式如下:
Record Type:(6种)
MODE_IS_INCLUDE:接收源地址列表包含的源发往该组的组播数据。如果指定源地址列表为空,该消息为无效消息。
MODE_IS_EXCLUDE:不接收源地址列表包含的源发往该组的组播数据。
CHANGE_TO_INCLUDE_MODE:过滤模式由EXCLUDE转换到INCLUDE,接收源地址列表包含的新组播源发往该组播组的数据。如果指定源地址列表为空,主机离开组播组。
CHANGE_TO_EXCLUDE_MODE:过滤模式由INCLUDE转换到EXCLUDE,拒绝源地址列表中新组播源发往该组的组播数据。
ALLOW_NEW_SOURCES:表示在现有的基础上,需要接收源地址列表包含的源发往该组播组的组播数据。如果当前对应关系为INCLUDE,则向现有源列表中添加这些组播源;如果当前对应关系为EXCLUDE,则从现有阻塞源列表中删除这些组播源。
BLOCK_OLD_SOURCES:表示在现有的基础上,不再接收从源地址列表包含的源组播源发往该组播组的组播数据。如果当前对应关系为INCLUDE,则从现有源列表中删除这些组播源;如果当前对应关系为EXCLUDE,则向现有源列表中添加这些组播源。
Number of Sources:本记录中包含的源地址数量。
Multicast Address:组播组地址。
Sources Address:组播源地址。
和v2相同:
1.查询器选举机制一样
2.周期性发送普遍组查询报文确定组播组中的成员是否存在
3.使用特定组查询报文查询特定组下的成员是否存在
V3新增
1.IGMPv3中没有成员抑制机制,因为相同组播组的成员可能希望接收不同源的组播数据
2.IGMPv3增加了特定源组播查询报文
3.IGMPv3的report报文中不仅包含了想要加入的组播组,还包含了想要接收来自哪些组播源的数据(report报文的目的ip为224.0.0.22 固定)
4.IGMPv3没有定义专门的成员离开报文,成员离开报文通过特定类型的报文来传达
IGMPv1是直接没有离开机制,IGMPv3是有离开机制只是没有离开报文
当主机要离开时会借助Report报文实现,报文的组播地址为要加入组播的组播ip,组播源地址为空
5.查询器在收到组成员发送的改变源对应关系的关系报告后,会发特定源组播查询报文,确认是否还有成员存在
标签:组播,报文,笔记,查询,学习,地址,源地址,Report,IGMP 来源: https://blog.csdn.net/paopaofighting/article/details/122260483