本期与大家聊聊IGMPv1(因特网组管理协议),分享我个人见解,以及梳理一下IGMPv1相关知识点。
一
它是干嘛用的?
我们学一个协议时,首先,最想知道的就是它是干嘛用的?什么时候才需要它?部署场景?
1、它是干嘛的?
IGMP(Internet Group Mangment Protocl)因特网组管理协议,开发该协议,主要是用于组播流接收主机和相邻组播路由器之间维护组播组成员关系的。
说白了,主机通过它来表达自己想加入哪个组播组。组播路由器通过它可以清楚了解连接主机子网内有哪些组播组成员。
2、什么时候才需要它? 部署场景?
当部署组播时候,有主机需要加入组播组时就需要它。
部署场景:
![8b8451d385f4b1d532def99d892e49a9.png](https://i-blog.csdnimg.cn/blog_migrate/0106546172ad94b0a325153094e40bd6.jpeg)
二
IGMP协议、原理介绍
1、协议发展:
![f704b1402513bf8bc0e36e467c626a81.png](https://i-blog.csdnimg.cn/blog_migrate/cea9d3b9a95a63849257d7e52d5ff0a0.jpeg)
2、协议具体介绍
IGMP协议运行于主机和 与主机相邻的组播路由器(最后一跳路由器)之间。
IGMP工作机制,龙哥就从两个维度来说把,就是主机和路由器。
![f7bfaebb8d76b32d2af20f9a3aa0def3.png](https://i-blog.csdnimg.cn/blog_migrate/af39bb49173148d65b3bc1b01cb93b68.jpeg)
![f083bc0c9618fe93449a694c81d5f735.png](https://i-blog.csdnimg.cn/blog_migrate/cdf2c4e9b0d40bd1e30ef50037e7803b.jpeg)
3、IGMP工作机制
![befe5de2897670bfc6f31ed4d7928bfd.png](https://i-blog.csdnimg.cn/blog_migrate/bc4284dee6812df0c94028cc413b138f.jpeg)
聊IGMP工作机制前,我个人还是偏向先了解一下报文格式,如果有报文格式读透了,然后再去研究原理,就容易理解一些。
![1aba4fb967572ec68662a79697ae1d14.png](https://i-blog.csdnimg.cn/blog_migrate/1deba993f1a2cbf33e5199742049de84.jpeg)
IGMPv1报文格式
版本:即=1‘
类型:0x11= ’成员关系查询报文;0x12=成员加入报告报文。
组播地址:
如果是成员关系查询报文,即等于0.0.0.0
如果是成员加入报告报文,即等于想要加入的组播地址。
结合上述格式,龙哥再抓个包给大家看,就会更加深刻了。
![1f1b9742139fef4e627b604de9b3a5f7.png](https://i-blog.csdnimg.cn/blog_migrate/df2a709d7e21992f6685133b2b96f6f6.jpeg)
红色部分,我们可知,IGMP是基于IP之上进行封装的,协议号为2。
在这,大家是不是能想到ICMP,也是基于IP之上的,协议号为1。不过与ICMP不同的是,IGMP消息仅局限于本地数据链路,为啥呢? 看图说话,TTL=1。
4、IGMPv1成员加入
![1fe8c2648203ccb21b26f1af29195ffc.png](https://i-blog.csdnimg.cn/blog_migrate/cf188febf7f9ec74b361c99ebf786f44.jpeg)
例如,PC1想加入239.1.1.1这个组播组,就会发送IGMPv1的成员报告报文,目的IP地址为想要加入的组。路由器收到后,就会了解到该网段有组播组239.1.1.1的成员,为其生成组播转发表项(*,239.1.1.1) , *表示任意组播源。
路由器没收到 成员报告 :
![35faf343540ed8f34b2bb4ed6c04cb10.png](https://i-blog.csdnimg.cn/blog_migrate/a94d4896728de96a6cbf0331f1c7b138.jpeg)
当PC1 发送 成员报告报文,表示想加入239.1.1.1时,成员报告报文如下:
![fc697095ef4aa6eb02a12d15023b186e.png](https://i-blog.csdnimg.cn/blog_migrate/556d45c515e67f7f86c7a187e966073e.jpeg)
![9962c0f8a3664b2e08ff34c8788f6da2.png](https://i-blog.csdnimg.cn/blog_migrate/778003fe28cf231effc408ddb6fade2b.jpeg)
从报文,我们一下就知道了:
IGMPv1的成员报告报文类型为:0x12
报文的目的IP为 所要加入组的组播IP地址。
5、IGMPv1 成员维护。
值得一提的是,IGMPv1 里没有查询器这个东西,是依赖组播协议PIM选择产生的。
![f5ad4f695c4082024de717bf25c02886.png](https://i-blog.csdnimg.cn/blog_migrate/3f324c7e9ed62ff1607697deb18eef1c.jpeg)
下面,我们通过配一下PIM来看看是否就有查询器了?
![76c7c40a04b022d96030389bb3bfcc65.png](https://i-blog.csdnimg.cn/blog_migrate/a6aa6cddd2718620380cc9bc40d30634.jpeg)
![c0bc2c94abbbb2b7ca737000eb85eb30.png](https://i-blog.csdnimg.cn/blog_migrate/89aabe1cea18b9e95b0101c166422b19.jpeg)
这样,IGMP 查询器就产生了,就可以看到路由器周期发送查询报文。
![ba3a07518136049b12ce134cc1ad7636.png](https://i-blog.csdnimg.cn/blog_migrate/58da132f9dfaff82e2ab404fea52276b.jpeg)
![9575f0dee8b4e21fd5627e75da6c0f58.png](https://i-blog.csdnimg.cn/blog_migrate/62394ddeb13ec5b849c6a075ef1a8af2.jpeg)
路由器缺省每隔60s发送一次查询报文,向224.0.0.1发生查询报文:问问大家,这个组还有成员吗?
(224.0.0.1 代表组内所有主机系统)
该网段的所有主机都能收到这个查询报文,同时会启动一个延时定时器,值为0到10s之间,随机取一个。谁先到期,就由谁来发送响应报文。这样做的好处,避免重复的响应报文。
![a46eb4461fc5ac38604f152eff546d1c.png](https://i-blog.csdnimg.cn/blog_migrate/1b9e41a91ec51743e04e0112e857707a.jpeg)
PC1先到期,然后就会发生响应报文。
![1e40bf3e003747c631e1805c0aedd198.png](https://i-blog.csdnimg.cn/blog_migrate/5eeeec92f6f7e9aa5475459fb35f5f9e.jpeg)
其他PC也会收到PC1的响应报文,就会清除延时定时器,同时他们不会发响应报文的。
如果130s内没有响应路由器,路由器就将该组对应的转发表项删除了。
6、IGMPv1 成员离开。
![b6d3b00f9bc73ee3cc28694522b6398a.png](https://i-blog.csdnimg.cn/blog_migrate/1db2014ef76ea38de85be823024310b1.jpeg)
IGMPv1 没有定义离开报文,所以PC离开时,不会发任何报文,路由器无法感知到,只能通过继续周期查询,如果查了3次还是没有人响应,则认为该组没有成员了。