组播(多播)单播广播任播

 

http://colobu.com/2014/10/21/udp-and-unicast-multicast-broadcast-anycast/

单播,组播(多播),广播以及任播

目录 [−]

  1. 详细介绍
  2. 组播地址
  3. 广播地址
  4. Java,单播,组播与广播
    1. 单播
    2. 组播
    3. 广播
  5. Netty与单播,组播
    1. 广播的例子
    2. 组播
    3. 单播
  6. 参考

单播(unicast): 是指封包在计算机网络的传输中,目的地址为单一目标的一种传输方式。它是现今网络应用最为广泛,通常所使用的网络协议或服务大多采用单播传输,例如一切基于TCP的协议。
组播(multicast): 也叫多播, 多点广播或群播。 指把信息同时传递给一组目的地址。它使用策略是最高效的,因为消息在每条网络链路上只需传递一次,而且只有在链路分叉的时候,消息才会被复制。
广播(broadcast):是指封包在计算机网络中传输时,目的地址为网络中所有设备的一种传输方式。实际上,这里所说的“所有设备”也是限定在一个范围之中,称为“广播域”。
任播(anycast):是一种网络寻址和路由的策略,使得资料可以根据路由拓朴来决定送到“最近”或“最好”的目的地。

在Linux运行ifconfig, 如果网卡信息中包含UP BROADCAST RUNNING MULTICAST,则支持广播和组播。

详细介绍

(来自维基百科)

  • 单播:

    每次只有两个实体相互通信,发送端和接收端都是唯一确定的。
    在IPv4网络中,0.0.0.0到223.255.255.255属于单播地址。
    你对小月月喊“小月月”,那么只有小月月回过头来答应你。

  • 组播

    “组播”这个词通常用来指代IP组播。IP组播是一种通过使用一个组播地址将数据在同一时间以高效的方式发往处于TCP/IP网络上的多个接收者的协议。此外,它还常用来与RTP等音视频协议相结合。
    互联网架构师戴夫·克拉克是这样描述IP组播的:“你把数据包从一头放进去,网络就会试图将它们传递到想要得到它们的人那里。”
    组播报文的目的地址使用D类IP地址, D类地址不能出现在IP报文的源IP地址字段。
    你在大街上大喊一声“美女”, 会有一群女性回头看你。

  • 广播

    并非所有的计算机网络都支持广播,例如X.25网络和帧中继都不支持广播,而且也没有在“整个互联网范围中”的广播。IPv6亦不支持广播,广播相应的功能由组播代替。
    通常,广播都是限制在局域网中的,比如以太网或令牌环网络。因为广播在局域网中造成的影响远比在广域网中小得多。

    • 以太网和IPv4网都用全1的地址表示广播,分别是ff:ff:ff:ff:ff:ff和255.255.255.255。
    • 令牌环网络使用IEEE 802.2控制域中的一个特殊值来表示广播。
      你在公司大喊一声“放假了”, 全部同事都会响应,大叫爽死了。
  • 任播

    任播是与单播、广播和组播不同的方式。

    • 在单播中,在网络位址和网络节点之间存在一一对应的关系。
    • 在广播和组播中,在网络位址和网络节点之间存在一对多的关系:每一个目的位址对应一群接收可以复制资讯的节点。
    • 在任播中,在网络位址和网络节点之间存在一对多的关系:每一个位址对应一群接收节点,但在任何给定时间,只有其中之一可以接收到传送端来的资讯。
      在互联网中,通常使用边界网关协议来实现任播。
      作为老板,你在公司大喊一声“开发组的过来一个人”, 总会有一个人灰溜溜去响应, 挨批还是发钱啊?

组播地址

