第10章广播与多播编程_第1页
第10章广播与多播编程_第2页
第10章广播与多播编程_第3页
第10章广播与多播编程_第4页
第10章广播与多播编程_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第10章 广播与多播编程广播一个IP地址由网络号和主机号组成。所有主机号部分为全1的IP地址是广播地址。1.单播:n网络节点之间的通信就好像是人们之间的对话一样。如果一个人对另外一个人说话,那么用网络技术的术语来描述就是“单播”,此时信息的接收和传递只在两个节点之间进行。单播在网络中得到了广泛的应用,网络上绝大部分的数据都是以单播的形式传输的,只是一般网络用户不知道而已。例如,你在收发电子邮件、浏览网页时,必须与邮件服务器、Web服务器建立连接,此时使用的就是单播数据传输方式。但是通常使用“点对点通信”(Point to Point)代替“单播”,因为“单播”一般与“多播”和“广播”相对应使用

2、。2.多播n“多播”也可以称为“组播”,在网络技术的应用并不是很多,网上视频会议、网上视频点播特别适合采用多播方式。因为如果采用单播方式,逐个节点传输,有多少个目标节点,就会有多少次传送过程,这种方式显然效率极低,是不可取的;如果采用不区分目标、全部发送的广播方式,虽然一次可以传送完数据,但是显然达不到区分特定数据接收对象的目的。采用多播方式,既可以实现一次传送所有目标节点的数据,也可以达到只对特定对象传送数据的目的。 IP网络的多播一般通过多播IP地址来实现。多播IP地址就是D类IP地址,即224.0.0.0至239.255.255.255之间的IP地址。3.广播n“广播”在网络中的应用较多

3、,如客户机通过DHCP自动获得IP地址的过程就是通过广播来实现的。但是同单播和多播相比,广播几乎占用了子网内网络的所有带宽。拿开会打一个比方吧,在会场上只能有一个人发言,想象一下如果所有的人同时都用麦克风发言,那会场上就会乱成一锅粥。集线器由于其工作原理决定了不可能过滤广播风暴,一般的交换机也没有这一功能,不过现在有的网络交换机(如全向的QS系列交换机)也有过滤广播风暴功能了,路由器本身就有隔离广播风暴的作用。 广播风暴不能完全杜绝,但是只能在同一子网内传播,就好像喇叭的声音只能在同一会场内传播一样,因此在由几百台甚至上千台电脑构成的大中型局域网中,一般进行子网划分,就像将一个大厅用墙壁隔离成

4、许多小厅一样,以达到隔离广播风暴的目的。 在IP网络中,广播地址用IP地址“255.255.255.255”来表示,这个IP地址代表同一子网内所有的IP地址。单播优缺点:n主机之间一对一的通讯模式,网络中的交换机和路由器对数据只进行转发不进行复制。如果10个客户机需要相同的数据,则服务器需要逐一传送,重复10次相同的工作。但由于其能够针对每个客户的及时响应,所以现在的网页浏览全部都是采用单播模式,具体的说就是IP单播协议。网络中的路由器和交换机根据其目标地址选择传输路径,将IP单播数据传送到其指定的目的地。单播优缺点:n单播的优点:1)服务器及时响应客户机的请求2)服务器针对每个客户不通的请求

5、发送不通的数据,容易实现个性化服务。单播的缺点:1)服务器针对每个客户机发送数据流,服务器流量客户机数量客户机流量;在客户数量大、每个客户机流量大的流媒体应用中服务器不堪重负。2)现有的网络带宽是金字塔结构,城际省际主干带宽仅仅相当于其所有用户带宽之和的5。如果全部使用单播协议,将造成网络主干不堪重负。现在的P2P应用就已经使主干经常阻塞。而将主干扩展20倍几乎是不可能。广播优缺点:n主机之间一对所有的通讯模式,网络对其中每一台主机发出的信号都进行无条件复制并转发,所有主机都可以接收到所有信息(不管你是否需要),由于其不用路径选择,所以其网络成本可以很低廉。有线电视网就是典型的广播型网络,我们

