Prac 4. 多播
实验中的全部代码托管在Github上,请通过 fork + pull request 方法来帮助改进项目。
导语:
单播用于两个主机之间的端对端通信,广播用于一个主机对整个局域网所有主机上的数据通信。单播和广播室两个极端,要么对一个主机进行通信,要么对整个局域网进行通信。实际情况下,经常需要对一组特定的主机进行通信,而不是整个局域网上的所有主机,这就是多播的用途。
多播,也叫组播,将网络中统一业务类型的主机进行了逻辑分组,进行数据收发的时候其数据仅仅在同一个分组中进行,其他的主机没有加入次分组不能收发相应的数据。
一,实验内容
目标:尝试实现一个多播,完成以下功能:
创建一个多播server进程,用于发送多播消息给多播接收程序。多播IP地址是239.1.2.3 端口号为1234。
创建多个多播client进程,用于接收多播消息并显示消息。
二,多播的概念
2.1 广域网的多播
多播的地址是特定的,D类地址用于多播,即224.0.0.0到239.255.255.255之间的IP地址,并被划分为局部连接多播地址、预留多播地址和管理权限多播地址3类。
2.2 多播的优势
相对于传统的一对一的单播,多播有如下优势:
- 具有通中业务的主机加入同一数据流,共享同一通道,节省了贷款和服务器的优点,具有广博的优点而又没有广播所需要的带宽;
- 服务器的总带宽不受客户端的限制。由于组播协议由接受者的需求来确定是否进行数据流的转发,所有服务器端的带宽是常量,与客户端的数量无关;
- 与单播一样,多播是允许在广域网上进行传输的,而广播仅仅在同一局域网才能进行。
2.3 多播的缺点:
- 多播和单播相比没有纠错机制,当错误发生的时候难以弥补,但是可以再应用层来实现此种功能。
- 多播的网络支持存在缺陷,需要路由器和网络协议栈的支持。
2.4 多播的应用
多播的应用主要有网上视频,网上会议等。
三,多播的编程
3.1 编程选项
多播的程序设计使用setsockopt()
函数和getsockopt()
来实现,多播的选项是IP层的。
getsockopt()/setsockopt() 的选项 |
含义 |
---|---|
IP_MULTICAST_TTL | 设置多播数据的TTL值 |
IP_ADD_MEMBERSHIP | 在指定接口上加入多播组 |
IP_DROP_MEMBERSHIP | 推出多播组 |
IP_MULTICAST_IF | 获取默认接口或默认设置 |
IP_MULTICAST_LOOP | 禁止组播数据回送 |
3.2多播程序设计框架
多播程序框架主要包含套接字初始化、设置多播超时时间、加入多播组、发送数据、接收数据以及从多播组离开几个方面。其步骤如下:
- 建立一个Socket
- 然后设置多播的参数,例如超时时间TTL、本地回环许可LOOP等
- 加入