最近偶然的研究了一下组播。看到这个词,我脑海里只有广播,以为大同小异,其实大不相同。
广播:发送信息,网内所有用户都接受到信息
组播:发送信息,只有本组内的用户接受到信息
下面只关注IP组播
组播的好处:服务器发送信息,只需要发一份,所有成员都可以收到,减少了服务器端的网络流量
组播的缺点:ip组播使用udp协议,不能保证可靠传输
组播的原理:基于IGMP协议,我的理解是这样的,服务器发送信息到他相邻的机器,那个机器再将信息发送到相邻的组成员。这样发送信息的任务分交到每个组成员,减少了服务器的负担。
组播应用:网络视频点播,不使用组播,服务端无法胜任超大流量,同时对数据丢包可以容忍。p2p我认为也是组播的一种。
组播开发:用java.net.MulticastSocket可以方便实现IP组播功能,但是对于传文件,文件只能切分为小块,通过发送数据包来传输。
http://blog.csdn.net/coolriver/archive/2004/09/13/102420.aspx 这个地址有应用的例子,但没有大文件切分组合。文件切分简单的实现就是每个数据包中都包含文件名,包编号,在客户端,可以首先创建空文件,然后对收到的数据直接写到相应的地址。最后统计收到的包编号判断是否接受文件成功。
经测试,大文件(200M)传输会有明显丢包现象。
数据包的大小:According to "UNIX Network Programming", all TCP/IP implementations must support a minimum IP datagram size of 576 bytes, regardless of the MTU. Assuming a 20 byte IP header and 8 byte UDP header, this leaves 548 bytes as a safe maximum size for UDP messages. The maximum size is 65516 byte
可以看出使用548byte的包大小最安全