参考 iana
组播组可以是永久的也可以是临时的。组播组地址中,有一部分由官方分配的,称为永久组播组。永久组播组保持不变的是它的ip地址,组中的成员构成可以发生变化。永久组播组中成员的数量都可以是任意的,甚至可以为零。那些没有保留下来供永久组播组使用的ip组播地址,可以被临时组播组利用。

  • 224.0.0.0~224.0.0.255为预留的组播地址(永久组地址),地址224.0.0.0保留不做分配,其它地址供路由协议使用;
  • 224.0.1.0~224.0.1.255是公用组播地址,Internetwork Control Block;
  • 224.0.2.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.4 dvmrp路由器
  • 224.0.0.5 所有ospf路由器
  • 224.0.0.6 ospf DR/BDR
  • 224.0.0.7 st路由器
  • 224.0.0.8 st主机
  • 224.0.0.9 rip-2路由器
  • 224.0.0.10 Eigrp路由器
  • 224.0.0.11 活动代理
  • 224.0.0.12 dhcp 服务器/中继代理
  • 224.0.0.13 所有pim路由器
  • 224.0.0.14 rsvp封装
  • 224.0.0.15 所有cbt路由器
  • 224.0.0.16 指定sbm
  • 224.0.0.17 所有sbms
  • 224.0.0.18 vrrp

以太网传输单播ip报文的时候,目的mac地址使用的是接收者的mac地址。但是在传输组播报文时,传输目的不再是一个具体的接收者,而是一个成员不确定的组,所以使用的是组播mac地址。组播mac地址是和组播ip地址对应的。iana(internet assigned number authority)规定,组播mac地址的高24bit为0x01005e,mac 地址的低23bit为组播ip地址的低23bit。
由于ip组播地址的后28位中只有23位被映射到mac地址,这样就会有32个ip组播地址映射到同一mac地址上。

广播地址

广播地址(Broadcast Address)是专门用于同时向网络中所有工作站进行发送的一个地址。在使用TCP/IP 协议的网络中,主机标识段host ID 为全1 的IP 地址为广播地址,广播的分组传送给host ID段所涉及的所有计算机。例如,对于10.1.1.0 (255.255.255.0 )网段,其广播地址为10.1.1.255 (255 即为2 进制的11111111 ),当发出一个目的地址为10.1.1.255 的分组(封包)时,它将被分发给该网段上的所有计算机。
本地广播地址为255.255.255.255。

Java,单播,组播与广播

单播

UDP协议的全称是用户数据报协议,在网络中它与TCP协议一样用于处理数据包,是一种无连接的协议。在OSI模型中,在第四层——传输层,处于IP协议的上一层。UDP有不提供数据包分组、组装和不能对数据包进行排序的缺点,也就是说,当报文发送之后,是无法得知其是否安全完整到达的。UDP用来支持那些需要在计算机之间传输数据的网络应用。包括网络视频会议系统在内的众多的客户/服务器模式的网络应用都需要使用UDP协议。UDP协议从问世至今已经被使用了很多年,虽然其最初的光彩已经被一些类似协议所掩盖,但是即使是在今天UDP仍然不失为一项非常实用和可行的网络传输层协议。
与所熟知的TCP(传输控制协议)协议一样,UDP协议直接位于IP(网际协议)协议的顶层。根据OSI(开放系统互连)参考模型,UDP和TCP都属于传输层协议。
UDP首部字段由4个部分组成,其中两个是可选的。各16bit的来源端口和目的端口用来标记发送和接受的应用进程。因为UDP不需要应答,所以来源端口是可选的,如果来源端口不用,那么置为零。在目的端口后面是长度固定的以字节为单位的长度域,用来指定UDP数据报包括数据部分的长度,长度最小值为8byte。首部剩下地16bit是用来对首部和数据部分一起做校验和(Checksum)的,这部分是可选的,但在实际应用中一般都使用这一功能。

TCP和UDP的区别。

 TCP(传输控制协议)UDP(用户数据报协议)
是否连接 面向连接 面向非连接
传输可靠性 可靠的 不可靠的
应用场合 传输大量的数据 少量数据
速度

单播有UDP和TCP两种方式。 Java中 TCP socket编程就是单播的方式, ServerSocket/Socket。
Java中UDP也可以使用单播发送数据报:

1
2
3
4
5
6
7
8
9
10
11
//sending data to host and its port
InetAddress address = InetAddress.getByName(host);
 
// Initialize a datagram packet with data and address
DatagramPacket packet = new DatagramPacket(message, message.length,
address, port);
 
// Create a datagram socket, send the packet through it, close it.
DatagramSocket dsocket = new DatagramSocket();
dsocket.send(packet);
dsocket.close();
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
//receiving data from its port
DatagramSocket dsocket = new DatagramSocket(port);
 
