ibcadmin 发表于 2012-12-21 17:57:45

UDP广播和组播学习-C#初识UDP(四)

前面UDP的实现中发送数据使用的都是一对一(单播)的通信方式,即只将数据发送到某一个进程。前面提到UDP可以实现一对多的传输方式,即通过广播和组播把数据发送给一组进程。下面就介绍下UDP广播和组播的相关知识。
4.1 广播和组播的基本概念
虽然利用TCP协议可以保证数据的可靠、有序的传输,但是TCP仅支持一对以的传输,而且传输时需要在发送端和每一个接受端之间建立单独的数据通信通道,如果需要实现网络会议、网络视频的点播等功能时要向大量主机发送相同的数据包,如果采用单播方式逐个节点传输的话,将会给发送方带来网络堵塞等问题,此时可以考虑实现UDP的多播方式——即广播和组播来实现这样的功能(一对多通信分为广播和组播两种形式)。
广播是指同时向子网中的多台计算机发送消息,并且所有子网中的计算机都可以接收到发送方发来的消息,每个广播消息包含一个特殊的IP地址,这个IP的中子网内主机标志部分的二进制都为1,例如,子网掩码为255.255.255.0,对于子网192.168.0,则这个IP地址为192.168.0.255.
然后广播消息又分为本地广播和全球广播两种类型, 本地广播是指向子网中的所有计算机发送广播消息,其他网络不会受到本地广播的影响。
IP地址分为两部分——网络标志部分和主机标志部分,这两部分是靠子网掩码来区分的,主机标记部分二进制全部为1的地址成为本地广播地址。例如:
A类网络192.168.0.0,使用子网掩码255.255.0.0,则本地广播地址为:http://pic002.cnblogs.com/images/2012/383187/2012090118243662.png
对于IPv4来说,全球广播使用所有位全为1的IP地址,即255.255.255.255,这个广播地址代表数据报的目的地是网络上所有设备,但是由于路由器会自动过滤全球广播,所以使用这个地址根本就没有任何意义。
然后当接收者分布于多个不同的子网时,广播将不再适用,此时可以通过组播的方式来实现,组播也叫多路广播,组播是将信息从一台计算机发送到本网或全网内指定的计算机上,即发送到那些加入了指定组播组的计算机上,每台计算机都可以通过程序随时加入某个组播组中,也可以随时退出来, 就像我们开网了会议一样,可以随时加入会议室进行开会,会议结束和会议进行中都可以随意的退出来。
4.2 加入和退出组播组
组播组又称为多路广播组,组播地址的范围在224.0.0.0到239.255.255.255的D类IP地址(至于这个概念大家可以百度百科里面就查看)。任何发送到组播地址的消息都会被发送到组内所有成员设备上,组可以使永久的也可以是临时,大多数我们使用的都是临时的,仅在有成员的时候才存在。
使用组播时,注意生命周期(TTL,Time to live)的设,TTL值表示允许路由器转发的最大次数,当达到这个最大值时,数据包就会被丢弃,TTL的默认值为1,设置为1时表明只能在子网中发送数据
加入组播组:
UdpClient类提供了JoinMulticastGroup方法,用于将UdpClient加入到使用指定的IPAddress的组播组中,调用该方法后,基础的Socket会自动向路由器发送数据包,用于请求成为组播组的成员,如果成为组播组成员,就可以接收该组播组的数据报。至于具体方法的时候会在后面实现UDP广播程序中会用到,另外大家也可以查看MSDN,所以这里我就不再列出来了,只是指出这个方法的作用,让大家知道有这么个方法来调用。
退出组播组:
同样利用UdpClient的DropMulticastGroup方法,可以退出组播组,调用该方法后,基础Socket会自动向路由器发送数据包,用于请求从指定的组播组里退出,从组中回收UdpClient对象之后,将不再接受发送到该组播组的数据报。
五、总结
由于时间的关系,这篇文章就介绍到这里的,至于实现UDP广播的程序放在后面一个专题里面的,前面也对广播和组播的概念进行了简单的介绍,相信大家也对广播和组播有了个简单的认识(广播组和组播组说白了就是一个IP地址的集合,其实实现UDP广播的程序和前面实现单播的程序差不多,只是前面绑定了一个IP地址当然也只能发送到一个IP地址了,也就是所谓的单播,多播和广播就是发送的IP地址是一个组,当然也就实现了一对多的传输了)。

chao2332601 发表于 2013-6-16 03:27:34

谢谢分享!!!
页: [1]
查看完整版本: UDP广播和组播学习-C#初识UDP(四)