单播、多播和广播

单播、多播和广播

  • 单播:信息的接受和传递只在两个节点之间进行,点对点通信。网络上绝大部分数据是以单播的形式传输的,例如在收发电子邮件、浏览网页时,必须与邮件服务器、Web服务器建立连接,此时使用的就是单播数据传输方式。
  • 多播:也可以称为“组播”,将网络中同一业务类型主机进行了逻辑上的分组,进行数据收发的时候其数据仅仅在同一分组中进行,其他的主机没有加入此分组不能收发对应的数据。网上视频会议、视频点播比较时候使用多播。因为如果用单播,逐个节点传输,有多少个目标节点就会有多少次传送过程,这样显然效率极低,是不可取的;如果采用不区分目标,全部发送的广播方式,虽然一次可以传送完数据,但是显然达不到区分特定数据接收对象的目的。**采用多播方式,既可以实现一次传送所有目标节点的数据,也可以达到只对特定对象传送数据的目的。**IP网络的多播一般通过多播IP来实现。多播IP地址就是D类IP地址,即224.0.0.0239.255.255.255之间的IP地址,并被划分为局部连接多播地址、预留多播地址和管理权限多播地址3类:
  1. 局部多播地址:在224.0.0.0~224.0.0.255之间,这是为路由协议和其他用途保留的地址,路由器并不转发属于此范围的IP包。
  2. 预留多播地址:在224.0.1.0~238.255.255.255之间,可用于全球范围(如Internet)或网络协议。
  3. 管理权限多播地址:在239.0.0.0~239.255.255.255之间,可供组织内部使用,类似于私有IP地址,不能用于Internet,可限制多播范围。
  • 广播:“广播”在网络中应用较多,如客户机通过DHCP自动获得IP地址的过程就是通过广播来实现的。广播用于一个主机对整个子网上所有主机进行通信,但是广播还是要指明接收者的端口号的,因为不可能接受者的所有端口都来收听广播。但是同单播和多播相比,广播几乎占用了子网内网络的所有带宽。例如一个会长所有人都用麦克风发言就会乱成一锅粥。集线器由于其工作原理决定了不可能过滤广播风暴,一般的交换机也没有这一功能,不过现在有的网络交换机(如全向的QS系列交换机)也有过滤广播风暴功能了,路由器本身就有隔离广播风暴的作用。广播风暴不能完全杜绝,但是只能在同一子网内传播,就好像喇叭的声音只能在同一个会场内传播一样。因此在大中型局域网中,一般进行子网划分,以达到隔离广播风暴的目的。在IP网络中,广播地址用IP地地址“255.255.255.255”来表示,这个IP地址代表同一子网内所有的IP地址。

只有UDP套接字允许广播或多播。


单播的优点

  1. 服务器及时响应客户机的请求
  2. 服务器针对每个客户不同的请求发送不同的数据,容易实现个性化服务。

单播的缺点

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

广播的优点

  1. 网络设备简单,维护简单,布网成本低廉
  2. 由于服务器不用向每个客户机单独发送数据,所以服务器流量负载极低。

广播的缺点

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

组播的优点

  1. 具有同种业务的主机加入同一数据流,共享同一通道,节省了带宽和服务器的负载,具有广播的优点而又没有广播所需要的带宽。
  2. 服务器的总带宽不受客户端带宽的限制。由于组播协议由接收者的需求来确定是否进行数据流的转发,所以服务器端的带宽是常量,与客户端的数量无关。
  3. 与单播一样,多播是允许在广域网即Internet上进行传输的,而广播仅仅在同一局域网上才能进行。

组播的缺点

  1. 多播与单播相比没有纠错机制,当发生错误的时候难以弥补,但是可以在应用层来实现此种功能。
  2. 现行网络虽然都支持组播的传输,但在客户认证、QOS等方面还需要完善,这些缺点在理论上都有成熟的解决方案,只是需要逐步推广应用到现存网络当中。

多播的程序设计使用setsockopt()函数和getsockopt()函数来实现,组播的选项是IP层的,其选项值和含义参见下表所示。

**getsockopt()/setsockopt()**的选项含义
IP_MULTICAST_TTL设置多播组数据的TTL值
IP_ADD_MEMBERSHIP在指定接口上加入组播组
IP_DROP_MEMBERSHIP退出组播组
IP_MULTICAST_IF获取默认接口或设置接口
IP_MULTICAST_LOOP禁止组播数据回送

在多播中设置了TTl值(Time to live),每一个ip数据报文中都包含一个TTL,每当有路由器转发该报文时,TTL减1,知道减为0时,生命周期结束,报文即时没有到达目的地,也立即宣布死亡。当然在Java中,ttl并不是十分准确的,曾经在一本书中介绍过报文的传播距离是不会超过ttl所设置的值的。


## 多播程序设计的框架
要进行多播的编程,需要遵从一定的编程框架。多播程序框架主要包含套接字初始化、设置多播超时时间、加入多播组、发送数据、接收数据以及从多播组中离开几个方面。其步骤如下:

  1. 建立一个socket。

  2. 然后设置多播的参数,例如超时时间TTL、本地回环许可LOOP等。

  3. 加入多播组。

  4. 发送和接收数据。

  5. 从多播组离开。


参考文献
https://yq.aliyun.com/articles/243802

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值