// Create a buffer to read datagrams into. If a
// packet is larger than this buffer, the
// excess will simply be discarded!
byte[] buffer = new byte[2048];
 
// Create a packet to receive data into the buffer
DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
 
// Now loop forever, waiting to receive packets and printing them.
while (true) {
// Wait to receive a datagram
dsocket.receive(packet);
 
// Convert the contents to a string, and display them
String msg = new String(buffer, 0, packet.getLength());
System.out.println(packet.getAddress().getHostName() + ": "
+ msg);
 
// Reset the length of the packet before reusing it.
packet.setLength(buffer.length);
}

组播

多播数据报套接字类用于发送和接收 IP 多播包。MulticastSocket 是一种 (UDP) DatagramSocket,它具有加入 Internet 上其他多播主机的“组”的附加功能。
播组通过 D 类 IP 地址和标准 UDP 端口号指定。D 类 IP 地址在 224.0.0.0 和 239.255.255.255 的范围内(包括两者)。地址 224.0.0.0 被保留,不应使用。

可以通过首先使用所需端口创建 MulticastSocket,然后调用 joinGroup(InetAddress groupAddr) 方法来加入多播组:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// join a Multicast group and send the group salutations
...
String msg = "Hello";
InetAddress group = InetAddress.getByName("228.5.6.7");
MulticastSocket s = new MulticastSocket(6789);
s.joinGroup(group);
DatagramPacket hi = new DatagramPacket(msg.getBytes(), msg.length(),
group, 6789);
s.send(hi);
// get their responses!
byte[] buf = new byte[1000];
DatagramPacket recv = new DatagramPacket(buf, buf.length);
s.receive(recv);
...
// OK, I'm done talking - leave the group...
s.leaveGroup(group);

将消息发送到多播组时,该主机和端口的所有预定接收者都将接收到消息(在数据包的生存时间范围内,请参阅下文)。套接字不必成为多播组的成员即可向其发送消息.
当套接字预定多播组/端口时,它将接收由该组/端口的其他主机发送的数据报,像该组和端口的所有其他成员一样。套接字通过 leaveGroup(InetAddress addr) 方法放弃组中的成员资格。多个 MulticastSocket 可以同时预定多播组和端口,并且都会接收到组数据报。

1
2
3
4
5
6
7
8
9
10
11
//UDP servers
InetAddress group = InetAddress.getByName("228.5.6.7");
MulticastSocket s = new MulticastSocket(6789);
byte[] arb = new byte[1024];
s.joinGroup(group);//加入该组
while(true){
DatagramPacket datagramPacket =new DatagramPacket(arb,arb.length);
s.receive(datagramPacket);
System.out.println(arb.length);
System.out.println(new String(arb));
}
1
2
3
4
5
6
7
//UDP sender
int port = 6789;
String sendMessage="hello multicast";
InetAddress inetAddress = InetAddress.getByName("228.5.6.7");
DatagramPacket datagramPacket = new DatagramPacket(sendMessage.getBytes(), sendMessage.length(), inetAddress, port);
MulticastSocket multicastSocket = new MulticastSocket(); //it is client, it won't join group
multicastSocket.send(datagramPacket);

广播

在Java中,在Java UDP中单播与广播的代码是相同的,要实现具有广播功能的程序只需要使用广播地址即可。

Netty与单播,组播

广播的例子

