其他分享
首页 > 其他分享> > TCP/IP——IGMP

TCP/IP——IGMP

作者:互联网

1. 概念

组播地址,也就是 D 类地址,既然是组播,那就说明是只有一组的主机能收到数据包,不在一组的主机不能收到数组包,怎么管理是否是在一组呢?那么,就需要 IGMP 协议了。

组播模型

组播模型

IGMP 是因特网组管理协议,工作在主机(组播成员)和最后一跳路由之间,如上图中的蓝色部分。

1)IGMP 报文向路由器申请加入和退出组播组,默认情况下路由器是不会转发组播包到连接中的主机,除非主机通过 IGMP 加入到组播组,主机申请加入到组播组时,路由器就会记录 IGMP 路由器表,路由器后续就会转发组播包到对应的主机了。

2)IGMP 报文采用 IP 封装,IP 头部的协议号为 2,而且 TTL 字段值通常为 1,因为 IGMP 是工作在主机与连接的路由器之间。

2. 工作机制

IGMP 分为了三个版本分别是,IGMPv1、IGMPv2、IGMPv3。

接下来,以 IGMPv2 作为例子,说说常规查询与响应和离开组播组这两个工作机制。

2.1 常规查询与响应工作机制

IGMP 常规查询与响应工作机制

IGMP 常规查询与响应工作机制

1)路由器会周期性发送目的地址为 224.0.0.1(表示同一网段内所有主机和路由器) IGMP 常规查询报文

2)主机1 和 主机 3 收到这个查询,随后会启动「报告延迟计时器」,计时器的时间是随机的,通常是 0~10 秒,计时器超时后主机就会发送 IGMP 成员关系报告报文(源 IP 地址为自己主机的 IP 地址,目的 IP 地址为组播地址)。如果在定时器超时之前,收到同一个组内的其他主机发送的成员关系报告报文,则自己不再发送,这样可以减少网络中多余的 IGMP 报文数量。

3)路由器收到主机的成员关系报文后,就会在 IGMP 路由表中加入该组播组,后续网络中一旦该组播地址的数据到达路由器,它会把数据包转发出去。

2.2 离开组播组工作机制

离开组播组的情况一,网段中仍有该组播组:

IGMPv2 离开组播组工作机制 情况1IGMPv2 离开组播组工作机制 情况1

  1. 主机 1 要离开组 224.1.1.1,发送 IGMPv2 离组报文,报文的目的地址是 224.0.0.2(表示发向网段内的所有路由器)
  2. 路由器收到该报文后,以 1 秒为间隔连续发送 IGMP 特定组查询报文(共计发送 2 个),以便确认该网络是否还有 224.1.1.1 组的其他成员。
  3. 主机 3 仍然是组 224.1.1.1 的成员,因此它立即响应这个特定组查询。路由器知道该网络中仍然存在该组播组的成员,于是继续向该网络转发 224.1.1.1 的组播数据包。

离开组播组的情况二,网段中没有该组播组:

IGMPv2 离开组播组工作机制 情况2IGMPv2 离开组播组工作机制 情况2

  1. 主机 1 要离开组播组 224.1.1.1,发送 IGMP 离组报文。
  2. 路由器收到该报文后,以 1 秒为间隔连续发送 IGMP 特定组查询报文(共计发送 2 个)。此时在该网段内,组 224.1.1.1 已经没有其他成员了,因此没有主机响应这个查询。
  3. 一定时间后,路由器认为该网段中已经没有 224.1.1.1 组播组成员了,将不会再向这个网段转发该组播地址的数据包。

3. IGMP包

这里以IGMPv3为例:

3.1 查询报文格式

V3报文

IGMPv3查询报文字段说明:

字段说明
Type报文类型,取值为0x11。
Max Response Code最大响应时间。成员主机在收到IGMP查询器发送的普遍组查询报文后,需要在最大响应时间内做出回应。
ChecksumIGMP报文的校验和。
Group Address组播组地址。在普遍组查询报文中,该字段设为0;在特定组查询报文和特定源组查询报文中,该字段为要查询的组播组地址。
Resv保留字段。发送报文时该字段设为0;接收报文时,对该字段不做处理。
S该比特位为1时,所有收到此查询报文的其他路由器不启动定时器刷新过程,但是此查询报文并不抑制查询器选举过程和路由器的主机侧处理过程。
QRV如果该字段非0,则表示查询器的健壮系数(Robustness Variable)。如果该字段为0,则表示查询器的健壮系数大于7。路由器接收到查询报文时,如果发现该字段非0,则将自己的健壮系数调整为该字段的值;如果发现该字段为0,则不做处理。
QQICIGMP查询器的查询间隔,单位为秒。非查询器收到查询报文时,如果发现该字段非0,则将自己的查询间隔参数调整为该字段的值;如果发现该字段为0,则不做处理。
Number of Sources报文中包含的组播源的数量。对于普遍组查询报文和特定组查询报文,该字段为0;对于特定源组查询报文,该字段非0。此参数的大小受到所在网络MTU大小的限制。
Source Address组播源地址,其数量受到Number of Sources字段值大小的限制。

3.2 成员报告报文格式

成员报告离开

字段解释信息:

字段说明
Type报文类型,取值为0x22。
Reserved保留字段。
ChecksumIGMP报文的校验和。
Number of Group Records报文中包含的组记录的数量。
Group Record组记录。

组记录

 

图:Grounp Record字段格式

 

字段解释:

4. 抓包实例

对应的包格式:

部分参考:

https://cshihong.github.io/2018/02/12/IGMP%E5%9F%BA%E7%A1%80/

https://www.cnblogs.com/xiaolincoding/p/12830287.html

标签:组播,IP,报文,TCP,查询,主机,路由器,IGMP
来源: https://blog.csdn.net/www_dong/article/details/113814503