一、IGMP定义及分类 IGMP:INTERNET组管理协议,与广播最大的不同是,IGMP允许每一个网络设备决定是否参与到一个特定的多播群组中。 IGMP的ip地址,组播ip地址的范围为224.0.0.0-239.255.255.255。其中224.0.0.1代表子网上的所有计算机,224.0.0.2代表子网上

一、IGMP定义及分类

IGMP:INTERNET组管理协议,与广播最大的不同是,IGMP允许每一个网络设备决定是否参与到一个特定的多播群组中。

IGMP的ip地址,组播ip地址的范围为224.0.0.0-239.255.255.255。其中224.0.0.1代表子网上的所有计算机,224.0.0.2代表子网上的所有路由器。另外,多播ip地址只可作为目的地址,而且不能生成关于多播地址的差错报文。在上几节分析icmp协议时,代码在接收icmp echo request包后,只有允许对多播地址的请求包的回复时才会对多播地址进行回复,linux中默认是不回复多播echo请求的,只有用户强制配置回复后,才会对多播echo请求进行回复。

IGMP的mac地址为01-00-5e-xx-xx-xx,其中后23bits是ip地址的低23bits。从这也说明了只要知道一个多播ip地址,即可换算出其mac地址,不需要通过arp请求获取mac地址。

在具体实现功能时,又分为IGMP SNOOPING与IGMP PROXY两种。

对于IGMP SNOOPING这是在二层实现组播数据限制的一个功能。对于一个路由器或者2层switch,当lan层的一个端口发送一个IGMP report报文加入一个组播组后,如果没有开启IGMP SNOOPING,则数据会flood到所有lan側端口,这样会增加网络负载。如果开启了IGMP SNOOPING,路由器或者2层switch就会分析IGMP报文,为端口和IGMP组播组地址建立映射关系,这样下行的组播流数据就只会转发到加入组播组的端口,而不会flood到所有桥端口。

对于IGMP PROXY,主要是拦截lan側pc发送的igmp报文,其在wan側作为客户端相应上行路由的查询操作,而在lan側则作为服务端定期发送查询报文。

当lan側加入的组播组在IGMP PROXY设备上没有相应的组播路由时,才会给上层发送组播加入报文,当lan側加入的组播组在IGMP PROXY设备上已经存在时,则无需再将加入报文转发出去。这样不仅能够达到有效抑制二层组播泛滥的问题,且能更有效的获取和控制用户信息,降低网络负载。

二、IGMP的格式

IGMP V1

a)成员关系查询

Version

Type

Un used

CheckSum

Multicast ip address

Version:1

Type:0x11

Multicast ipaddress:设置为0,因为其只支持通用查询

b)成员关系报告

Version

Type

Un used

CheckSum

Multicast ip address

Version:1

Type:0x12

Multicast ip address:要加入的组播组地址

在IGMP V1中,没有专门定义离开组播组的报文,所以组播组路由器是基于超时的机制来发现没有成员的组播组的。

IGMPV2

a)成员关系查询

TYPE(0x11)

Max Resp Time

CheckSum

Multicast ip address

MaxResp Time:最大回复时间,对于成员关系查询报文,需要设置该时间,组播组成员收到成员关系查询后,会根据该值来确定回复时间。

有两种成员关系查询报文:通用成员关系查询与特定组成员关系查询。

对于通用成员关系查询,需要将Multicastip address设置为0;对于特定组成员关系查询,需要将Multicast ip address值设置为要查询的组播组地址。

其中ip头部中的目的地址为224.0.0.1或者要查询的组播组地址

b)成员关系报告

TYPE(0x16)

Max Resp Time

CheckSum

Multicast ip address

MaxResp Time:最大回复时间,此处设置为0。

需要将Multicastip address值设置为加入的组播组地址。

c)离开组消息

TYPE(0x17)

Max Resp Time

CheckSum

Multicast ip address

MaxResp Time:最大回复时间,此处设置为0。

需要将Multicastip address值设置为离开的组播组地址。其中ip头中的目的地址设置为224.0.0.2或者要离开的组播组地址

查询器机制:共享网段上组播路由器的选举机制:同一网段上有多个路由器时,具有最新ip地址的组播路由器充当查询器。

IGMP V3

其在继承了v1、v2的基础上,增加了以下功能:

1)  支持源过滤

2)  查询报文中的最大查询响应时间增加

3)  增加了对特定源组的查询

a)      成员关系查询

TYPE(0x11)

RESP CODE

CheckSum

Multicast ip address

RES

S

QRV

QQIC

源地址数

源地址1

源地址2

源地址3

RESP CODE:最大响应时间

Multicast ip address:群组地址

RES:保留

S:禁止路由器处理位

QRV:发送方发送该报文的次数(QRV-1次)

QQIC:查询报文发送间隔时间

源地址数:记录源地址的数量,用于增加的特定源组查询

b)成员关系报告

TYPE(0x22)

保留

CheckSum

保留

保留

群组记录数

群组1

群组2

群组3

群组的格式如下:

记录类型

0

源地址数

多播地址

源地址1

源地址2

源地址3

。。。

源地址3

记录类型:

1MODE_IS_INCLUDE

2        MODE_IS_EXCLUDE

3        CHANGE_TO_INCLUDE_MODE

4        CHANGE_TO_EXCLUDE_MODE

5        ALLOW_NEW_SOURCE

