使用MulticastSocket实现多点广播

组播协议允许将一台主机发送的数据通过网络路由器和交换机复制到多个加入此组播的主机,是一种一对多的通讯方式。

IP组播的好处、优势

组播协议与现在广泛使用的单播协议的不同之处在于,一个主机用单播协议向n个主机发送相同的数据时,发送主机需要分别向n个主机发送,共发送n次。一个主机用组播协议向n个主机发送相同的数据时,只要发送1次,其数据由网络中的路由器和交换机逐级进行复制并发送给各个接收方,这样既节省服务器资源也节省网络主干的带宽资源。

与广播协议相比,只有组播接收方向路由器发出请求后,网络路由器才复制一份数据给接收方,从而节省接收方的带宽。而广播方式无论接收方是否需要,网络设备都将所有广播信息向所有设备发送,从而大量占据接收方的接入带宽。

IP组播历史

1980年代初斯坦福大学的一位博士生叫Steve Deering,在为其导师David Cheriton工作,设计一种叫做Vsystem的分布式操作系统。此操作系统允许一台计算机使用MAC层组播向在本地Ethernet段的一组其他计算机传递信息。

随着工作的扩展组播必须跨越路由器,所以必须将组播扩展到OSI模型的第三层,此历史重任落到了Steve Deering身上,他总结了组播路由的通信协议基础,并最终在199112月发表的博士论文中进行了详细的阐述。

组播协议的优势:

组播协议的优势在于当需要将大量相同的数据传输到不通主机时,

1.能节省发送数据的主机的系统资源和带宽;

2.组播是有选择地复制给又要求的主机;

3. 组播可以穿越公网广泛传播,而广播则只能在局域网或专门的广播网内部传播;

4. 组播能节省网络主干的带宽;

组播协议的缺点:

与单播协议相比,组播没有补包机制,因为组播采用的是UTP的传输方式,并且不是针对一个接受者,所以无法有针对的进行补包。所以直接组播协议传输的数据是不可靠的。

二、为什么宽带网必须使用组播协议

自从上世纪末长城宽带壮烈的宽带推广运动以来,宽带网一直面临种种问题,但这些问题归结起来就是一个问题,那就是客户端得不到与其接入带宽相称的足够的数据流。

最早的长城宽带面临的是“宽带无内容”的问题,客户得不到其承诺的视频点播等宽带娱乐,于是投诉、退户甚至诉诸法律。

电信凭借其雄厚的财力和电话线资源后来居上,但很快又面临网速慢、缺内容的投诉,电信网站上的视频点播似乎总是无尽的等待和缓冲。后来P2P软件的出现使得某些比较专业的用户似乎看到了希望,他们用BT、电驴等软件互传电影等娱乐信息也凑合了。没多久电信和网通就高举着和他们没什么关系的版权大旗封杀了BT、电驴等软件。

所有这些都是源于现在宽带网的“上下非对称”的金字塔结构,也就是网络主干的带宽远远小于所有用户带宽之和,但现在网络使用的单播通讯协议却要求网络主干的带宽等于或接近所有用户带宽之和。现在的状况是一个城市或省的网络出口主干的带宽大约相当于其所有客户带宽之和的5%,也就是说假如有5%的客户用BT软件通过网络全速传输数据,那其余95%的客户就不要玩了。现在电信主干上的流量的75%都是P2P应用的流量,已经超过了电信所能承受的极限。

那么采用CDN技术,将网络内容在城域网内就近缓冲行不行呢?答案是:技术上可行经济上行不通。其需要的服务器是一个巨大的天文数字。现在的大中城市的宽带网用户数量都在20万以上,以此数量来计算光购置CDN服务器就需要2亿元左右!这就是为什么电信不用CDN技术来满足客户需求的原因。所以在服务器的服务能力和客户机的需求上也存在着严重的上下非对称结构。

那么这个死结是不是没法解开呢?当然不是,组播协议的数据流特点就是“上下非对称”的,也就是说,在网络主干上的一条数据流通过每层交换机的复制可以变成无数客户端的数据流,形成客户端数据流之和远大于主干数据流的金字塔结构。这一特点正好与现在的网络结构相符。所以说,基于组播协议的流媒体宽带娱乐可以解决这一问题。

举例来说,使用基于组播协议的直播系统可以用一台服务器支持数万客户收看一个或几个频道的网上电视直播。假设一共提供100个频道的电视节目,每个频道是1M的MPEG4高清晰码流,则无论有1万客户还是100万客户,其占用的网络主干都是100M,而3~5台服务器硬件的投资不到100万。