6、的电视机实际上是接受到所有频道的信号,但只将一个频道的信号还原成画面。在数据网络中也允许广播的存在,但其被限制在二层交换机的局域网范围内,禁止广播数据穿过路由器,防止广播数据影响大面积的主机。广播优缺点:n广播的优点:1)网络设备简单,维护简单,布网成本低廉2)由于服务器不用向每个客户机单独发送数据,所以服务器流量负载极低。广播的缺点:1)无法针对每个客户的要求和时间及时提供个性化服务。2)网络允许服务器提供数据的带宽有限,客户端的最大带宽服务总带宽。例如有线电视的客户端的线路支持100个频道(如果采用数字压缩技术,理论上可以提供500个频道),即使服务商有更大的财力配置更多的发送设备、改成光

7、纤主干,也无法超过此极限。也就是说无法向众多客户提供更多样化、更加个性化的服务。3)广播禁止允许在Internet宽带网上传输。组播优缺点:n主机之间一对一组的通讯模式,也就是加入了同一个组的主机可以接受到此组内的所有数据,网络中的交换机和路由器只向有需求者复制并转发其所需数据。主机可以向路由器请求加入或退出某个组,网络中的路由器和交换机有选择的复制并传输数据,即只将组内数据传输给那些加入组的主机。这样既能一次将数据传输给多个有需要(加入组)的主机,又能保证不影响其他不需要(未加入组)的主机的其他通讯。组播优缺点:n组播的优点:1)需要相同数据流的客户端加入相同的组共享一条数据流,节省了服务器

8、的负载。具备广播所具备的优点。2)由于组播协议是根据接受者的需要对数据流进行复制转发,所以服务端的服务总带宽不受客户接入端带宽的限制。IP协议允许有2亿6千多万个组播,所以其提供的服务可以非常丰富。 3)此协议和单播协议一样允许在Internet宽带网上传输。组播的缺点:1)与单播协议相比没有纠错机制,发生丢包错包后难以弥补,但可以通过一定的容错机制和QOS加以弥补。2)现行网络虽然都支持组播的传输,但在客户认证、QOS等方面还需要完善,这些缺点在理论上都有成熟的解决方案,只是需要逐步推广应用到现存网络当中。一些常用IP地址n一、0.0.0.0严格说来,0.0.0.0已经不是一个真正意义上的I

9、P地址了。它表示的是这样一个集合:所有不清楚的主机和目的网络。这里的“不清楚”是指在本机的路由表里没有特定条目指明如何到达。对本机来说,它就是一个“收容所”,所有不认识的“三无”人员,一律送进去。如果你在网络设置中设置了缺省网关,那么Windows系统会自动产生一个目的地址为0.0.0.0的缺省路由。n二、255.255.255.255限制广播地址。对本机来说,这个地址指本网段内(同一广播域)的所有主机。如果翻译成人类的语言,应该是这样:“这个房间里的所有人都注意了!”这个地址不能被路由器转发。一些常用IP地址n三、127.0.0.1本机地址,主要用于测试。用汉语表示,就是“我自己”。在Win

10、dows系统中,这个地址有一个别名“Localhost”。寻址这样一个地址,是不能把它发到网络接口的。除非出错,否则在传输介质上永远不应该出现目的地址为“127.0.0.1”的数据包。n四、224.0.0.1组播地址,注意它和广播的区别。从224.0.0.0到239.255.255.255都是这样的地址。224.0.0.1特指所有主机,224.0.0.2特指所有路由器。这样的地址多用于一些特定的程序以及多媒体程序。如果你的主机开启了IRDP(Internet路由发现协议,使用组播功能)功能,那么你的主机路由表中应该有这样一条路由。一些常用IP地址n五、169.254.x.x如果你的主机使用了D