例子Quote of the Moment是一个广播的例子。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public final class QuoteOfTheMomentServer {
 
private static final int PORT = Integer.parseInt(System.getProperty("port", "7686"));
 
public static void main(String[] args) throws Exception {
EventLoopGroup group = new NioEventLoopGroup();
try {
Bootstrap b = new Bootstrap();
b.group(group)
.channel(NioDatagramChannel.class)
.option(ChannelOption.SO_BROADCAST, true)
.handler(new QuoteOfTheMomentServerHandler());
 
b.bind(PORT).sync().channel().closeFuture().await();
} finally {
group.shutdownGracefully();
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
public final class QuoteOfTheMomentClient {
 
static final int PORT = Integer.parseInt(System.getProperty("port", "7686"));
 
public static void main(String[] args) throws Exception {
 
EventLoopGroup group = new NioEventLoopGroup();
try {
Bootstrap b = new Bootstrap();
b.group(group)
.channel(NioDatagramChannel.class)
.option(ChannelOption.SO_BROADCAST, true)
.handler(new QuoteOfTheMomentClientHandler());
 
Channel ch = b.bind(0).sync().channel();
 
// Broadcast the QOTM request to port 8080.
ch.writeAndFlush(new DatagramPacket(
Unpooled.copiedBuffer("QOTM?", CharsetUtil.UTF_8),
new InetSocketAddress("255.255.255.255", PORT))).sync();
 
// QuoteOfTheMomentClientHandler will close the DatagramChannel when a
// response is received. If the channel is not closed within 5 seconds,
// print an error message and quit.
if (!ch.closeFuture().await(5000)) {
System.err.println("QOTM request timed out.");
}
} finally {
group.shutdownGracefully();
}
}
}

组播

SocketOptions定义组播和广播的一些常量。

  • IP_MULTICAST_IF / networkInterface: The name of the interface on which outgoing multicast packets should be sent. When a host has multiple network interfaces, this tends to be quite important.
  • IP_MULTICAST_IF2 / networkInterface: The same as IP_MULTICAST_IF but defined again for good measure.
  • IP_MULTICAST_LOOP / loopbackModeDisabled: Defines if multicast packets should be received by the sender of the same.
  • SO_BROADCAST / broadcast: Enables or disables a DataGramSocket’s ability to send broadcast messages,

参照netty的测试套件

单播

参看netty的测试套件

参考

    1. http://zh.wikipedia.org/wiki/%E5%96%AE%E6%92%AD
    2. http://zh.wikipedia.org/wiki/%E5%A4%9A%E6%92%AD
    3. http://zh.wikipedia.org/wiki/%E5%BB%A3%E6%92%AD_(%E7%B6%B2%E8%B7%AF)
    4. http://zh.wikipedia.org/wiki/%E4%BB%BB%E6%92%AD
    5. http://li-sir.iteye.com/blog/837344

 

 

 

 

http://www.360doc.com/content/11/0217/10/61151_93723629.shtml

假设X代表所有的机器,Y代表X中的一部分机器,Z代表一组机器,1代表一台机器,那么
1:1 那就是单播;
1:Y 那就是多播;
1:X 那就是广播;
1:Z 那就是组播;
Y=X时,多播就是广播;Y=Z多播就是组播;
泛播也叫任意播,是指某组中任意发送方对应拓朴结构中几个最接近的接收方之间的通信。
而组播是指单个发送方对应一组选定接收方的一种通信。
一、什么是组播
1、组播的特点
1)什么是组播?
组播是一种数据包传输方式,当有多台主机同时成为一个数据包的接受者时,出于对带宽和CPU负担的考虑,组播成为了一种最佳选择。
2)组播如何进行工作?
   
组播通过把224.0.0.0-239.255.255.255的D类地址作为目的地址,有一台源主机发出目的地址是以上范围组播地址的报文,在网络中,
如果有其他主机对于这个组的报文有兴趣的,可以申请加入这个组,并可以接受这个组,而其他不是这个组的成员是无法接受到这个组的报文的。
3)组播和单播的区别?
  
为了让网络中的多个主机可以同时接受到相同的报文,如果采用单播的方式,那么源主机必须不停的产生多个相同的报文来进行发送,对于一些对时延很敏感的数
据,在源主机要产生多个相同的数据报文后,在产生第二个数据报文,这通常是无法容忍的。而且对于一台主机来说,同时不停的产生一个报文来说也是一个很大的
负担。如果采用组播的方式,源主机可以只需要发送一个报文就可以到达每个需要接受的主机上,这中间还要取决于路由器对组员和组关系的维护和选择。
4)组播和广播的区别?
  
如同上个例子,当有多台主机想要接收相同的报文,广播采用的方式是把报文传送到局域网内每个主机上,不管这个主机是否对报文感兴趣。这样做就会造成了带宽
的浪费和主机的资源浪费。而组播有一套对组员和组之间关系维护的机制,可以明确的知道在某个子网中,是否有主机对这类组播报文感兴趣,如果没有就不会把报
文进行转发,并会通知上游路由器不要再转发这类报文到下游路由器上。
2、组播的缺点:
1) 与单播协议相比没有纠错机制,发生丢包错包后难以弥补,但可以通过一定的容错机制和QOS加以弥补。
2) 现行网络虽然都支持组播的传输,但在客户认证、QOS等方面还需要完善,这些缺点在理论上都有成熟的解决方案,只是需要逐步推广应用到现存网络当中。
二、单播:
1、单播的定义
   