使用MulticastSocket实现多点广播

DatagramSocket只允许数据报发送给指定的目标地址,而MulticastSocket可以将数据报以广播的方式发送到多个客户端

若要使用多点广播,则需要让一个数据报标有一组目标主机地址,当数据报发出后,整个组的所有所有主机都能收到该数据报。IP多点广播(或多点发送)实现了将单一信息发送到多个接受者的广播,其思想是设置一组特殊网络地址作为多点广播地址,每一个多点广播地址都被看做一个组,当客户端需要发送、接收广播信息时,加入到改组即可。

MulticastSocket既可以将数据报发送到多点广播地址,也可以接收其他主机的广播信息。

MulticastSocket有点像DatagramSocket,事实上MulitcastSocket是DatagramSocket的一个子类,当要发送一个数据报时,可以使用随机端口创建一个MulticastSocket,也可以在指定端口创建MulticastSocket。MulticastSocket提供了如下3个构造器。

1、MulticastSocket():使用本机默认地址、随机端口来创建MulticastSocket对象

2、MulticastSocket(int portNumber)使用本机默认地址、指定端口来创建对象

3、MulticastSocket(SocketAddress bindaddr):使用本机指定IP地址、指定端口来创建对象

 

创建MulticastSocket对象后,还需要将该MulticastSocket加入到指定的多点广播地址,MulticastSocket使用joinGroup()方法加入指定组;使用leaveGroup()方法脱离一个组。

1、joinGroup(InetAddress multicastAddr):将该MulticastSocket加入指定的多点广播地址。

2、leaveGroup(InetAddress multicastAddr):让该MulticastSocket离开指定的多点广播地址。

 

应用程序只将数据报包发送给组播地址,路由器将确保包被发送到改组播组中的所有主机。
组播地址:称为组播组的一组主机所共享的地址。组播地址的范围在224.0.0.0--- 239.255.255.255之间(都为D类地址 1110开头)。 

备注:如果现在有三台机器A、B、C,三台机器IP地址都不一样,A\B为server监听广播消息,C为客户端发送广播消息,个人理解是将A、B两台机器的MulticastSocket对象绑定在组播地址中的其中一个,然后C客户端发送消息的组播地址一致,则A、B就能够接收C发送的消息。

 

如果MulticastSocket用于接收信息则使用默认地址和随机端口即可,但是如果用来接收信息,则必须要指定端口,否则发送方无法确定发送数据报的目标端口。

