《TCP/IP网络编程》 尹圣雨 P230~P237
向大量客户端发送相同的数据时,会对服务器端和网络流量产生负面影响,可以使用多播技术解决该问题。
多播
Multicast多播方式的数据传输是基于UDP完成的。与UDP服务器端/客户端的实现方式非常接近。区别在于,UDP数据传输是以单一目标进行的,而多播数据同时传递到加入(注册)特定组的大量主机。即采用多播方式时,可以同时向多个主机传递数据。
多播的数据传输方式及流量方面特点:
(1)多播服务器端针对特定播组,只发送1次数据。
(2)即使只发送一次数据,但该组内的所有客户端都会接收数据。
(3)多播组数可在IP地址范围内任意增加。
(4)加入特定组即可接收发往该多播组的数据。
多播组是D类IP地址(224.0.0.0~239.255.255.255),“加入多播组”可以理解为提供程序完成如下声明:
在D类IP地址中,希望接收发往目标239.234.218.234的多播数据。
多播数据包的格式与UDP数据包相同。只是与一般的UDP数据包不同,向网络传递1个多播数据包时,路由器将复制该数据包并传递到多个主机。这样,多播需要借助路由器完成。
多播主要用于“多媒体数据的实时传输”。
路由Routing和TTL(Time to Live,生存时间),以及加入组的时间
为了传递多播数据包,必须设置TTL。TTL是决定“数据包传递距离”的主要因素。TTL用整数表示,并且每经过1个路由器就减一。TTL变为0时,该数据包无法再被传递,只能销毁。因此TTL的值设置过大将影响网络流量。当然设置过小也会无法传递到目标,需要引起注意。
与TTL相关的协议层为IPPROTO_IP,选项名为IP_MULTICAST_TTL。
加入多播组也通过设置套接字选项完成,加入多播组相关的协议层为IPPROTO_IP,选项名为IP_ADD_MEMBERSHIP。
实现多播Sender和Receiver
多播中用“发送者Sender”和“接受者Receiver”替代服务器端和客户端。Sender是多播数据的发生主体,Receiver是需要多播组加入过程的数据接收主体。
P233~P236是具体的实现代码。
多播主干网MBone Multicast Backbone
多播是基于MBone这个虚拟网络工作的,即“通过网络中的特殊协议工作的软件概念上的网络”。MBone部分可以触及的物理网络。它是以物理网络为基础,通过软件方法实现的多播通信必备虚拟网络。
广播
一次性向多个主机发送数据这一点与多播相似,但传输数据的范围有区别。多播即使在跨越不同的情况下,只要加入多播组就能接收数据,相反,广播只能向同一网络中的主机传输数据。
广播的理解及实现方法
广播是向同一网络中的所有主机传输数据的方法。广播也是基于UDP完成的。根据传输数据时使用的IP地址形式,分为:
直接广播:DirectBroadcast ,IP地址中除了网络地址外,其余主机地址全部设置尾1.
本地广播:LocalBroadcast,使用IP地址限定wie255.255.255.255.
如果不仔细观察广播示例中通信时使用的IP地址,则很难与UDP示例进行区分。数据通信中使用的IP地址是与UDP示例的唯一区别。默认生成的套接字会组织广播。