主机之间“一对一”的通讯模式,网络中的交换机和路由器对数据只进行转发不进行复制。如果10个客户机需要相同的数据,则服务器需要逐一传送,重复10次
相同的工作。但由于其能够针对每个客户的及时响应,所以现在的网页浏览全部都是采用IP单播协议。网络中的路由器和交换机根据其目标地址选择传输路径,将
IP单播数据传送到其指定的目的地。
2、单播的优点:
1)服务器及时响应客户机的请求
2)服务器针对每个客户不通的请求发送不通的数据,容易实现个性化服务。
3、单播的缺点:
1)服务器针对每个客户机发送数据流,服务器流量=客户机数量×客户机流量;在客户数量大、每个客户机流量大的流媒体应用中服务器不堪重负。
2)现有的网络带宽是金字塔结构,城际省际主干带宽仅仅相当于其所有用户带宽之和的5%。如果全部使用单播协议,将造成网络主干不堪重负。现在的P2P应用就已经使主干经常阻塞,只要有5%的客户在全速使用网络,其他人就不要玩了。而将主干扩展20倍几乎是不可能。
三、 广播
1、广播的定义
主机之间“一对所有”的通讯模式,网络对其中每一台主机发出的信号都进行无条件复制并转发,所有主机都可以接收到所有信息
(不管你是否需要),由于其不用路径选择,所以其网络成本可以很低廉。有线电视网就是典型的广播型网络,我们的电视机实际上是接受到所有频道的信号,但只
将一个频道的信号还原成画面。在数据网络中也允许广播的存在,但其被限制在二层交换机的局域网范围内,禁止广播数据穿过路由器,防止广播数据影响大面积的
主机。
2、广播的优点:
1)网络设备简单,维护简单,布网成本低廉
2)由于服务器不用向每个客户机单独发送数据,所以服务器流量负载极低。
3、广播的缺点:
1)无法针对每个客户的要求和时间及时提供个性化服务。
2)
网络允许服务器提供数据的带宽有限,客户端的最大带宽=服务总带宽。例如有线电视的客户端的线路支持100个频道(如果采用数字压缩技术,理论上可以提供
500个频道),即使服务商有更大的财力配置更多的发送设备、改成光纤主干,也无法超过此极限。也就是说无法向众多客户提供更多样化、更加个性化的服务。
3) 广播禁止在Internet宽带网上传输。
四、多播
1、多播的定义
“多播”可以理解为一个人向多个人(但不是在场的所有人)说话,这样能够提高通话的效率。如果你要通知特定的某些人同一件事
情,但是又不想让其他人知道,使用电话一个一个地通知就非常麻烦,而使用日常生活的大喇叭进行广播通知,就达不到只通知个别人的目的了,此时使用“多播”
来实现就会非常方便快捷,但是现实生活中多播设备非常少。多播包括组播和广播,组播是多播的一种表现形式。
2、多播的特点
    广播和多播仅应用于UDP,它们对需将报文同时传往多个接收者的应用来说十分重要。TCP是一个面向连接的协议,它意味着分别运行于两主机(由IP地址确定)内的两进程(由端口号确定)间存在一条连接。

  考虑包含多个主机的共享信道网络如以太网。每个以太网帧包含源主机和目的主机的以太网地址(48
bit)。通常每个以太网帧仅发往单个目的主机,目的地址指明单个接收接口,因而称为单播(unicast)。在这种方式下,任意两个主机的通信不会干扰
网内其他主机(可能引起争夺共享信道的情况除外)。然而,有时一个主机要向网上的所有其他主机发送帧,这就是广播。通过ARP和RARP可以看到这一过
程。多播(multicast) 处于单播和广播之间:帧仅传送给属于多播组的多个主机。
五、泛洪
1、泛洪的定义
在CISCO设备上有个概念叫泛洪。如果有学设备的,我这里顺便对比讲下,比如现在有个信息包进来,从我们交换机某个端口进来,他要寻质如果事先没
有地址那么他就会给每个端口发信息,包括自己,来求证是否是对方。所以交换机不能屏蔽广播而路由器可以,因为他有记忆功能,可以形成路由表。而设备上的泛
洪呢
他的意思是给所有端口发除了自己,大家对记下这两个概念.而我们IP地址上的广播地址的概念:IP地址是由2进制组成,当全为一时,表示广播地址。广播地
址主机都为1.主机全为0的话是网段表示一个网。
2、网络泛洪
从定义上说,攻击者对网络资源发送过量数据时就发生了洪水攻击,这个网络资源可以是router,switch,host,application等。常见的洪水攻击包含MAC泛洪,网络泛洪,TCP SYN泛洪和应用程序泛洪。接下来简单的分别解释一下以上这些:
   