11、HCP功能自动获得一个IP地址,那么当你的DHCP服务器发生故障,或响应时间太长而超出了一个系统规定的时间,Wingdows系统会为你分配这样一个地址。如果你发现你的主机IP地址是一个诸如此类的地址,很不幸,十有八九是你的网络不能正常运行了。n六、10.x.x.x; 172.16.x.x172.31.x.x; 192.168.x.x私有地址,这些地址被大量用于企业内部网络中。一些宽带路由器,也往往使用192.168.1.1作为缺省地址。私有网络由于不与外部互连,因而可能使用随意的IP地址。保留这样的地址供其使用是为了避免以后接入公网时引起地址混乱。使用私有地址的私有网络在接入Internet时

12、,要使用地址翻译(NAT),将私有地址翻译成公用合法地址。在Internet上,这类地址是不能出现的。发送应用进程UDPIPv4数据链路UDPIPv4数据链路数据链路IPv4UDP接收应用进程以太网头部IPv4头部UDP头部UDP数据子网128.7.6目的以太网=ff:ff:ff:ff:ff:ff帧类型=0800目的IP=128.7.6.255协议=UDP目的端口=520Sendto 目的IP=128.7.6.255 目的端口=520丢弃协议=UDP帧类型0800128.7.6.99=单播128.7.6.255=广播128.7.6.5=单播128.7.6.255=广播协议=UDP端口=520广

