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

下载本文档

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

文档简介

Linux网络编程第十单元广播与多播编程1/20单播一台主机向另一台主机发送数据广播一台主机向本子网内所有主机发送数据多播一台主机向网络中的部分主机发送数据2/203第十单元广播与多播编程10.1

广播的概念10.2

多播的概念

3/20主机A向B发送数据过程某机器A要向主机B发送报文,会查询本地的ARP缓存表,找到B的IP地址对应的MAC地址后,就会进行数据传输。如果未找到,则广播A一个ARP请求报文(携带主机A的IP地址Ia和物理地址Pa),请求IP地址为Ib的主机B回答物理地址Pb。网上所有主机包括B都收到ARP请求,但只有主机B识别自己的IP地址,于是向A主机发回一个ARP响应报文。其中就包含有B的MAC地址,A接收到B的应答后,就会更新本地的ARP缓存。接着使用这个MAC地址发送数据。以太网就是以广播方式工作的,所以A发送的数据被子网所有主机接收,每个主机判断帧的MAC地址是否与自己的一致,不一致则丢弃,一致则向上层传递数据判断处理。4/20广播一个IP地址由网络号和主机号组成。所有主机号部分为全1的IP地址是广播地址。某台主机向子网内所有主机发数据,即向IP为主机号全1的地址发数据。当发送方主机发现目的地址为子网广播地址时,会自动将数据帧中MAC地址设为全1。带有这样MAC地址的帧在经过子网任何主机都将被数据链路层接收并向上层协议传递,如IP层。上层协议经过判断,如果有相应进程处理广播数据报,则发送到进程相应的端口,否则丢弃数据。5/20发送应用进程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端口=5206/20广播的实现服务器端:创建UDP套接字设置套接字要发送广播数据调用sendto函数向广播地址发送数据,如192.168.50.255。客户端:创建UDP套接字绑定本地地址到套接字上。接收数据。7/20设置套接字发送广播数据一般情况下,如果调用sendto,只能向非广播地址发送数据报。如果要发送广播数据报,必须告诉内核,可以通过设置SO_BROADCAST套接口选项来做到这一点。inton=1;setsockopt(sockfd,SOL_SOCKET,SO_BROADCAST,&on,sizeof(int));8/20广播实例服务端为tserv.c,运行时需指定广播地址和端口号,运行后每3秒发送一次广播,将本机时间通知本子网内所有主机。客户端为tcli.c,作用是侦听某一固定端口的数据报,接收一个数据报就返回。9/20第十单元广播与多播编程10.1

广播的概念10.2

多播的概念

10/20多播多播是对单播和广播的一种折中方案。广播限于局域网,多播可以用于局域网也可跨广域网。11/20多播地址多播是通过D类地址进行的,D类地址的前4位为1110,后面28位为多播的组标识。地址范围224.0.0.0到239.255.255.255特殊的IPv4多播地址:224.0.0.0保留224.0.0.1本子网上所有主机224.0.0.2本子网上所有网关224.0.1.1NTP(网络时间协议)组12/20多播的原理当一个多播分组到达一个以太网时,形成帧后它的MAC地址为01:00:5e:xx:xx:xx,其后23位由多播组标识的后23位映射而成。例如目的地址为224.0.1.1的多播分组,在以太网上帧的MAC地址就为01:00:5e:00:01:01。11100000000000000000000100000001000000010000000001011110000000000000000100000001IP地址MAC地址13/20多播地址中的组由于多播IP地址中组标识有28位,而映射到MAC地址的只有23位,还差5位,所以有32个组将映射成相同的MAC地址,例如224.0.1.1,225.0.1.1,239.128.1.1都映射到MAC地址01:00:5e:00:01:01。因此要由IP层来检验到达的多播分组是否是自已所加入的多播组。如果不是,则抛弃该分组。14/20应用程序UDPIP层132.0.0.100数据链路层52:37:4a:6d:7f:5e应用程序UDPIP层132.0.0.129应用程序UDPIP层132.0.0.168数据链路层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丢弃多播数据报在子网中的发送接收15/20多播的实现服务器端:创建UDP套接字调用sendto函数向多播地址发送数据,如224.0.4.5。客户端:创建UDP套接字加入一个多播组。绑定本地地址到套接字上。接收数据。16/20如何加入多播组加入多播组的方法是:设置套接口选项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

温馨提示

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

评论

0/150

提交评论