IGMP补充

IGMP(Internet Group Management Protocol) Internet组管理协议

1、组播应用场景

Router 需要将Media server 上的电视直播同时发送给STB1~STB3,而且不发送给两个

PC,如何处理呢?首先STB 要发起一个连接请求,也就是IGMP report 报文,加入到电视

直播的组播组中。同样当STB 要断开连接的时候就发送一个IGMP leave 报文。Router 也需

要知道当前有哪些STB 加入了组播组,防止有的STB 异常掉线了,却依然占用系统资源。

Router 周期性的发送IGMP query 报文查询组播组情况,STB 接到query 报文后发送report

消息到router。当然还有一种报文就是IGMP data,用来传输组播数据。这基本上就是IGMP

协议的基本流程了

2、组播实现

2.1 IP组播组和组播MAC

二层组播MAC 定义为:01:00:5e:xx:xx:xx,其中xx 由三层的IP 组播组确定。三层地址:

组播流使用的IP 是D 类IP 地址(二进制1110 开始),从224.0.0.0~239.255.255.255。由于

组播MAC 地址是一个虚拟的地址,并不是真实网卡的MAC 地址,那么网卡在发送报文是

二层MAC 地址怎么确定呢?答案是采用地址映射的方法将三层IP 地址映射到MAC 地址。

映射关系如下

IP 地址的五个bit 无法映射到MAC 层,因为MAC 层的这五个bit 已经确定。也就是说有32 个IP 组播组会被映射为同一个MAC 地址。

2.2 报文格式

IGMP 报文封装在IP 层上,在IP 层的协议类型码是0x02。IGMPv2 有report, query 和

leave 有三种类型的报文,

IGMP report:type 为0x16(IGMPv2)或0x12(IGMPv1)

IGMP leave:type 为0x17

IGMP query:type 为0x11,query 报文有两种情况,一种是针对特定组播组的查询,另一种是通用查询,查询所有主机加入组播组的情况,两者的主要区别是在Group Address 上

IGMP data:与通常的报文相同,主要区别是MAC 地址使用的是组播MAC

3、IGMP协议的应用问题

3.1 IGMP snooping

交换机的A 端口(port)有一个组播包需要送到主机D。通常交换机会将这个报文flood 到每一个端口,确保报文能够送到主机D。但这样处理存在问题,主机D 挂在port C 上,switch 没有必要将报文发往每一个端口,占用其他端口的网络资源,同时也占用CPU 的资源。因此针对此问题,提出了IGMP snooping。该技术的主要思想是侦听每一个端口上的IGMP 报文,通过解析报文获得其组播地址,将组播地址与交换机的端口联系起来。当关系建立后,就可以通过组播组查到目的port,从而不需要flood
报文到每一个端口上。交换机的桥模块维护这样一张表,以组播组为索引,组播组下记录了属于该组播组的所有端口。当一个组播报文从A 口送到交换机时,交换机从报文中获取组播组地址,然后从表中找出该组播组,将报文直接发送到下属的C 端口。而E,F,H 端口不会有数据送到。

组播索引表采用这样的管理,桥接收到一个 IGMP report 报文解析report 报文中的组播组,创建组播索引,将report 报文的端口记录下来。当然当组播组已经存在了就不需要重新创建组播索引了,只需要检查端口确认是否要添加端口。当桥收到一个IGMP leave 报文时,根据报文中的组播地址和报文端口从表中找到要离开的端口,删除端口。

但是,假如交换机的 C 端口连接的不是主机而是一个HUB,HUB 下挂了两台主机,并且两台主机都加入了同一个组播组,也就是说C 端口下有两台主机,当其中一台主机发送IGMP leave 后,会导致C 端口被删除,结

果另一台主机也无法接收到组播数据了。基于端口的组播报文转发是有问题的,一个解决方法是基于MAC 的组播转发,组播组下面记录的不是port 而是MAC。当组播组有报文时需要处理时,首先查找MAC,然后从

桥中根据MAC 找到port,最后将报文转发到该port

3.2 IGMP proxy

设备的上行端口担任主机的角色发送report 和leave 报文,下行端口执行路由器的角色发送query 报文

时间: 2024-10-13 17:51:40

IGMP补充的相关文章

031医疗项目-模块三:药品供应商目录模块——sql补充知识

这个补充知识有一个点很有必要,视屏上的老师提出一点: 内链接关联查询: 如果表A和表B有一个外键关联 ,可以通过外键进行内链接查询 select dictinfo.*, dicttype.typename from dictinfo, dicttype where dictinfo.typecode = dicttype.typecode --不通过外键,通过groupid查询用户类型的代码结果集,只能查询出一条记录,可以使用内链接 select sysuser.*, dictinfo.info