package hb.brodcast;
import java.net.DatagramPacket;
import java.net.InetAddress;
import java.net.MulticastSocket;
public class MulticastListener {
private int port;
private String host;
public MulticastListener(String host, int port) {
this.host = host;
this.port = port;
}
public void listen() {
byte[] data = new byte[256];
try {
InetAddress ip = InetAddress.getByName(this.host);
MulticastSocket ms = new MulticastSocket(this.port);
ms.joinGroup(ip);
DatagramPacket packet = new DatagramPacket(data, data.length);
//receive()是阻塞方法,会等待客户端发送过来的信息
ms.receive(packet);
String message = new String(packet.getData(), 0, packet.getLength());
System.out.println(message);
ms.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
int port = 1234;
String host = "224.0.0.1";
MulticastListener ml = new MulticastListener(host, port);
while (true) {
ml.listen();
}
}
}

package hb.brodcast;
import java.net.DatagramPacket;
import java.net.InetAddress;
import java.net.MulticastSocket;
public class MulticastSender {
private int port;
private String host;
private String data;
public MulticastSender(String data, String host, int port) {
this.data = data;
this.host = host;
this.port = port;
}
public void send() {
try {
InetAddress ip = InetAddress.getByName(this.host);
DatagramPacket packet = new DatagramPacket(this.data.getBytes(), this.data.length(), ip, this.port);
MulticastSocket ms = new MulticastSocket();
ms.send(packet);
ms.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
int port = 1234;
String host = "224.0.0.1";
String data = "hello world.";
System.out.println(data);
MulticastSender ms = new MulticastSender(data, host, port);
ms.send();
}
}
MulticastSocket用于发送、接收数据报的方法与DatagramSocket完全一样。但MulticastSocket比DatagramSocket多了一个setTimeToLive(int ttl)方法,该ttl参数用于设置数据报最多可以跨过多少个网络,当ttl的值为0时,指定数据报应停留在本地主机;当ttl的值为1时,指定数据报发送到本地局域网;当ttl的值为32时,意味着只能发送到本站点的网络上;当ttl的值为64时,意味着数据报应保留在本地区;当ttl的值为128时,意味着数据报应保留在本大洲;当ttl的值为255时,意味着数据报可发送到所有地方;在默认情况下,该ttl的值为1。

 

原文链接:http://hbiao68.iteye.com/blog/1943354

 

组播的地址是保留的D类地址从224.0.0.0—239.255.255.255,而且一些地址有特定的用处如,224.0.0.0—244.0.0.255只能用于局域网中路由器是不会转发的,并且224.0.0.1是所有主机的地址,224.0.0.2所有路由器的地址,224.0.0.5所有ospf路由器的地址,224.0.13事PIMv2路由器的地址;239.0.0.0—239.255.255.255是私有地址(如192.168.x..x);224.0.1.0—238.255.255.255可以用与Internet上的。

2层的MAC地址是如何与3层的IP地址进行映射的呢?通过将MAC地址的前25位强行规定位0100.5e,而后23位对应IP地址的后23位,而组播IP地址的前4位均相同如:

IP地址: 1110yyyy.yxxxxxxx.xxxxxxx.xxxxxxxx

MAC地址: 00000001.00000000.01011110.0xxxxxxx.xxxxxxx.xxxxxxxx

显然有32个IP地址(有5个y可以不一样)对应一个MAC地址,所以要避免在同一网络中使用的多个组播IP地址对应一个MAC地址。

 

组播报文的目的地址使用D类IP地址, D类地址不能出现在IP报文的源IP地址字段。单播数据传输过程中,一个数据包传输的路径是从源地址路由到目的地址,利用“逐跳”的原理在IP网络中传输。然而在ip组播环中,数据包的目的地址不是一个,而是一组,形成组地址。所有的信息接收者都加入到一个组内,并且一旦加入之后,流向组地址的数据立即开始向接收者传输,组中的所有成员都能接收到数据包。组播组中的成员是动态的,主机可以在任何时刻加入和离开组播组。

------------------

当前的网络中有三种通讯模式:单播、广播、组播(多播),其中的组播出现时间最晚但同时具备单播和广播的优点,最具有发展前景。

一、单播:

主机之间“一对一”的通讯模式,网络中的交换机和路由器对数据只进行转发不进行复制。如果10个客户机需要相同的数据,则服务器需要逐一传送,重复10次相同的工作。但由于其能够针对每个客户的及时响应,所以现在的网页浏览全部都是采用IP单播协议。网络中的路由器和交换机根据其目标地址选择传输路径,将IP单播数据传送到其指定的目的地。
单播的优点:

1. 服务器及时响应客户机的请求

2. 服务器针对每个客户不通的请求发送不通的数据,容易实现个性化服务。

单播的缺点:

1. 服务器针对每个客户机发送数据流,服务器流量=客户机数量×客户机流量;在客户数量大、每个客户机流量大的流媒体应用中服务器不堪重负。

2. 现有的网络带宽是金字塔结构,城际省际主干带宽仅仅相当于其所有用户带宽之和的5%。如果全部使用单播协议,将造成网络主干不堪重负。现在的P2P应用就已经使主干经常阻塞,只要有5%的客户在全速使用网络,其他人就不要玩了。而将主干扩展20倍几乎是不可能。

二、 广播:

主机之间“一对所有”的通讯模式,网络对其中每一台主机发出的信号都进行无条件复制并转发,所有主机都可以接收到所有信息(不管你是否需要),由于其不用路径选择,所以其网络成本可以很低廉。有线电视网就是典型的广播型网络,我们的电视机实际上是接受到所有频道的信号,但只将一个频道的信号还原成画面。在数据网络中也允许广播的存在,但其被限制在二层交换机的局域网范围内,禁止广播数据穿过路由器,防止广播数据影响大面积的主机。
广播的优点:

1. 网络设备简单,维护简单,布网成本低廉

2. 由于服务器不用向每个客户机单独发送数据,所以服务器流量负载极低。

广播的缺点:

1.无法针对每个客户的要求和时间及时提供个性化服务。

2. 网络允许服务器提供数据的带宽有限,客户端的最大带宽=服务总带宽。例如有线电视的客户端的线路支持100个频道(如果采用数字压缩技术,理论上可以提供500个频道),即使服务商有更大的财力配置更多的发送设备、改成光纤主干,也无法超过此极限。也就是说无法向众多客户提供更多样化、更加个性化的服务。

3. 广播禁止在Internet宽带网上传输。

三、组播:

主机之间“一对一组”的通讯模式,也就是加入了同一个组的主机可以接受到此组内的所有数据,网络中的交换机和路由器只向有需求者复制并转发其所需数据。主机可以向路由器请求加入或退出某个组,网络中的路由器和交换机有选择的复制并传输数据,即只将组内数据传输给那些加入组的主机。这样既能一次将数据传输给多个有需要(加入组)的主机,又能保证不影响其他不需要(未加入组)的主机的其他通讯。
组播的优点:

1. 需要相同数据流的客户端加入相同的组共享一条数据流,节省了服务器的负载。具备广播所具备的优点。

2. 由于组播协议是根据接受者的需要对数据流进行复制转发,所以服务端的服务总带宽不受客户接入端带宽的限制。IP协议允许有2亿6千多万个(268435456)组播,所以其提供的服务可以非常丰富。

3. 此协议和单播协议一样允许在Internet宽带网上传输。

组播的缺点:

1.与单播协议相比没有纠错机制,发生丢包错包后难以弥补,但可以通过一定的容错机制和QOS加以弥补。

2.现行网络虽然都支持组播的传输,但在客户认证、QOS等方面还需要完善,这些缺点在理论上都有成熟的解决方案,只是需要逐步推广应用到现存网络当中。

 

---------------

IP组播路由协议详细介绍

一、概述
1、组播技术引入的必要性
随着宽带多媒体网络的不断发展,各种宽带网络应用层出不穷。IP TV、视频会议、数据和资料分发、网络音频应用、网络视频应用、多媒体远程教育等宽带应用都对现有宽带多媒体网络的承载能力提出了挑战。采用单播技术构建的传统网络已经无法满足新兴宽带网络应用在带宽和网络服务质量方面的要求,随之而来的是网络延时、数据丢失等等问题。此时通过引入IP组播技术,有助于解决以上问题。组播网络中,即使组播用户数量成倍增长,骨干网络中网络带宽也无需增加。简单来说,成百上千的组播应用用户和一个组播应用用户消耗的骨干网带宽是一样的,从而最大限度的解决目前宽带应用对带宽和网络服务质量的要求。

2、IP网络数据传输方式
组播技术是IP网络数据传输三种方式之一,在介绍IP组播技术之前,先对IP网络数据传输的单播、组播和广播方式做一个简单的介绍:

单播(Unicast)传输:在发送者和每一接收者之间实现点对点网络连接。 如果一台发送者同时给多个的接收者传输相同的数据,也必须相应的复制多份的相同数据包。如果有大量主机希望获得数据包的同一份拷贝时, 将导致发送者负担沉重、延迟长、网络拥塞;为保证一定的服务质量需增加硬件和带宽。

组播(Multicast)传输:在发送者和每一接收者之间实现点对多点网络连接。 如果一台发送者同时给多个的接收者传输相同的数据,也只需复制一份的相同数据包。它提高了数据传送效率。减少了骨干网络出现拥塞的可能性。

广播(Broadcast)传输:是指在IP子网内广播数据包,所有在子网内部的主机都将收到这些数据包。 广播意味着网络向子网每一个主机都投递一份数据包,不论这些主机是否乐于接收该数据包。所以广播的使用范围非常小, 只在本地子网内有效,通过路由器和交换机网络设备控制广播传输。

二、组播技术
1、 IP组播技术体系结构
组播协议分为主机-路由器之间的组成员关系协议和路由器-路由器之间的组播路由协议。组成员关系协议包括IGMP(互连网组管理协议)。组播路由协议分为域内组播路由协议及域间组播路由协议。域内组播路由协议包括PIM-SM、PIM-DM、DVMRP等协议,域间组播路由协议包括MBGP、MSDP等协议。同时为了有效抑制组播数据在链路层的扩散,引入了IGMP Snooping、CGMP等二层组播协议。
IGMP建立并且维护路由器直联网段的组成员关系信息。域内组播路由协议根据IGMP维护的这些组播组成员关系信息,运用一定的组播路由算法构造组播分发树进行组播数据包转发。域间组播路由协议在各自治域间发布具有组播能力的路由信息以及组播源信息,以使组播数据在域间进行转发。

2、 组播IP地址
组播IP地址用于标识一个IP组播组。IANA把D类地址空间分配给IP组播,其范围是从224.0.0.0到239.255.255.255。如下图所示(二进制表示),IP组播地址前四位均为1110。
八位组(1) 八位组(2) 八位组(3) 八位组(4)
1110XXXX XXXXXXXX XXXXXXXX XXXXXXXX

3、 组成员关系协议 (IGMP)
IGMP协议运行于主机和与主机直接相连的组播路由器之间,主机通过此协议告诉本地路由器希望加入并接受某个特定组播组的信息,同时路由器通过此协议周期性地查询局域网内某个已知组的成员是否处于活动状态(即该网段是否仍有属于某个组播组的成员),实现所连网络组成员关系的收集与维护。
IGMP有三个版本,IGMPv1由RFC1112定义,目前通用的是IGMPv2,由RFC2236定义。IGMPv3目前仍然是一个草案。IGMPv1中定义了基本的组成员查询和报告过程,IGMPv2在此基础上添加了组成员快速离开的机制,IGMPv3中增加的主要功能是成员可以指定接收或指定不接收某些组播源的报文。这里着重介绍IGMPv2协议的功能。
IGMPv2通过查询器选举机制为所连网段选举唯一的查询器。查询器周期性的发送普遍组查询消息进行成员关系查询;主机发送报告消息来应答查询。当要加入组播组时,主机不必等待查询消息,主动发送报告消息。当要离开组播组时,主机发送离开组消息;收到离开组消息后,查询器发送特定组查询消息来确定是否所有组成员都已离开。
通过上述IGMP机制,在组播路由器里建立起一张表,其中包含路由器的各个端口以及在端口所对应的子网上都有哪些组的成员。当路由器接收到某个组G的数据报文后,只向那些有G的成员的端口上转发数据报文。至于数据报文在路由器之间如何转发则由路由协议决定,IGMP协议并不负责。

4、 网络二层组播相关协议
网络二层组播相关协议包括IGMP Snooping ,IGMP Proxy和CGMP协议。
IGMP Snooping的实现机理是:交换机通过侦听主机发向路由器的IGMP

成员报告消息的方式,形成组成员和交换机接口的对应关系;交换机根据该对应关系将收到组播数据包只转给具有组成员的接口。
IGMP Proxy与IGMP Snooping实现功能相同但机理相异:IGMP snooping只是通过侦听IGMP的消息来获取有关信息,而IGMP Proxy则拦截了终端用户的IGMP请求并进行相关处理后,再将它转发给上层路由器。
CGMP(Cisco Group Management Protocol)是Cisco基于客户机/服务器模型开发的私有协议,在CGMP的支持下,组播路由器能够根据接收到的IGMP数据包通知交换机哪些主机何时加入和脱离组播组,交换机利用由这些信息所构建的转发表来确定将组播数据包向哪些接口转发。GMRP是主机到以太网交换机的标准协议,它使组播用户可以在第二层交换机上对组播成员进行注册。

5、 组播路由协议 (PIM-SM)
众多的组播路由协议中,目前应用最多的协议是 PIM-SM稀疏模式协议无关组播。
在PIM-SM域中,运行PIM-SM协议的路由器周期性的发送Hello消息,用以发现邻接的PIM路由器,并且负责在多路访问网络中进行指定路由器(DR)的选举。这里,DR负责为其直连组成员朝着组播分发树根节点的方向发送"加入/剪枝"消息,或是将直连组播源的数据发向组播分发树。
什么是组播 - Liuqz - liuqz926 的博客

PIM-SM显式的加入机制

PIM-SM通过建立组播分发树来进行组播数据包的转发。组播分发树分为两种:以组G的RP为根的共享树(Shared Tree)和以组播源为根的最短路径树(Shortest Path Tree)。

PIM-SM通过显式的加入/剪枝机制来完成组播分发树的建立与维护。如上图所示:

当DR收到一个发自接收端的加入(Join),它就会向着组G的RP方向逐跳组播发出一个(*,G)加入信息用以加入共享树;

源主机向组发送组播数据时,源的数据被封装在注册消息内,并由其DR 单播至RP,RP再将源的解封装数据包沿着共享树转发到各个组成员;

RP朝着源方向向第一跳路由器发送(S,G)加入信息,用以加入此源的最短路径树,这样源的数据包将沿着其最短路径树不加封装地发送到RP;

当第一个组播数据沿此树到达时,RP向源的DR发送注册-停止消息,以使DR停止注册封装过程。此后,这个源的组播数据不再注册封装,而是先沿着源的最短路径树发送到RP,再由RP 将其沿着共享树转发到各个组成员。

当不再需要组播数据时,DR向着组G的RP逐跳组播剪枝消息用以剪枝共享树。
PIM-SM中还涉及到其根节点RP的选择机制。PIM-SM域内配置了一个或多个候选自举路由器(Candidate-BSR)。应用一定的规则从中选出自举路由器(BSR)。PIM-SM域中还配置了候选 RP路由器(Candidate-RP),这些候选 RP将包含了它们地址及可以服务的组播组等信息的包单播至自举路由器。BSR 定期生成包括一系列候选 RP以及相应的组地址的"自举"消息。"自举"消息在整个域中逐跳发送。路由器接收并保存这些"自举"消息。若 DR 从直连主机收到了某组的成员关系报告后,如果它没有这个组的路由项,DR 将使用一个hash算法将组地址映射至一个可以为该组服务的候选 RP。然后 DR 将朝RP方向逐跳组播"加入/剪枝"消息。若 DR从直连主机收到组播数据包,如果它没有这个组的路由项,DR 将使用hash算法将组地址映射至一个可以为该组服务的候选 RP。然后 DR将组播数据封装在注册消息中单播到RP。

五、IP组播地址

组播协议的地址在IP协议中属于D类地址。
D类地址是从224.0.0.0到239.255.255.255之间的IP地址其中224.0.0.0到224.0.0.255是被保留的地址。

组播协议的地址范围类似于一般的单播地址,被划分为两个大的地址范围,

239.0.0.0—239.255.255.255是私有地址,供各个内部网在内部使用,这个地址的组播不能上公网,类似于单播协议使用的192.168.X.X和10.X.X.X。

224.0.1.0—238.255.255.255是公用的组播地址,可以用于Internet上。

下面是一些常见的有特殊用途的IP组播地址

224.0.0.0 - Base address

224.0.0.1 - 网段中所有支持多播的主机

224.0.0.2 - 网段中所有支持多播的路由器

224.0.0.4 - 网段中所有的DVMRP路由器

224.0.0.5 - 所有的OSPF路由器

224.0.0.6 - 所有的OSPF指派路由器

224.0.0.7 - 所有的ST路由器

224.0.0.8 - 所有的ST主机

224.0.0.9 - 所有RIPv2路由器

224.0.0.10 - 网段中所有支的路由器

224.0.0.11 - Mobile-Agents

224.0.0.12 - DHCP server / relay agent服务专用地址

224.0.0.13 - 所有的PIM路由器

224.0.0.22 - 所有的IGMP路由器

224.0.0.251 - 所有的支持组播的DNS服务器

224.0.0.9 RIPv2支持组播更新。

224.0.0.22 IGMPv2使用此地址,这个协议的本意是减少广播,让组员以组播形式通信。

224.0.0.5 224.0.0.6这两个是ospf协议使用的组播地址。

在broadcast network不论是DR,BDR,DRother,大家发送hello packet的时候目标地址都是AllSPFRouter(224.0.0.5);DRother向DR,BDR发送DD,LSA request或者LSA UPdate时目标地址是AllDRouter(224.0.0.6);DR,BDR向DRother发送DD,LSA Request或者LSA Update时目标地址是AllSPFRouter(224.0.0.5);retransmit的LSA都是unicast,LSA ACK要看是explicit ack(unicast)还是implicit ack(multicast 224.0.0.6);

组播IP地址与以太网二层MAC地址的映射:

IP组播地址用于标识一个IP组播组。IANA把D类地址空间分配给IP组播,范围从224.0.0.0到239.255.255.255,IP组播地址前四位均为1110。

从224.0.0.0至224.0.0.255被IANA保留为网络协议使用。例如:244.0.0.1 全主机组244.0.0.2 全多播路由器组244.0.0.3全DVMRP路由器组244.0.0.5 全OSPF路由器组。在这一范围的多播包不会被转发出本地网络,也不会考虑多播包的TTL值。

地址从239.0.0.0至239.255.255.255作为管理范围地址,保留为私有内部域使用。

如下图所示,以太网和FDDI的MAC地址01:00:5E:00:00:00到01:00:5E:7F:FF:FF用于将三层IP组播地址映射为二层地址,即IP组播地址中的低23位放入IEEE MAC地址的低23位。IP组播地址有28位地址空间,但只有23位被映射到IEEE MAC地址,这样会有32个IP组播地址映射到同一MAC地址上。

什么是组播 - Liuqz - liuqz926 的博客

六、如何构建支持组播协议的校园网

一、 在校园网中构建支持组播协议的网络需要注意几点

1. 中心的三层交换机要支持组播协议(建议采用PIM稀疏SM模式)。

2. 直接连接三层交换机的汇聚层的二层交换机需要支持IGMP SNOOPING协议,一般的智能或带网管的交换机都具有此功能。需要注意的是二层交换机的处理能力,IGMP侦听需要消耗交换机的处理能力,所以有些处理能力较差的二层交换机在数据流量较小的时候IGMP侦听能够做的很好的,一但数据流量较大时就侦听不到的情况,导致用户无法正常加入组播。

3. 最下级的接入层交换机最好用智能交换机,出于经济上的考虑也可以用一般的傻交换机。但决不能用古老的共享式HUB集线器,因为共享式HUB会严重影响其他客户机的通讯。

4. 组播视频服务器最好直接连接核心的三层交换机,中间不要通过二层交换机级连。

5. 用我们下载页面提供的组播测试工具测试组播协议是否连通。

6. 具体的组播原理和配置,请到下载页面下载组播原理和配置的资料包

7. 一个简化的拓扑结构如下图所示:

什么是组播 - Liuqz - liuqz926 的博客

二、 关于防火墙问题

我们的建议是将组播协议的数据流旁路绕过防火墙,即连接一条不经过防火墙的链路,并在端口地址列表中只允许组播地址的数据包通过;或在防火墙内部设定透明穿透bypass,即对于组播地址的数据包不作分析处理,直接转发。其考虑基于如下几点:

1. 现在网络中使用的防火墙种类繁多、性能各异。但总体上来说对于处理视频信息这样的巨大流量都是力不从心的。

2. 组播数据流是非连接的UTP,而且需要客户机自己加入组播才能收到组播,所以发送数据者无通过组播定位攻击,目前为止还未出现以组播为载体的病毒和黑客程序。

三、关于收费网关问题

收费网关一般位于最后的组播复制节点的更上层,所以通过原有的BAS收费网关系统对组播数据流进行复制是不现实的,一般是将组播数据流绕过现有的BAS收费网关,用另外的方式收费,解决方式有几种:

1. 采用可控组播协议的方式,现在的华为、中兴的交换机都支持此技术。

2. 采用包月计费的方式。

3. 采用免费收看用广告赚取收入的方式。

如何构建支持组播协议的城域网

城域网的主干一般采用Ethernet over SDH,或直接采用以太网,他们支持IP组播问题不大。难点在于最后一公里的接入网部分,接入网有两种主流技术,以太网和ADSL,其中以太网接入很容易开通组播。

但是现在电信公网的接入以ADSL为主,ADSL的物理基础是ATM,所以其原本是不支持IP组播的,通过后来的一些技术改进才使其支持IP组播,其中的主流是DSLAM技术。

一、 ADSL承载组播的特殊性

由于ADSL的底层不同于一般的以太网帧结构,因此在DSLAM上实现IP组播可以采用IGMP Proxy和IGMP Snooping两种方式。
IGMP Proxy的实现机理:DSLAM靠拦截用户和路由器之间的IGMP报文建立组播表,Proxy设备的上联端口执行主机的角色,下联端口执行路由器的角色。
IGMP Snooping的实现机理:DSLAM以侦听主机发向路由器IGMP成员报告消息的方式,形成组成员和交换机端口的对应关系,DSLAM则根据该对应关系,将收到的组播数据包转发到组成员的端口。
早期的基于纯ATM交换内核的DSLAM,由于PVC的终结是在BAS上,DSLAM支持数据的透传,不能对数据进行任何的处理,所以只能实现IGMP Snooping功能,而不能支持IGMP Proxy功能。现在基于纯IP交换的第三代DSLAM,可以同时支持IGMP Proxy和IGMP Snooping功能。

二、 DSLAM中IP组播性能的衡量

DSLAM中实现IP组播性能的衡量主要分为功能和性能两部分。
1.功能主要包括:
(1)DSLAM组播流的转发。DSLAM能按组播转发表正确转发,也就是说只有被授权的用户板端口才能收到组播流,而其他非授权端口不能收到组播流;
(2)多个组成员的加入不会影响到组内其他成员收看组播节目;同样,单个组成员的离开和单个组的离开也不会影响到组内其他成员和其他组的成员观看组播节目;
(3)对组播权限的控制。对权限的控制应该是基于端口号、MAC地址或IP地址的灵活控制,而且控制的颗粒度应能控制某个用户可以加入此组播组但是不能加入彼组播组;
(4)IP TV频道切换时延。时延在用户能接收的范围内与电视频道切换时间比较理想。
2.其性能主要包括:
(1)成员Join/Leave的时延。Join时延是指从待测路由器收到指定组播组的Join消息到它开始向该指定组播组转发组播流的时延;Leave时延是指从待测路由器收到组的Leave消息到它停止向该指定组转发组播流的时延。如果Join/Leave时延短则意味着在相同时间里加入/离开的组播组全面改造。其间对内容的分发是一个要重点考虑的问题,因为视频业务对带宽的占用是相当大的,如果分发不当不仅会影响到视频业务的质量,而且还会对原有业务产生负面的影响。建议内容分发网采用分级的分布式结构,这可以在一定程度上缓解IP城域网的压力;
(2)单/多PVC下多业务的QoS。保证在同一条PVC或多条PVC上能传送不同的业务;
(3)单板组播性能。该性能用于表征单用户板满情况下最大无差错转发时的组播流速率,速率的大小关系到组播源可以向用户提供的业务类型,如果速率不够大就有可能会限制某些业务的开展。

--------------------

组播IP地址

组播IP地址
组播IP地址用于标识一个IP组播组。IANA(internet assigned number authority)把D类地址空间分配给IP组播,其范围是从224.0.0.0到239.255.255.255。如下图所示(二进制表示),IP组播地址前四位均为1110
XXXX XXXXXXXX XXXXXXXX XXXXXXXX组播组可以是永久的也可以是临时的。组播组地址中,有一部分由官方分配的,称为永久组播组。永久组播组保持不变的是它的ip地址,组中的成员构成可以发生变化。永久组播组中成员的数量都可以是任意的,甚至可以为零。那些没有保留下来供永久组播组使用的ip组播地址,可以被临时组播组利用。
224.0.0.0~224.0.0.255为预留的组播地址(永久组地址),地址224.0.0.0保留不做分配,其它地址供路由协议使用。
224.0.1.0~238.255.255.255为用户可用的组播地址(临时组地址),全网范围内有效。
239.0.0.0~239.255.255.255为本地管理组播地址,仅在特定的本地范围内有效。常用的预留组播地址列表如下:
224.0.0.0 基准地址(保留)
224.0.0.1 所有主机的地址
224.0.0.2 所有组播路由器的地址
224.0.0.3 不分配
224.0.0.4dvmrp(Distance Vector Multicast Routing Protocol,距离矢量组播路由协议)路由器
224.0.0.5 ospf(Open Shortest Path First,开放最短路径优先)路由器
224.0.0.6 ospf dr(Designated Router,指定路由器)
224.0.0.7 st (Shared Tree,共享树)路由器
224.0.0.8 st主机
224.0.0.9 rip-2路由器
224.0.0.10 Eigrp(Enhanced Interior Gateway Routing Protocol,增强网关内部路由线路协议)路由器 224.0.0.11 活动代理
224.0.0.12 dhcp服务器/中继代理
224.0.0.13 所有pim (Protocol Independent Multicast,协议无关组播)路由器
224.0.0.14 rsvp (Resource Reservation Protocol,资源预留协议)封装
224.0.0.15 所有cbt 路由器
224.0.0.16 指定sbm(Subnetwork Bandwidth Management,子网带宽管理)
224.0.0.17 所有sbms
224.0.0.18 vrrp(Virtual Router Redundancy Protocol,虚拟路由器冗余协议)
239.255.255.255 SSDP协议使用
组播IP地址和组播MAC地址的对应关系 组播IP地址和组播MAC地址的对应关系


组播MAC地址
组播MAC地址的高24bit为0x01005e,第25bit为0,即高25bit为固定值。MAC地址的低23bit为组播IP地址的低23bit。由于 IP组播地址的前4bit 是1110,代表组播标识,而后28bit 中只有23bit 被映射到MAC 地址,这样IP 地址中就有5bit 信息丢失,导致的结果是出现了32 个IP 组播地址映射到同一MAC 地址上。

参考:http://baike.baidu.com/link?url=UaKGMia4oDSiXZxyfjqqe5reQsuBy2qHk8ZDLMEMmI0m1bBKE0vGRPtb7X-zliXJBPNxelYbIbvKWoAjGYUpy_