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

golang 组播数据接收_组播概念3

一、IGMP Message

1.组成员一旦开启IGMP,会自动发送Membership Report消息到叶路由器

2.IGMPv2版本,组成员退出组会发送leave消息,IGMPv1不会

3.也就是说,IGMPv1版本只有Membership Report Message,没有Leave Message

4.对于叶路由器,如果运行IGMPv1版本,那么它是没有Specific消息的(特定组查询消息)

只有60s/次的周期性查询消息(即general Message-通用性查询消息)

5.叶路由器会周期性的每60s向组成员发送周期性查询消息,组成员收到以后,必须回应membership

Report消息

6.特定组查询消息只在V2版本中才会产生

483c9e0e0d9dc5f72298fb3e243ed053.png

7.当某一组成员向叶路由器发送了leave message以后,叶路由器会马上向下发送一个spcific message

查询这个组中是否还有组成员(整个广播域内发送),如果还有该组中还有组成员存在,那么其他组成员

将以membership report消息回复叶路由器;如果该组中不再存在任何组成员,那么叶路由器收到来自

组播的数据将不再往下推送

Host Report Message

1.该消息用于组成员向叶路由器报告自身需要加入的组地址

2.报头中的目的ip地址为自身想要加入的组地址,这样做是为了完成再本组内Report Message的Suppress(抑制)

因为路由器不关心这个组内有多少组成员,只关心有或者是没有,因此所有组成员只要有一个发起就好

3.那么其他组成员如何知道不需要发送Report Message呢,因为每一个组成员发送消息的目的ip为组播地址

4.Report Message产生的原因有两个:再组成员第一次加入该组时,或是在收到路由器发出的Query Message以后

需要产生响应

5.针对第一种可能,RFC2236建议在第一次加入该组时,每一个组成员都以10s为间隔发送1-2次membership Report

message,为了保证叶路由器可以收到该消息,这个时候就不考虑Suppress的问题

6.针对第二种情况,Report会周期性的回复,回复频率取决于路由器Query Message的查询频率

7.一旦有某一个组成员发送了Membership Report消息以后,其他组成员将不再发送

8.IGMPv2的Leave Message,当组成员离开时用于通告也路由器,发送该消息的目标ip地址位224.0.0.2

也就是发送到组内的所有路由器

二、组成员的Leave Message消息

32fb9f008492e1c0bd4fd709fc7955f0.png

为什么要发送到224.0.0.2?

1.因为某一单一组成员的离开不需要告诉组内的其他组成员,这样只有叶路由器可以收到

2..其次,会出现双网关(多叶路由器)的情况,那么为了能够将消息发送到所有的叶路由器的同时也要保证组内其它

组成员不收到该消息,所以将此消息发送到目标地址224.0.0.2

三、叶路由器的通用组查询消息,General Query Message

为什么发送到224.0.0.1?

1.当存在多台叶路由器的时候,叶路由器发送通用组查询消息是发送到所有的设备,那么在这过程中

所有的组成员能收到,所有的叶路由器也能收到

2.当存在多个叶路由器的时候,会在多个叶路由器中选举出一个叶路由器发送特定组查询消息

该消息用于叶路由器查询该接口下的所有组成员的信息,无论组成员需要加入哪一个组(可能存在

多个不同的组)都需要做出响应,叶路由器每60s向下发送一次查询,可以通过命令ip igmp query-interval

【seconds】进行修改(接口下)

3.IP包头内目的地址设置位224.0.0.1,对应本广播域内的所有设备,包括叶路由器,这样做是为了在同一子网

有多台路由器时,选择查询者,而非查询者将停止发送所有查询消息

4.查询者的选择比较接口的ip地址,地址越小的成为查询者,如果120s(可以通过ip igmp querier-timeout【second】

修改)内非查询者都没有收到查询者的Query消息,那么宣告当前查询者失效,由非查询者接替原查询者的工作

周期性的向组成员发送通用查询组消息

5.消息中设置了组成员的最大响应时间为10s,要求组成员在收到该消息后,必须10s内响应,组成员 同时启用1-10s随机计时器,来完成响应

(第一次General Query消息中设置的最大响应时间是正常值得1/4)可以使用命令ip igmp query-max-response-time【seconds】来修改该参数

6.消息中把查询得组地址设置为0.0.0.0,用于对应所有组地址

四、Router Specific Query

1.该消息是针对组成员得Leave Message而产生的特定组查询消息