WebView使用详解(三)——WebChromeClient与LoadData补充

前言: 我不会忘了我 忘了我曾说过一定会得到的梦想 --<老大>小柯 相关文章 1.<WebView使用详解(一)--Native与JS相互调用(附JadX反编译)> 2.<WebView使用详解(二)--WebViewClient与常用事件监听> 一.WebChromeClient 1.概述 (1). 与WebViewClient的区别 很多同学一看到这里有Chrome,立马就会想到google 的Chrome浏览器:这里并不是指Chrome浏览器的意思,而是泛指浏览

Nancy之基于Self Hosting的补充小Demo

前面把Hosting Nancy with ASP.NET.Self Hosting Nancy和Hosting Nancy with OWIN 以demo的形式简单描述了一下. 这篇是为Self Hosting Nancy.和Owin 下面的Self Hosting作个补充. 首先是Self Hosting Nancy的补充: 这里主要是介绍一下Topshelf 官网:http://topshelf-project.com/ GitHub地址:https://github.com/Topshe

UGC补充

成功案例 WIKI:最大也是最小的百科全书 WIKI指的是一种网上共同协作的超文本系统,可由多人共同对网站内容进行维护和更新,是典型的靠UGC运作的系统.其中,WIKI利用UGC概念,使网站的内容制作和编辑成本最小化,但是能够实现领域知识的积累和最大化. 用户可以通过网页浏览器对WIKI文本进行浏览.创建.更改,与其他超文本系统相比,WIKI有使用方便及开放的特点,所以WIKI系统可以帮助用户在一个社群内共同收集.创作某领域的知识,发布所有领域用户都关心和感兴趣的话题.WIKI使用了UGC概念,

jstl标签 core fmt fn函数使用参考(为第一篇的补充,更为实用)

JSTL标签 参考手册 前言 ========================================================================= JSTL标签库,是日常开发经常使用的,也是众多标签中性能最好的.把常用的内容,放在这里备份一份,随用随查.尽量做到不用查,就可以随手就可以写出来.这算是Java程序员的基本功吧,一定要扎实. JSTL全名为JavaServer Pages Standard Tag Library,目前最新的版本为1.1版.JSTL是由J

使用NHibernate(10) -- 补充(inverse &amp;&amp; cascade)

1,inverse属性的作用: 只有集合标记(set/map/list/array/bag)才有invers属性: 以set为例,set的inverse属性决定是否把对set的改动反应到数据库中去,inverse=false(反应),inverse=true(不反应):默认值是false; one-to-many 和many-to-many都适用: inverse等于false时,对于one-to-many,如果删除"一"方,NH会先执行Update语句来把"多"方

重修课程day7(python基础4之基础补充)

一 bit,和bytes的关系 bit:就是计算机的最小的表示单位. bytes:就是计算机的最小的储存单位. 1  字节(bytes) = 8 位(bit) 格式: print(bytes('字符',encoding='utf-8')) 文件默认读取文件 二 strip的其他功能 strip去掉两边的空格,换行符,制表符等等,还可以指定删除字符 a=' dsad ' print(a.strip()) b='\ndsfsadagh\t' print(b.strip()) print(123) c

Sass学习笔记(补充)

阅读目录 1. Sass和SCSS的区别 2. @while循环 3. @at-root 4. @content 5. 凸显注释 6. CSS输出样式 7. 重置浏览器样式 8. Sass调试和@debug命令.@warn命令 9. 使用Sass时的注意事项 相关链接:Sass学习笔记前篇 Sass关于颜色函数的乐趣 在Sass学习笔记前篇,记载了Sass安装.基本用法.编程语法,在这篇,将补充在前篇未记载的知识. 1. Sass和SCSS的区别 参考链接:http://sass.bootcss

软件工程第一次作业补充

软件工程第一次作业的补充 对于作业"在一周之内快速看完<构建之法>,列出你不懂的5-10个问题". 作业要求有: (1)在每个问题后面,请说明哪一章节的什么内容引起了你的提问,提供一些上下文 (2)列出一些事例或资料,支持你的提问 (3)说说你提问题的原因,你说因为自己的假设和书中的不同而提问,还是不懂书中的术语,还是对推理过程有疑问,还是书中的描述和你的经验(直接经验或间接经验)矛盾? 例如:我看了这一段文字 (引用文字),有这个问题 (提出问题):我查了资料,有这些说法