IGMP协议是什么?有什么作用?

IGMP(Internet Group Management Protocol)是用于管理IP组播组的网络层协议。它的主要作用是:

  1. 组播组管理:IGMP允许网络设备发出加入组播组和离开组播组的消息,管理组播组成员关系。
  2. 组播路由:网络设备可以根据IGMP消息更新组播路由表,维护到组播组成员的路由信息。
  3. 组播转发:网络设备根据组播路由表进行组播报文的转发,实现组播报文到达所有组播组成员。
  4. 定期查询:IGMP定期向网络设备发送通用查询消息,统计并刷新当前的组播组成员关系。
  5. 组播组离开:当网络设备在一段时间内没有接收到成员的回复,会将该成员从组播组中移除。

IGMP消息类型主要包含:

  • 通用查询:所有系统查询消息,询问网络中的接收方是否仍然对某一组播地址感兴趣。
  • 特定查询:询问指定接收方是否仍然对某一组播地址感兴趣。
  • 组播回复:接收方回复通用查询或特定查询消息,报告其加入或维持的组播组成员关系。
  • 离开组播组:接收方主动通告其离开的组播组,以被移出该组播组。

代码示例:

python
# IGMPv2通用查询消息
igmp_query = b'\x01\x00\x5e\x00\x00\x01\x3f\x9c'  

# IGMPv2回复消息,表示加入组播组239.1.2.3
igmp_report = b'\x16\x04\x00\x01\x00\x5e\x00\x01\x02\x03'  

# 使用RAW Socket发送和接收IGMP消息
s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_IGMP)

s.sendto(igmp_query, ('224.0.0.1', 0))   # 发送通用查询
s.recvfrom(2048)  # 接收回复

s.sendto(igmp_report, ('224.0.0.22', 0)) # 发送回复报告加入组播组

IGMP协议是实现IP组播的基础,它允许网络设备管理组播组成员关系和组播路由信息,使我们可以利用IP组播这种高效点对多点的传播机制。