IP Multicasting

来源:互联网 发布:达内java培训 编辑:程序博客网 时间:2024/05/18 01:17
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

介绍IP组播基本概念的几个链接:
http://www.tcpipguide.com/free/t_IPMulticasting.htm
http://www.cisco.com/univercd/cc/td/doc/cisintwk/ito_doc/ipmulti.htm
http://www.cisco.com/univercd/cc/td/doc/product/software/ios121/121newft/121t/121t3/dtssm.htm#wp1026772

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

IP组播应用中的三个主要技术问题:
1. Multicast Addressing (组播编址方法)
2. Multicast Group Management (IGMP related) (有效的通知和交付机制)
3. Multicast Datagram Processing and Routing (有效的网络间转发工具)


Scope of IPv4 and IPv6 multicast addresses


* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

(转载)
组播报文基于组的概念,它的接收对象是特定组的主机。想接收组播数据的主机需要利用IGMP报文申明加入某个组播组。
组播报文采用D类地址,即开头为1110的IP地址,范围是224.0.0.0 - 239.255.255.255,映射到01 00 5e 00 00 00 - 01 00 5e 7f ff ff的MAC地址上面。组播地址只可用作目的地址。
一般情况下,网卡只接收MAC地址与自身匹配或者广播地址的数据包,但在802.3标准中,定义了MAC地址的第一个字节的最低位用来指示是否一个组播/广播数据包。标记为组播/广播数据包的仍然会被网卡接收处理。

那为什么我的主机没有申请加入任何组播组,却仍然截获了组播报文呢?原来二层交换机默认会把需要转发的组播包转发给子网内的所有机器,这使得组播机制有名无实。 在二层交换机中一般会采用CGMP或者IGMP Snooping来弥补这一点,前者是Cisco的专有技术,后者是IEEE标准。如果一个交换机启用IGMP Snooping,它会在每个组播包进入交换机之后,解析报文头,如果它是一帧IGMP报文,则按照报文的内容将连接该主机的端口保存到组播表或者从中删除。如果是普通的组播包,则根据设备里保存的组播表进行转发。因为二层交换机不能直接区分IGMP和普通组播包,所以对于每个广播/组播包都要执行这样的检查,在低端设备中通常在软件上实现,对交换速度有很大影响。高端设备采用专用的ASIC,在硬件里实现。
(转载)

CGMP和IGMP Snooping的区别(在IGMPv2中)
两者都是为了解决二层switch转发多播包时的效率问题。
在实现上两者的主要区别在于在何处解析IGMP包的内容。
在CGMP 的实现中,是由multicast router在收到某主机通过switch传过来的IGMP report时,发送一条CGMP join消息给switch, switch收到后会把该主机的相关信息加入到对应多播组的content addressable memory (CAM) table里。
在IGMP Snooping中,解析IGMP包的工作是在二层switch上做的。switch会检查所有通过它外发的多播包,分辨其中的IGMP report消息并在收到该类消息时把发送的主机的信息保存到对应组的table entry里。
由于IGMP Snooping的实现中,switch需要检查所有的多播包,所以在数据吞吐量很大时会对switch的性能有很大影响,所以IGMP Snooping技术一般只实现在高端的switch中。而CGMP技术可以被应用在低端的switch中。关于二者的更详尽的阐述可参考本文的第二个链接。

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

IGMP和组播编址方法指定了主机怎样和本地路由器交互,如何通过单个网络传送组播数据报,但没有指定路由器怎样交换群组成员信息,或者怎样确保每个数据报的副本能够到达所有群组成员。

常规转发/选路和组播转发/选路的区别
  • 在单播选路中,只有当拓扑结构改变或设备出故障时才会发生路由改变;而组播路由则不同,应用程序加入或退出一个组播群组就会发生组播路由的变化。
  • 组播转发需要路由器检查多个目的网络。
  • 组播数据报可以从非组播群组成员的计算机上发起,并且可以路由通过没有任何组播成员的网络。

基本组播选路:
因为组播目的代表了一个计算机集合,最佳转发系统将使数据报到达该集合中的所有成员,并且一个数据报不会两次通过同一个网络。
为了避免选路环路,组播路由器必须依靠数据报的源地址。

当进行转发决策时,组播路由器使用了数据报的源地址和目的地址。
基本转发机制称为截尾反向路径转发(TRPF - Truncated Reverse Path Forwarding)
组播选路的一种最早形式是从TRPF派生的,称为反向路径组播RPM(Reverse Path Multicasting)
最早的组播选路协议之一是矢量距离组播选路协议DVMRP(Distance Vector Multicast Routing Protocol). mrouted是在UNIX下实现DVMRP的著名程序。

DVMRP的局限性意味着他从规模上无法处理大量路由器、更大量的组播群组或者成员关系的迅速变化。因此其不适合作为Internet的通用组播选路协议。
为克服DVMRP的局限性,IETF研究了其他一些组播协议:
  • 核心基干树CBT(Core Based Trees)
  • 协议无关组播PIM(Protocol Independent Multicast)
  • OSPF组播扩展(MOSPF)

Multicast Distribution Trees:
Multicast router会创建multicast distribution trees来控制发送traffic的路径。
一般会有两种建立分布树的算法:Source Trees 和 Shared Trees。
详尽的阐述参考本文第二个链接。

组播转发树被定义为一系列通过组播路由器的路径,这些路径从源站到组播群组的所有成员。对于某组播群组,每个可能的数据报源都能确定一个不同的转发树。

组播选路的实质:
成员关系问题是选路的核心 - 所有组播选路方法都提供了一种传播成员信息的机制,还提供了转发数据报时使用该信息的方式。
一般来讲,因为成员关系会迅速改变,从给定路由器可得到的信息是不完整的,因此选路可能滞后于变化。所以,组播设计代表了选路通信量超载和低效数据传输之间的一种折衷。

可靠组播和ACK内爆(ACK implosion):
可靠组播(reliable multicast)指的是这样的系统:使用组播交付并能够保证所有群组成员收到按序到达、无丢失、无重复且未遭破坏的数据。
为了避免ACK内爆问题,可靠组播方法或者使用确认点层次结构,或者发送冗余信息。

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
原创粉丝点击