大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺
一、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实现
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/193955.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...