13、播的实现应用程序只能通过应用程序只能通过UDP方式发送广播。方式发送广播。一般情况下,如果调用一般情况下,如果调用sendto,只能向非广播,只能向非广播地址发送数据报。如果要发送广播数据报,必地址发送数据报。如果要发送广播数据报,必须告诉内核,可以通过设置须告诉内核,可以通过设置SO_BROADCAST套接口选项来做到这一点。套接口选项来做到这一点。int on=1;setsockopt(sockfd,SOL_SOCKET,SO_BROADCAST,&on,sizeof(int);广播实例服务端为tserv.c,运行时需指定广播地址和端口号,运行后每3秒发送一次广播,将本机时间通知本子网内所

14、有主机。服务器端程序服务器端程序tserv.c#include #include #include #include #define BUFLEN 255void getcurtime(char *curtime) time_t tm; time(&tm); snprintf(curtime,BUFLEN,%sn,ctime(&tm);int main(int argc,char *argv) struct sockaddr_in peeraddr;int sockfd,on=1;int num,i;char msgBUFLEN+1;if(argc!=3) printf(usage:%sn,a

15、rgv0); exit(0); sockfd=socket(AF_INET,SOCK_DGRAM,0); if(sockfd0) fprintf(stderr,socket creating error in ); exit(1);setsockopt(sockfd,SOL_SOCKET,SO_BROADCAST,&on,sizeof(int);memset(&peeraddr,0,sizeof(struct sockaddr_in);peeraddr.sin_family=AF_INET;if(inet_pton(AF_INET,argv1,&peeraddr.sin_addr)=0) pr

16、intf(Wrong dest IP addressn); exit(0);peeraddr.sin_port=htons(atoi(argv2);for(;)getcurtime(msg);int a;a=sendto(sockfd,msg,strlen(msg),0,(struct sockaddr *)&peeraddr,sizeof(struct sockaddr_in);printf(%d,a);fflush(stdout);sleep(3);客户端程序客户端程序 tcli.c (只需侦听某一固定端口的数据报只需侦听某一固定端口的数据报,接收一个数据报就返回。接收一个数据报就返回。)

17、#include #include #include #include #define BUFLEN 255int main(int argc,char* argv) struct sockaddr_in localaddr; int sockfd,n; char msgBUFLEN+1; if(argc!=2) printf(usage:%sn,argv0); exit(0); sockfd=socket(AF_INET,SOCK_DGRAM,0);if(sockfd0) fprintf(stderr,socket creating error in ); exit(1);memset(&l

18、ocaladdr,0,sizeof(struct sockaddr_in);localaddr.sin_port=htons(atoi(argv1);localaddr.sin_addr.s_addr=htonl(INADDR_ANY);int opt = SO_REUSEADDR;setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt);if(bind(sockfd,(struct sockaddr *)&localaddr,sizeof(struct sockaddr_in)0) fprintf(stderr,bind e

19、rror in );exit(2); n=read(sockfd,msg,BUFLEN);if(n=-1) fprintf(stderr,read error in ); exit(3);else msgn=0; printf(%s,msg);程序运行结果程序运行结果如果在服务器端输入./serv 222.18.113.171 1234则两个客户不会同时收到数据报。多播多播是通过D类地址进行的,D类地址的前4位为1110,后面28位为群播的组标识。地址范围224.0.0.0 到239.255.255.255特殊的IPv4多播地址:224.0.0.0 保留224.0.0.1 本子网上所有主机22

20、4.0.0.2 本子网上所有网关224.0.1.1 NTP(网络时间协议)组多播的原理当一个多播分组到达一个以太网时,形成帧后它的当一个多播分组到达一个以太网时,形成帧后它的MAC地地址为址为01:00:5e:xx:xx:xx,其后,其后23位由多播组标识的位由多播组标识的后后23位映射而成。例如目的地址为位映射而成。例如目的地址为224.0.1.1的多播分的多播分组,在以太网上帧的组,在以太网上帧的MAC地址就为地址就为01:00:5e:00:01:01,如下图示。,如下图示。1110000000000000000000010000000100000001000000000101111000

21、0000000000000100000001IP地址MAC地址由于多播IP地址中组标识有28位,而映射到MAC地址的只有23位,还差5位,所以有32个组将映射成相同的MAC地址,例如224.0.0.1,225.0.1.1,239.128.1.1都映射到MAC地址01:00:5e:00:01:01。因此要由IP层来检验到达的多播分组是否是自已所加入的多播组。如果不是,则抛弃该分组。应用程序应用程序UDPIP层层132.0.0.100数据链路层数据链路层52:37:4a:6d:7f:5e应用程序应用程序UDPIP层层132.0.0.129应用程序应用程序UDPIP层层132.0.0.168数据链路

22、层数据链路层52:23:4e:6f:2c:35数据链路层数据链路层00:2e:2c:5f:ae:3f发送数据报IP:224.0.1.1端口1234通过ARP解析224.0.1.1对应01:00:5e:00:01:01接收数据报端口1234应用程序指定132.0.0.129加入多播组224.0.1.1IP层指示接收MAC地址为01:00:5e:00:01:01的帧加入225.0.1.1丢弃多播数据报在子网中的发送接收多播的实现 应用程序只需向多播组地址发送数据报,接收应用应用程序只需向多播组地址发送数据报,接收应用程序加入这个多播组。在指定端口上进行侦听。程序加入这个多播组。在指定端口上进行侦听

23、。 加入多播组的方法是设置套接口选项加入多播组的方法是设置套接口选项IP_ADD_MEMBERSHIP.它要它要用要如下结构:用要如下结构:Struct ip_mreq struct in_addr imr_multiaddr; /*IPv4的的D类多播地址类多播地址*/Struct in_addr imr_interface; /*本地接口本地接口IPv4地址地址*/;例:例:setsockopt(sockfd,IPPROTO_IP,IP_ADD_MEMBERSHIP,&mcaddr,sizeof(struct ip_mreq)多播的实现服务器端程序没有什么改变,只要将设置socket选项S

24、O_BROADCAST的那行去掉就可以了。客户程序源码如下页:源程序源程序mtcli.c#include #include #include #include #define BUFLEN 255int main(int argc,char* argv) struct sockaddr_in localaddr; int sockfd,n; struct ip_mreq mcaddr; char msgBUFLEN+1; if(argc3) printf(usage:%sn,argv0); exit(0); sockfd=socket(AF_INET,SOCK_DGRAM,0);if(sockfd0) fprintf(stderr,socket creating error in ); exit

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论