6        BLOCK_OLD_SOURCE

其ip头部中的目的地址为224.0.0.22

至此完成IGMP协议格式的分析,明天开始分析LINUX IGMP SNOOPING实现

linux 查看igmp类型,Linux IGMP 学习笔记 之一 IGMP协议格式相关推荐

  1. linux查看ogg客户端版本,OGG学习笔记05-OGG的版本

    刚接触OGG的时候,很容易被众多的版本搞晕,虽然官方有提供各版本对应认证OS和DB的表格. 个人认为一个比较简单的方式,是直接去edelivery.oracle.com下载OGG,选定一个大版本后,这 ...

  2. linux怎么知道ping命令,教程方法;通过ping命令查看服务器类型(linux还是windows系列)电脑技巧-琪琪词资源网...

    琪琪词资源网-教程方法;通过ping命令查看服务器类型(linux还是windows系列)电脑技巧,以下是给大家带来的教程方法;通过ping命令查看服务器类型(linux还是windows系列),大家 ...

  3. Linux与C++11多线程编程(学习笔记)

    多线程编程与资源同步 在Windows下,主线程退出后,子线程也会被关闭; 在Linux下,主线程退出后,系统不会关闭子线程,这样就产生了僵尸进程 3.2.1创建线程 Linux 线程的创建 #inc ...

  4. 网络协议学习笔记-IGMP协议

     网络协议学习笔记-IGMP协议 http://hi.baidu.com/clxye/item/3db870336d86c0c11a969614 IGMP协议(Internet Group Man ...

  5. 查看cpu类型 linux,linux如何查看cpu类型

    linux想要查看下cpu的类型!需要用什么方法去查看呢?下面由学习啦小编给你做出详细的linux查看cpu类型方法介绍!希望对你有帮助! linux查看cpu类型方法一 Linux查看CPU的位数( ...

  6. linux怎么看文件状态,linux查看文件类型-file、状态-stat

    linux查看文件类型-file.状态-stat 首页 计算机相关 linux命令 linux查看文件类型-file.状态-stat file 命令可以用来查看文件类型-i mime type -s ...

  7. Linux 查看硬盘类型

    Linux 查看硬盘类型 root@user-PC:~# lsblk -d -o name,rota NAME ROTA loop0 1 sda 1 sdb 1 sdc 1 sdd 0 sde 1 s ...

  8. Linux查看磁盘类型

    Linux查看磁盘类型 根据SSD是非转动盘的属性来区分,返回结果为1,说明不是SSD:返回结果为0,说明是SSD. 命令:lsblk -d -o name,rota [root@ncayu8847 ...

  9. Linux内存从0到1学习笔记(4,TLB)

    一.TLB简介 Kernel初始化的时候,会在初始化内存中创建页表:而处理器读取指令和数据的时候需要首先通过MMU查表得到物理地址,然后在访问物理地址读取指令或数据.MMU查表过程汇中需要4次访问内存 ...

  10. linux查看显卡核心数,linux查看硬件信息,linux查看硬盘信息,linux查看CPU信息,linux查看显卡,硬件型号信息 | 帮助信息-动天数据...

    linux查看硬件信息,linux查看硬盘信息,linux查看CPU信息,linux查看显卡,硬件型号信息 作者:dthost | 时间:2015-09-30 | 8,325 次阅读 linux服务器 ...

最新文章

  1. ASP.NET 4.0 新特性--Web.Config Transformation(原创)
  2. 聊一聊:MyBatis和Spring Data JPA的选择问题
  3. Device is not certified by Google
  4. MVC学习九:MVC 特性本质
  5. fceux模拟器linux,超强FC模拟器fceux-2.2.3最新版
  6. java 写一个计算器_java编写一个计算器类
  7. netmiko 记录日志_Pythonnetmiko模块的使用 | 学步园
  8. 下载文件根据浏览器判断文件名,解决兼容性问题
  9. R语言实现常用的5种分析方法(主成分+因子+多维标度+判别+聚类
  10. 最新米酷6.26影视源码+解析接口+步骤
  11. 厚积‘博’发,成就卓越IT人生!
  12. 百度 嵌入式Linux软件研发工程师面试记录
  13. 传国宝玺 第二部 降墓 第十六章 三煞天棺
  14. 第一个将Palette Mode引入VVC,阿里云在JVET会议上引起关注
  15. DHT11大气温湿度模块+直流电机实现根据温度控制风扇转动
  16. 国外计算机科学的 lab,真滴牛逼!
  17. File类的基本方法实现
  18. 概率中的独立与相关:相互独立、条件独立、协方差、相关系数
  19. 手把手搭建个人博客(图文教程)
  20. MCP2515板级驱动

热门文章

  1. Python 决策树分类任务
  2. oracle博客北大青鸟,北大青鸟oracle学习笔记25
  3. 锚框(anchor box)/先验框(prior bounding box)概念介绍及其生成
  4. HTML embed 标签应用
  5. 【Excel】分列操作,对一个单元格内的数据进行特定分列,如按照逗号,冒号,空格等等进行文本划分
  6. Spring系列一:spring的安装与使用
  7. 物联网卡管理平台有什么功能
  8. ALERT! UUID=xxxxxxxxx does not exist. Dropping to a shell!
  9. 走进金融数据分析世界
  10. [益智]:三个穷人、两个面包,只切一刀,如何实现公平正义?