2.ip包头内目的地址为要查询的组地址,表示该消息只需要指定的组的组成员响应

3.要求组成员响应的最大等待时间为1s,但是为了防止组成员来不及响应,cisco路由器上会以1s为间隔,连续发送2次该查询消息

4.可以通过命令:

ip igmp last-member-quary-interval[m seconds]和ip igmp lasst-member-query-count【num】来修改

五、IGMPv1和IGMPv2的区别

1.IGMPv1没有定义Leave Message,因此最末跳路由器不会产生specific Query Message,并且在判断是否还有组成员时必须

要通过连续3次(180s)General Query得不到响应以后才能判定,所以IGMPv1中从最后一个组成员离开,到路由器停止转发数据的

延时比IGMPv2要更长。

2.IGMPv1的查询消息中没有设定最大响应时间,而是靠组成员自己来定义

3.IGMPv1不具备查询者选择功能,只能依靠组播路由协议选择的指定路由器(DR)来作为查询者

4.当同一子网内既存在IGMPv1,也存在IGMPv2时,按照向后兼容的原则工作

六、L2 Muiticast Frame Switching

组播数据转发对一台交换机的影响

1.以太交换机在L2转发数据时,依赖于本地的CAM表,也就是MAC地址表

2.交换机通过对收到的数据帧的源mac地址与接收端口相绑定的方式来完成自动学习,从而形成mac地址表

3.组播的组地址永远都是存在于目的地址字段,因此交换机是永远无法自动学习到组播的mac地址的

4.因此,当一个组播的数据经过交换机时,交换机会把这个数据当作未知单播数据帧再本广播域内Flooding

七、CGMP协议(Cisco Group Management Protocol)--cisco私有

1.运行在Router和Switch之间的一种协议

2.CGMP Message是由Router向Switch发起

3.组成员通过IGMP向路由器报告自身需要到达组地址224.X.X.X

4.IGMP在穿越交换机时,交换机无法识别(因为该消息在IP包头内)

5.但是交换机会将该主机的单播mac地址和自身接收到该数据的接口相绑定

6.路由器收到报告后,会通过CGMP向交换机 发起join消息,告诉交换机有一个单播MAC(组成员的mac)和组地址(组播地址的mac)要求加入

7.交换机收到该消息后,首先查询单播的mac地址表,确认该组成员单播mac地址是在该接口上,然后建立组播mac地址表,将组播mac地址和组成员连接

交换机的接口绑定,完成对组播mac地址的学习

八、IGMP Snooping

1.单独运行在Switch

2.要求该Switch必须是多层交换机

3.运行IGMP Snooping后,交换机会监听经过自己的所有IGMP的消息,并且自动判断哪些单播mac地址需要接收哪些组播Mac地址的流量

4.对应单播的mac地址表完成组播MAC地址表的建立

九、RGMP,和CGMP工作原理类似,公有协议

十、GMRP【GARP(Genneral Attribute Registration Protocol Multicast)

Resgistration Protocol

1.运行在组成员(主机)和交换机之间的协议,要求组成员(主机)安装相对应的协议

十一、单播路由与组播路由的主要区别

1.单播路由关心数据包要去哪里(Destination)

2.组播路由关心数据包从哪里来(Source)

3.单播路由依靠路由协议对目的地址的检测来防止环路

4.组播路由无法对目的地址检测,因为组成员可能在任何一个节点

因此组播路由需要依靠对源地址的检测来防止环路的发生

1.对源地址的检测方法称之为RPF(Reverse Path Forwarding)

2.RPF针对的是所有组播路由协议,所以RPF是组播数据转发的依赖

------------show ip rpf 100.1.1.0--查看rpf的源是怎么过来的

配置-dense mode-推送模式

ip multicast-routing--开启组播路由功能

ip pim dense-mode-开启pim推送模式

ip igmp join-group +组播地址--PC加入某一个组

show ip igmp interface F0/0--查看接口IGMP协议运行状态

show ip mroute--查看组播路由表

Show ip pim neighbor-查看pim邻居

网络拓扑:

85f7a79be21f9ec27e312215dfe4216b.png

拓扑

1.如图规划ip地址,SER设备网关地址为100.1.1.1,PC1设置GW网关地址为150.1.1.1

2.GW1和GW2上打开组播路由功能

3.进入接口下,启用pim协议,这里设置pim模式为推送模式(dense-mode)

