前言

一直对组播这个概念迷迷糊糊,特别是交换机处理组播的方式,非常想搞懂但是懒癌发作。这几天终于耐心地看了下有关组播的资料,大致了解了一下同一广播域内组播的相关知识。组播占了计算机网络的一大部分,特别是组播路由这一块,知识点、名词非常多,要完全掌握并不是一件容易的事情。下面跟大家分享一下我的学习经验,如有错误请提出,谢谢。

还有,此文全部组播均为IPv4环境下的组播,IPv6的组播跟IPv4完全不同,请注意区分。


为什么需要组播

简单来说,就是因为在一些诸如视频点播的应用时,单播对主机的压力太大、而广播又对网络链路的压力太大。所以……


组播IP地址

  • 224.0.0.0~239.255.255.255 所有组播地址
  • 224.0.0.0~224.0.0.255 有特殊用途的组播地址(不能被路由)
  • 224.0.0.1 同一网段所有主机
  • 224.0.0.2 同一网段所有组播路由器
  • 224.0.1.0~238.255.255.255 公网组播地址
  • 239.0.0.0~239.255.255.255 私网组播地址

摘自:维基百科


组播IP地址和MAC地址的关系

组播MAC地址的高24bit位是以01-00-5E开头,低23bit为组播IP地址的低23bit。
由于IP组播地址的高4bit是1110,标识了组播组,而低28bit中只有23bit被映像到组播MAC地址上,这样IP组播地址中就会有5bit没有使用,从而出现了32个IP组播地址映像到同一MAC地址上的结果。

 
组播IP、MAC映射

IGMP简介

网路群组管理协议Internet Group Management Protocol或简写IGMP)是用于管理网路协议多播组成员的一种通信协议。IP主机和相邻的路由器利用IGMP来创建多播组的组成员。像ICMP用于单播连接一样,IGMP也是IP多播说明的一个完整部分。 IGMP为互联网协议的一种,属于开放系统链接(OSI) 模块的第三层协议,IP主机用它将主机的多点发送成员人数报告给临近的多点发送路由器。

摘自:维基百科

IGMP目前有三个版本,目前用的最多的是IGMPv2。IGMPv1主要基于查询和响应机制来完成对组播组成员的管理;IGMPv2增加了查询器选举机制和离开组机制;IGMPv3在兼容和继承IGMPv1和IGMPv2的基础上,进一步增强了主机的控制能力,并增强了查询和报告报文的功能。


IGMPv2报文分类和详解

一、查询报文

该报文由组播路由器发出。可细分为通用查询报文和特定组查询报文。组播路由器定时发出通用查询报文(下图的组播路由器每125s发送一次)。通用查询报文的目标IP为224.0.0.1(所有主机),IGMP报头内的组播IP为0.0.0.0。用来查询该网段有哪些组播组的成员。特定组查询报文的目标IP则是要查询的组播组地址。

 
查询报文抓包

二、报告报文

该报文由主机发出。可对组播路由器发出的查询报文进行回应,同时主机在主动加入特定组的时候,也会主动发送该报文报告。报告报文的目标IP和IGMP报头内的组播IP均为主机加入的组播组地址(注意!这里虽说是回应路由器的,但是数据包的目标IP不是路由器)。

 
报告报文抓包

三、离开报文(仅限IGMPv2和v3)

该报文由主机发出。当主机离开组播组时发送此报文,向组播路由器报告离开了特定的组播组。离开报文的目标IP为224.0.0.2(所有组播路由器),IGMP报头内的组播IP为特定离开组的IP。

 
离开报文抓包

交换机处理组播的方式

1、一切没有开启或不支持IGMP监听功能的交换机,组播数据包都以广播的形式在广播域内泛洪。
2、开启IGMP监听功能的交换机的每个VLAN会维护一个组播地址表。当收到组播数据包时,如果表中含有该数据包组播IP的条目,则按照表中的组播IP向对应的端口进行转发,否则以广播的形式在广播域内泛洪。


交换机的组播地址表样式

包类型 组播IP 所在端口
IGMP 224.0.0.251 1
IGMP 224.0.0.251 2, 3, 4

交换机组播地址表的学习和维护(IGMP监听过程)

(假设当前只有一个VLAN)
1、当组播路由器发出IGMP通用查询报文然后收到主机回应的IGMP报告报文时,交换机会把收到回应的端口和对应的组播地址学习到组播地址表中(其实只要是IGMP报告报文,都会学习,不管有没有事先查询)。如下图所示:

 
图解

2、当主机发出IGMP离开报文时,组播路由器会发送IGMP特定组查询报文。如果该端口在一定时间内得不到回应,则删除条目对应的端口;如果得到回应则不删除。当开启端口快速离开功能时,一旦该端口收到离开报文,交换机将立即删除条目对应的端口。
3、和MAC地址表一样,自动学习到的条目都有老化时间。若在一定时间内没有收到对应组播地址某个端口上的IGMP报告报文,条目上相应的端口会自动删除。当所有端口都被删除时,条目则自动删除。
4、组播地址表的学习和维护全靠IGMP监听(不考虑CGMP)。
5、如果网络中没有组播路由器,也就没有IGMP查询报文,组播地址表的建立将会变得十分困难(思科2960可以配置定期发送IGMP查询报文)。
6、除非把交换机配置成IGMP查询器,否则交换机不会发送任何IGMP报文,只会静静地监听。


思科交换机的简单设置

1、全局开启IGMP监听(默认已开启)

switch(config)# ip igmp snooping