1)MAC泛洪发生在OSI第二层,攻击者进入LAN内,将假冒源MAC地址和目的MAC地址将数据帧发送到以太网上导致交换机的内容可寻址存储器
(CAM)满掉,然后交换机失去转发功能,导致攻击者可以像在共享式以太网上对某些帧进行嗅探,这种攻击可以通过端口安全技术方式,比如端口和MAC地址
绑定。
    2)网络泛洪包括Smurf和DDos:
   
smurf发生在OSI第三层,就是假冒ICMP广播ping,如果路由器没有关闭定向广播,那攻击者就可以在某个网络内对其它网络发送定向广播
ping,那个网络中的主机越是多,造成的结果越是严重,因为每个主机默认都会响应这个ping,导致链路流量过大而拒绝服务,所以属于增幅泛洪攻击,当
然也可以对本            网络发送广播ping。
   
3)DDos发生在OSI第三、四层,攻击侵入许多因特网上的系统,将DDos控制软件安装进去,然后这些系统再去感染其它系统,通过这些代理,攻击者将
攻击指令发送给DDos控制软件,然后这个系统就去控制下面的代理系统去对某个IP地址发送大量假冒的网络流量,然后受攻击者的网络将被这些假的流量所占
据就无法为他们的正常用户提供服务了。
    4)TCP
SYN泛洪发生在OSI第四层,这种方式利用TCP协议的特性,就是三次握手。攻击者发送TCP
SYN,SYN是TCP三次握手中的第一个数据包,而当服务器返回ACK后,改攻击者就不对之进行再确认,那这个TCP连接就处于挂起状态,也就是所谓的
半连接状态,服务器收不到再确认的话,还会重复发送ACK给攻击者。这样更加会浪费服务器的资源。攻击者就对服务器发送非常大量的这种TCP连接,由于每
一个都没法完成三次握手,所以在服务器上,这些TCP连接会因为挂起状态而消耗CPU和内存,最后服务器可能死机,就无法为正常用户提供服务了。
   
5)最后应用程序泛洪发生在OSI第七层,目的是消耗应用程序或系统资源,比较常见的应用程序泛洪是什么呢?没错,就是垃圾邮件,但一般无法产生严重的结
果。其它类型的应用程序泛洪可能是在服务器上持续运行高CPU消耗的程序或者用持续不断的认证请求对服务器进行泛洪攻击,意思就是当TCP连接完成后,在
服务器提示输入密码的时候停止响应。
冲突域(物理分段):连接在同一导线上的所有工作站的集合,或者说是同一物理网段上所有节点的集合或以太网上竞争同一带宽的节点集合。也就是
说,用Hub或者Repeater连接的所有节点可以被认为是在同一个冲突域内,它不会划分冲突域。由于广播域被认为是OSI中的第二层概念,所以象
Hub,交换机等第一,第二层设备连接的节点被认为都是在同一个广播域。
冲突域(Collision Domain):一组与同一条物理介质相连的设备,其中任何两台设备同时访问该介质都将导致冲突,冲突域中同一时间内只有一台机器能够发送数据。
广播域(Broadcast Domain):网络中一组相互接收广播消息的设备。
第一层设备如集线器,与之连接的所有设备都属于同一个冲突域和同一个广播域;
第二层设备如交换机和网桥,将网络划分成多个网段,每个网段是一个独立的冲突域,但是相连的所有设备是一个广播域,交换机的每个端口就是一个冲突域;
第三层设备如路由器,将网络划分为多个冲突域和广播域。
以太网使用载波侦听多路访问/冲突检测(Carrier Sense Multi-Access/Collision Detection)技术以减少冲突的发生。
即,二层广播帧覆盖的范围就是广播域;二层单播帧覆盖的范围就是冲突域。
                
                
                

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/38576/showart_1002050.html

 

