IGMP协议(因特网组管理协议称为Internet Group Management Protocol),是TCP/IP 协议族中负责IP组播成员管理的协议,它用来在IP主机和与其直接相邻的组播路由器之间建立、维护组播组成员关系。IP主机通过发送IGMP报文宣布加入某组播组;本地组播路由器通过周期性的发送IGMP 报文轮询本地网络上的主机,确定本地组播组成员信息。
网络节点之间通信,通常有三种方式,分别为单播、组播和广播,在IPv6版本中,新增加了一种方式称为任播。
1、单播(Unicast)
主机之间一对一的通讯模式,网络中的交换机和路由器对数据只进行转发不进行复制。由于其能够针对每个客户的及时响应,所以现在的网页浏览全部都是采用单播模式,具体的说就是IP单播协议。网络中的路由器和交换机根据其目标地址选择传输路径,将IP单播数据传送到其指定的目的地。
◎ 单播的优点:
1)服务器及时响应客户机的请求。
2)服务器针对每个客户不通的请求发送不通的数据,容易实现个性化服务。
◎ 单播的缺点:
1)服务器针对每个客户机发送数据流,服务器流量=客户机数量×客户机流量;在客户数量大、每个客户机流量大的流媒体应用中服务器不堪重负。
2)现有的网络带宽是金字塔结构,城际省际主干带宽仅仅相当于其所有用户带宽之和的5%。如果全部使用单播协议,将造成网络主干不堪重负。现在的P2P应用就已经使主干经常阻塞。而将主干扩展20倍几乎是不可能。
2、组播或多播(Multicast)
主机之间一对一组的通讯模式,也就是加入了同一个组的主机可以接受到此组内的所有数据,网络中的交换机和路由器只向有需求者复制并转发其所需数据。主机可以向路由器请求加入或退出某个组,网络中的路由器和交换机有选择的复制并传输数据,即只将组内数据传输给那些加入组的主机。这样既能一次将数据传输给多个有需要(加入组)的主机,又能保证不影响其他不需要(未加入组)的主机的其他通讯。
◎ 组播的优点:
1)需要相同数据流的客户端加入相同的组共享一条数据流,节省了服务器的负载。具备广播所具备的优点。
2)由于组播协议是根据接受者的需要对数据流进行复制转发,所以服务端的服务总带宽不受客户接入端带宽的限制。IP协议允许有2亿6千多万个组播,所以其提供的服务可以非常丰富。
3)此协议和单播协议一样允许在Internet宽带网上传输。
◎ 组播的缺点:
1)与单播协议相比没有纠错机制,发生丢包错包后难以弥补,但可以通过一定的容错机制和QOS加以弥补。
2)现行网络虽然都支持组播的传输,但在客户认证、QOS等方面还需要完善,这些缺点在理论上都有成熟的解决方案,只是需要逐步推广应用到现存网络当中。
3、广播(Broadcast)
主机之间一对所有的通讯模式,网络对其中每一台主机发出的信号都进行无条件复制并转发,所有主机都可以接收到所有信息(不管你是否需要),由于其不用路径选择,所以其网络成本可以很低廉。有线电视网就是典型的广播型网络,在数据网络中也允许广播的存在,但其被限制在二层交换机的局域网范围内,禁止广播数据穿过路由器,防止广播数据影响大面积的主机。
◎ 广播的优点:
1)网络设备简单,维护简单,布网成本低廉
2)由于服务器不用向每个客户机单独发送数据,所以服务器流量负载极低。
◎ 广播的缺点:
1)无法针对每个客户的要求和时间及时提供个性化服务。
2)网络允许服务器提供数据的带宽有限,客户端的最大带宽=服务总带宽。例如有线电视的客户端的线路支持100个频道(如果采用数字压缩技术,理论上可以提供500个频道),即使服务商有更大的财力配置更多的发送设备、改成光纤主干,也无法超过此极限。也就是说无法向众多客户提供更多样化、更加个性化的服务。
3)广播禁止允许在Internet宽带网上传输。
4、任播(Anycasting)
选择拓扑结构上最优的节点来进行信息传播。目前任播技术的定义不是十分清楚。
参考文献:
1、S Islam,JW Atwood.Multicast receiver access control by IGMP-AC.Computer Networks the International Journal of Computer & Telecommunications Networking, 2009, 53(7):989-1013
2、杜旭,张连靖,余江,陈峻巍.IGMP Snooping协议实现方案.计算机应用, 2004, 24(S1):14-15
IGMP协议是IP组播在末端网络上使用的主机对路由器的信令机制,分为两个功能部分:主机侧和路由器侧。
IGMP工作机制如下:
1、接收者主机向所在的共享网络报告组成员关系;
2、处于同一网段的所有使能了IGMP 功能的组播路由器选举出一台作为查询器,查询器周期性地向该共享网段发送组成员查询消息;
3、接收者主机接收到该查询消息后进行响应以报告组成员关系;
4、网段中的组播路由器依据接收到的响应来刷新组成员的存在信息。如果超时无响应,组播路由器就认为网段中没有该组播组的成员,从而取消相应的组播数据转发;
5、所有参与组播传输的接收者主机必须应用IGMP 协议,主机可以在任意时间、任意位置、成员总数不受限制地加入或退出组播组;
6、支持组播的路由器不需要也不可能保存所有主机的成员关系,它只是通过IGMP协议了解每个接口连接的网段上是否存在某个组播组的接收者,即组成员。而各主机只需要保存自己加入了哪些组播组。
IGMP可分为两个阶段:
1、当某个主机加入新的多播组时,该主机应向组播组的多播地址发送一个IGMP报文,声明自己要成为该组的成员。本地的多播路由器收到IGMP报文后,将组成员关系转发给因特网上的其他多播路由器。
2、因为组成员关系是动态的,因此本地多播路由器要周期性地探询本地局域网上的主机,以便知道这些主机是否还继续是组的成员。只要对某个组有一个主机响应,那么多播路由器就认为这个组是活跃的。但一个组在经过多次的探询后仍然没有一个主机响应,则多播路由器就认为本网络上的主机已经都离开这个组了因此就不再将该组的成员关系转发给其他的多播路由器。
IGMP为IP层的一部分。IGMP报文通过IP数据报进行传输。通当IP首部中协议字段值为2时即IGMP报文,IGMP有固定的报文长度8字节,没有可选数据。以IGMPv2为例,IGMP报文共有四个部分:
①类型:原版本和类型合并,其中值等于0x11为Membership query成员关系查询;0x12为IGMP v1Membership report,0x16为IGMP v2 Membership report(join),是两个版本的成员关系报告,0x17为IGMP v2 leave离开组消息.
②响应时间:规定在发送回应报告之前的最大延迟时间,最大响应时间缺省为10秒,1/10秒为单位。
③校验和字段
④组地址字段:32位D类IP地址。当向所有的组发出询问时,组地址字段就填零。当询问特定的组时,路由器就填入该组的组地址。主机发送成员关系的报告时填入自己的组地址。
多播路由器使用IGMP报文来记录与该路由器相连网络中组成员的变化情况。使用规则如下:
1、当第一个进程加入一个组时,主机就发送一个IGMP报告。如果一个主机的多个进程加入同一组,只发送一个IGMP报告。这个报告被发送到进程加入组所在的同一接口上。
2、进程离开一个组时,IGMP v1主机不发送IGMP报告,即便是组中的最后一个进程离开,IGMPv2发送报告。主机知道在确定的组中已不再有组成员后,在随后收到的IGMP查询中就不再发送报告报文。
3、多播路由器定时发送IGMP查询来了解是否还有任何主机包含有属于多播组的进程。多播路由器必须向每个接口发送一个IGMP查询。因为路由器希望主机对它加入的每个多播组均发回一个报告,因此IGMP查询报文中的组地址被设置为0。
4、主机通过发送IGMP报告来响应一个IGMP查询,对每个至少还包含一个进程的组均要发回IGMP报告。使用这些查询和报告报文,多播路由器对每个接口保持一个表,表中记录接口上至少还包含一个主机的多播组。当路由器收到要转发的多播数据报时,它只将该数据报转发到(使用相应的多播链路层地址)还拥有属于那个组主机的接口上。
目前IGMP共有三个版本,IGMPv1、IGMPv2和IGMPv3。
IGMPv1的工作过程:
1、组成员加入:主机发送IGMP成员关系报告,表示希望加入组播组。
2、查询与响应:PC2首先发送成员关系报告(目的地址224.0.0.1),IGMP查询器周期性地向子网内所有主机(224.0.0.1)发送成员关系查询信息。
3、响应抑制:PC2首先发送成员关系报告(目的地址224.0.0.1),IGMP查询器周期性地向子网内所有主机(224.0.0.1)发送成员关系查询信息,其他成员监听到报告后抑制报告发送。
4、组成员离开:主机悄悄离开组(不发送报告),路由器发送成员关系查询信息,路由器没有收到该组的IGMP报告,则再发送成员关系信息(共3次查询),3次查询仍没有收到响应,则路由器认为没有组播成员。
IGMPv2工作过程:
1、组成员加入:当一个主机加入一个组播组,则应该立即发送一个或多个成员关系报告给组播组。
2、查询与响应:与IGMPv1相同,存在抑制机制。但增加了最大响应时间。
3、查询器选举:路由器启动,主动发送到目的(224.0.0.1)的IGMPv2的常规查询信息,收到常规查询信息的路由器,比较信息的源IP地址和接收口的IP地址,低IP地址的路由器成为查询器。
4、组成员离开:主机向224.0.0.2发送离开组消息,路由器向这个组(224.1.1.1)发送特定组查询,在查询的最大响应时间内(默认为1秒)没有收到该组的报告,再次发送特定组查询,次特定组查询之后仍没有收到成员报告,则认为没有组播成员。