【转载】组播及igmp/mld协议详解(一)
版权声明:本文为CSDN博主「xinyuan0214」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/xinyuan510214/article/details/51361930
组播和IGMP的作用 --------------------------------- 所谓组播,与单播和广播相对,是指将网络主机将一次将数据发给多个属于同一组的目标主机。主要使用了IGMP协议。 IGMP,就是Internet Group Management Protocol的意思。该协议用来 在ip主机和与其直接相邻的组播路由器之间建立、维护组播组成员关系,但不包括组播路由器之间的组成员关系信息的传播与维护,这部分工作由各组播路由协议完成。所有参与组播的主机必须实现IGMP。
组播的报文 ---------------------------------- 组播使用了D类IP地址,IP地址的分类如下所示,可见D类地址范围在224.0.0.0到239.255.255.255。
注意,多播地址224.0.0.1被称为所有主机组地址,即所有具有组播能力的主机均会加入该组。 IGMP作为TCP/IP第三层的协议,被封装在IP数据包中进行传输。IGMP的报文格式是固定的,共8个字节,如下图所示。
其中的IGMP类型分两种:1表示该报文是组播路由器发出的查询报文,2表示是IP主机发出的报告。后面的4个字节则是组播地址。 组播的过程 ----------------------------------- 一个典型的过程是这样的: 1. IP主机的一个进程可随时加入和离开主机接口的一个组播组,该主机需要维护接口的一张表,该表包含了有那些组以及这些组中的进程数量。此时主机需要发送一个IGMP报告 2. 路由器会定时发送IGMP查询报文,此时报文中的组地址为0 3. IP主机回应路由器的IGMP查询报文,对于一个主机,如果它加入了多个组,则需要为每个组返回一个IGMP报告。 4. 路由器根据这些信息,会对每个接口维护一张表,表中说明了该接口的组。 这个过程中的报文,可见下图 IGMP 版本说明
目前有三个版本:
IGMP v1,支持host membership query 和host membership report。
IGMP v2,支持membership query,membership report,Leave Group message 。
IGMP v3,支持membership report 和membershipquery。
其中MembershipQuery分为三种:General Query,用于查询接口下所有多播成员信息;Group-Specific Query,用于查询接口下指定组的成员信息; Group-and-Source-Specific Query,该类型为IGMPv3中新增加的,用于查询接口下是否有成员需要接收指定源列表中的源所发出的特定组的多播流。
区别是:
IGMPv1 :主机可以加入组播组。没有离开信息(leave messages)。路由器使用基于超时的机制去发现其成员不关注的组。
IGMPv2:该协议包含了离开信息,允许迅速向路由协议报告组成员终止情况,这对高带宽组播组或易变型组播组成员而言是非常重要的。
IGMPv3:与以上两种协议相比,该协议的主要改动为:允许主机指定它要接收通信流量的主机对象。来自网络中其它主机的流量是被隔离的。 IGMPv3 也支持主机阻止那些来自于非要求的主机发送的网络数据包。
简而言之:IGMP 各版本区别v1无离开信息,v2有离开信息,v3允许主机指定它要接收通信流量的主机对象。IGMPSnooping(窥探)监听IGMP协议包,形成组播成员关系表;IGMP Proxy(代理)是靠拦截用户和路由器之间的IGMP报文建立组播表。