http://blog.csdn.net/milanleon/article/details/37957455

单播、多播和广播单播”(Unicast)、“多播”(Multicast)和“广播”(Broadcast)这三个术语都是用来描述网络节点之间通讯方式的术语。那么这些术语究竟是什么意思?区别何在?

1.单播:网络节点之间的通信就好像是人们之间的对话一样。如果一个人对另外一个人说话,那么用网络技术的术语来描述就是“单播”,此时信息的接收和传递只在两个节点之间进行。单播在网络中得到了广泛的应用,网络上绝大部分的数据都是以单播的形式传输的,只是一般网络用户不知道而已。例如,你在收发电子邮件、浏览网页时,必须与邮件服务器、Web服务器建立连接,此时使用的就是单播数据传输方式。但是通常使用“点对点通信”(Point to Point)代替“单播”,因为“单播”一般与“多播”和“广播”相对应使用。

2.多播:“多播”也可以称为“组播”,在网络技术的应用并不是很多,网上视频会议、网上视频点播特别适合采用多播方式。因为如果采用单播方式,逐个节点传输,有多少个目标节点,就会有多少次传送过程,这种方式显然效率极低,是不可取的;如果采用不区分目标、全部发送的广播方式,虽然一次可以传送完数据,但是显然达不到区分特定数据接收对象的目的。采用多播方式,既可以实现一次传送所有目标节点的数据,也可以达到只对特定对象传送数据的目的。   IP网络的多播一般通过多播IP地址来实现。多播IP地址就是D类IP地址,即224.0.0.0至239.255.255.255之间的IP地址。Windows 2000中的DHCP管理器支持多播IP地址的自动分配。 

3.广播:“广播”在网络中的应用较多,如客户机通过DHCP自动获得IP地址的过程就是通过广播来实现的。但是同单播和多播相比,广播几乎占用了子网内网络的所有带宽。拿开会打一个比方吧,在会场上只能有一个人发言,想象一下如果所有的人同时都用麦克风发言,那会场上就会乱成一锅粥。集线器由于其工作原理决定了不可能过滤广播风暴,一般的交换机也没有这一功能,不过现在有的网络交换机(如全向的QS系列交换机)也有过滤广播风暴功能了,路由器本身就有隔离广播风暴的作用。   广播风暴不能完全杜绝,但是只能在同一子网内传播,就好像喇叭的声音只能在同一会场内传播一样,因此在由几百台甚至上千台电脑构成的大中型局域网中,一般进行子网划分,就像将一个大厅用墙壁隔离成许多小厅一样,以达到隔离广播风暴的目的。   在IP网络中,广播地址用IP地址“255.255.255.255”来表示,这个IP地址代表同一子网内所有的IP地址。

=================================================================

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

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

单播的缺点:
1)服务器针对每个客户机发送数据流,服务器流量=客户机数量×客户机流量;在客户数量大、每个客户机流量大的流媒体应用中服务器不堪重负。
2)现有的网络带宽是金字塔结构,城际省际主干带宽仅仅相当于其所有用户带宽之和的5%。如果全部使用单播协议,将造成网络主干不堪重负。现在的P2P应用就已经使主干经常阻塞。而将主干扩展20倍几乎是不可能。

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

广播的缺点:
1)无法针对每个客户的要求和时间及时提供个性化服务。
2)网络允许服务器提供数据的带宽有限,客户端的最大带宽=服务总带宽。例如有线电视的客户端的线路支持100个频道(如果采用数字压缩技术,理论上可以提供500个频道),即使服务商有更大的财力配置更多的发送设备、改成光纤主干,也无法超过此极限。也就是说无法向众多客户提供更多样化、更加个性化的服务。
3)广播禁止允许在Internet宽带网上传输。