执行完上述命令之后所有VLAN都会开启IGMP监听。
2、为某个VLAN开启快速离开功能(可选)

switch(config)# vlan <VLAN ID>
switch(config-vlan)# ip igmp snooping fast-leave

作者:余泽楠
链接:https://www.jianshu.com/p/52f6fc87271a
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

组播基本概念、IGMP、IGMP监听学习笔记的更多相关文章

  1. DOM对HTML元素的增删改操作和事件概念和事件监听

    DOM创建节点的方法: document.createElement(Tag),Tag必须是合法的HTML元素 DOM复制节点的方法: 节点cloneNode(boolean deep),当deep为 ...

  2. ArcGIS API for JavaScript 4.2学习笔记[7] 鹰眼(缩略图的实现及异步处理、Promise、回调函数、监听的笔记)

    文前说明:关于style就是页面的css暂时不做评论,因为官方给的例子的样式实在太简单了,照抄阅读即可. 这篇文章有着大量AJS 4.x版本添加的内容,如监听watch.Promise对象.回调函数. ...

  3. IP组播

    1  IP组播基础 IP组播技术有效地解决了单点发送.多点接收的问题.组播源只发送一份数据,被传递的信息在距组播源尽可能远的网络节点才开始被复制和分发,并且只发送给需要该信息的接收者.  说明: 本章 ...

  4. js事件监听-addEventListener (w3c标准) 和 attachEvent(ie)

    研究了一个小时,没看懂这两个属性 window.onload = function(){ var oDiv = document.getElementById("J_myDiv") ...

  5. 分享一下事件监听addEventListener----attachEvent的用法

    来自:http://www.cnblogs.com/wkylin/archive/2011/10/09/2203161.html 事件监听addEventListener----attachEvent ...

  6. IP组播技术

      1  概述 1.1  产生背景 传统的IP通信有两种方式:一种是在源主机与目的主机之间点对点的通信,即单播:另一种是在源主机与同一网段中所有其它主机之间点对多点的通信,即广播.如果要将信息发送给多 ...

  7. TCP/IP 笔记 - 广播和本地组播

    在之前第二章介绍IP寻址的时候有介绍到,IP地址有4种:单播.组播.广播.任播. 单播,客户端与服务器之间点到点连接通信: 组播,在发送者和多个接收者(如某个特定的分组)之间实现点对多点的连接通信: ...

  8. Python Web学习笔记之IGMP和ICMP的差别

    理论技术:TCP/IP协议族(四)ICMP和IGMP协议! 应该先说IP协议的,后来考虑到层次性,还是先把支撑协议介绍完在细说IP!因为IP是我的最爱也是我的痛!呵呵! 一.ICMP协议 为什么要使用 ...

  9. 组播___IGMP

    一.基本概念: 1.协议概述: 是运行在主机和与主机直连的路由器之间,其实现的功能是双向的:一方面,主机通过IGMP通知路由器希望接收某个特定组播组的信息:另一方面,路由器通过IGMP周期性地查询局域 ...

随机推荐

  1. 嵌入式开发之davinci--- 8148/8168/8127 中的xdc 简介

    XDC是TI公司为嵌入式实时系统可重用软件组件(在XDC里被成为packages,以下成为包)制定的一套标准.它包括一些有用的工具,标准的API函数,静态配置文件和打包(packaging)操作.XD ...

  2. C++钩子程序浅析

    在网上搜索“键盘记录C++”实现可以找到很多相关文章,我也是照着上面的介绍去研究去试着做的,从懂到不懂.那么为什么有那么多材料我还要去写这样一篇 文章,我想这个是我个人需要关心的问题,我不是那种ctr ...

  3. 成长型思维模式Not yet

    当做一件事失败了,要告诉他 暂未成功,暂时没有成功,继续努力,下次就有可能成功. 不及格,暂未及格  是两种思维模式,成长性的思维方式得到的是一个是努力型的人格

  4. python 基础2.5 循环中continue与breake用法

    示例1: #循环退出,break continue.break 跳出最外层循环:continue跳出内层循环 #当 i=5时,通过continue 跳出当前if循环,不在执行if循环中后边的语句.i= ...

  5. python 基础 2.2 if流程控制(二)

    一. if  else   1.逻辑值(bool)包含了两个值: ----True:表示非空的值,比如:string ,tuple,list,set,dictonary,所有非空的序列. -----F ...

  6. net上传文件的三种方法

    ASP.NET依托.net framework类库,封装了大量的功能,使得上传文件非常简单,主要有以下三种基本方法. 方法一:用Web控件FileUpload,上传到网站根目录. Test.aspx关 ...

  7. 一个小公司的前端笔试HTML CSS JS

    网上有这套题的答案,版本也很多,我做了很多参考.本文就当个小笔记,可能有错误,还望指正~ 第1章  Html篇 1. 你做的网页在哪些浏览器测试过?这些浏览器的内核分别是什么? 浏览器类型 内核 Fi ...

  8. 【题解】[CJOI2019Chebnear]

    [题解][CJOI2019Chebnear] 题目描述 给定平面上有\(n\)个仇人,\((x,y) ,x,y \in R^+\) ,\(n\)个人都是仇人关系,而有仇人关系的一对人的切比雪夫距离若\ ...

  9. VirtualBox创建VM结果ProcessorType是空的

    用WMI来查询CPU的频率,一直没问题: "Select MaxClockSpeed From Win32_Processor Where ProcessorType = 3" 结 ...

  10. js添加方法和邦定事件

    function(obj,objArr){ if(($(obj).attr("type") == "checkbox" && $j(obj).p ...