4.GW1,GW2上运行底层协议,以获得单播路由(组播是基于单播的)

5.PC1进入接口,将接口加入到组播组224.1.2.3(组播地址自定义)中

6.测试实际效果

第一步:规划ip地址(步骤省略)

第二步:

16e1d3fd2083900a2eee2eeba52cf940.png

第三步:

b5ce43113d348d4b79e86c0adf42bb47.png

第四步:

3474872cdf345a67d0a329138496328e.png

第五步:

975eba7157582f5b84e632b48f38aaa9.png

第六步:

1.PC1上开启debug,检测ping包

338b84250e7368340b4ec1922a25573c.png

2.SER上测试:

7a5cc2ab5533383e27806bab4dd92906.png

3.PC1上查看debug情况:

844cc4b0d5fa2ee3fdc0a26ccb0c6594.png

以上是本章的部分内容点,后续将持续更新,感谢关注!

相关文章:

  • clion设置为中文_手把手教你去除CLion的中文字符乱码
  • mysql 5.5 查询_在mysql5.5中如何查询字符编码?
  • linux mysql验证功能_经过验证的Linux下安装MySQL总结
  • mysql 主从1236_解决mysql开启GTID主从同步出现1236错误问题【转】
  • main spring启动_Spring Boot 第一个示例 “main” 方法
  • mysql des_MySQL · 引擎特性 · InnoDB 文件系统之文件物理结构
  • mysql divided用法_BigDecimal的应用场景及使用方法
  • python 快速排序详解_学习笔记——快速排序(python实现)
  • mysql 总行数一半_《Mysql - Count(*) 的优化》
  • 删除视图的sql语句_推荐强大开源的数据库SQL语句审核平台,再也不用担心删除跑路了!...
  • php使用url连接mysql_3种通过php连接mysql的方法
  • qt mysql分页显示_qt mysql 分页
  • mysql操纵对象_MySQL数据库的对象操作
  • python数据类型转换教学_python数据类型转换
  • 分页插件怎么实现不跳转页面进入下一页_jQuery分页跳转插件
  • 【知识碎片】第三方登录弹窗效果
  • canvas实际项目操作,包含:线条,圆形,扇形,图片绘制,图片圆角遮罩,矩形,弧形文字...
  • css选择器
  • Django 博客开发教程 16 - 统计文章阅读量
  • JS基础篇--通过JS生成由字母与数字组合的随机字符串
  • MD5加密原理解析及OC版原理实现
  • scala基础语法(二)
  • springboot_database项目介绍
  • Sublime Text 2/3 绑定Eclipse快捷键
  • 初识 beanstalkd
  • 飞驰在Mesos的涡轮引擎上
  • 高性能JavaScript阅读简记(三)
  • 关于字符编码你应该知道的事情
  • 你真的知道 == 和 equals 的区别吗?
  • 什么是Javascript函数节流?
  • 数据仓库的几种建模方法
  • ​猴子吃桃问题:每天都吃了前一天剩下的一半多一个。
  • ​虚拟化系列介绍(十)
  • !$boo在php中什么意思,php前戏
  • # Maven错误Error executing Maven
  • #我与Java虚拟机的故事#连载16:打开Java世界大门的钥匙
  • (1)(1.13) SiK无线电高级配置(五)
  • (2022 CVPR) Unbiased Teacher v2
  • (4)logging(日志模块)
  • (C)一些题4
  • (C语言版)链表(三)——实现双向链表创建、删除、插入、释放内存等简单操作...
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第2节(共同的基类)
  • (ZT)北大教授朱青生给学生的一封信:大学,更是一个科学的保证
  • (力扣记录)1448. 统计二叉树中好节点的数目
  • (三)Pytorch快速搭建卷积神经网络模型实现手写数字识别(代码+详细注解)
  • (一)硬件制作--从零开始自制linux掌上电脑(F1C200S) <嵌入式项目>
  • (原)Matlab的svmtrain和svmclassify
  • (原創) 物件導向與老子思想 (OO)
  • (转) ns2/nam与nam实现相关的文件
  • (转)Google的Objective-C编码规范
  • (转)scrum常见工具列表
  • .NET 6 Mysql Canal (CDC 增量同步,捕获变更数据) 案例版
  • .NET Framework 4.6.2改进了WPF和安全性
  • .NET中的Event与Delegates,从Publisher到Subscriber的衔接!
  • /etc/shadow字段详解