3.组播:
主机之间一对一组的通讯模式,也就是加入了同一个组的主机可以接受到此组内的所有数据,网络中的交换机和路由器只向有需求者复制并转发其所需数据。主机可以向路由器请求加入或退出某个组,网络中的路由器和交换机有选择的复制并传输数据,即只将组内数据传输给那些加入组的主机。这样既能一次将数据传输给多个有需要(加入组)的主机,又能保证不影响其他不需要(未加入组)的主机的其他通讯。
组播的优点:
1)需要相同数据流的客户端加入相同的组共享一条数据流,节省了服务器的负载。具备广播所具备的优点。
2)由于组播协议是根据接受者的需要对数据流进行复制转发,所以服务端的服务总带宽不受客户接入端带宽的限制。IP协议允许有2亿6千多万个组播,所以其提供的服务可以非常丰富。 
3)此协议和单播协议一样允许在Internet宽带网上传输。

组播的缺点:
1)与单播协议相比没有纠错机制,发生丢包错包后难以弥补,但可以通过一定的容错机制和QOS加以弥补。
2)现行网络虽然都支持组播的传输,但在客户认证、QOS等方面还需要完善,这些缺点在理论上都有成熟的解决方案,只是需要逐步推广应用到现存网络当中。

 

 

 

=========================

 

http://blog.csdn.net/dabing69221/article/details/17286441

单播:

     单播是网络通信中最常见的,网络节点之间的通信 就好像是人们之间的对话一样。如果一个人对另外一个人说话,

     那么用网络技术的术语来描述就是“单播”,此时信息的接收和传递只在两个节点之间进行。

     1. 单播的优点:

         (1)服务器以及响应客户端的请求;

         (2)服务器能针对每个客户端的不同请求发送不同的响应,容易显示个性化服务;

     2. 单播的缺点:

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

     3. 应用场景:

        单播在网络中得到了广泛的应用,网络上绝大部分的数据都 是以单播的形式传输的。例如:收发电子邮件、游览网页时,必须与邮件服务器、

        服务器建立连接,此时使用的就是单播通信方式;

 

广播:

    “广播”可以比方为:一个人通过广播喇叭对在场的全体说话(他才不管你是否乐意听)。换句话说: 广播是一台主机对某一个网络上的所有主机发送数据报包。

    这个网络可能是网络,也可能时子网,还有可能是所有子网。

    广播有两类:本地广播和定向广播:

            定向广播:将数据报包发送到本网络之外的特定网络的所有主机,然而,由于互联网上的大部分路由器都不转发定向广播消息,所以这里不深入介绍了

            本地广播:将数据报包发送到本地网络的所有主机,IPv4的本地广播地址为“255.255.255.255”,路由器不会转发此广播;

    1.广播的优点:

       (1)通信的效率高,信息一下子就可以传递到某一个网络上的所有主机。

       (2)由于服务器不用向每个客户端单独发送数据,所以服务器流量比较负载低;

    2.广播的缺点:

       (1)非常占用网络的带宽;

       (2)缺乏针对性,也不管主机是否真的需要接收该数据, 就强制的接收数据;

    3.应用场景:

       (1)有线电视就是典型的广播型网络

 

组播:

     ”组播“可以比方为:你对着大街喊:”是男人的来一下,一人发一百块”,那么男的过来,女就不会过来,因为没有钱发她不理你(组播:其中所有的男生就是一个组),

     换句话说: 组播是一台主机向指定的一组主机发送数据报包,因为如果采用单播方式,逐个节点传输,有多少个目标节点,就会有多少次传送过程,这种方式显然效率 极低,是不可取  

     的;如果采用不区分目标、全部发送的广播方式,虽然一次可以传送完数据,但是显然达不到区分特定数据接收对象的目的,又会占用网络带宽。采用组播方式,既可以 实现一次传送所

     有目标节点的数据,也可以达到只对特定对象传送数据的目的。

     IP网络的组播一般通过组播IP地址来实现。组播IP地址就是D类IP地址,即224.0.0.0至239.255.255.255之间的IP地址。

     1.组播的优点:

        (1)具备广播所具备的所有优点;

    (2)与单播相比,提供了发送数据报包的效率,与广播相比,减少了网络流量;

     2.组播的缺点:

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

posted @ 2014-11-05 10:31  陳聽溪  阅读(3572)  评论(0)    收藏  举报