论文部分内容阅读
摘要:我们常常在管理网络的时候,网络管理员经常需要发送某条消息或者信号给一组用户,我们通常将需要信息的终端用户编到一个组里进行逐个发送,假如每个用户单独的发送,虽然可行,但是操作相对繁琐且重复性太大,还容易引发一些因为漏发重发出现问题的情况。所以多播通信系统(也称之为多播技术)也就应运而生,专门为了更加高效准确的应对这种多重发送的情况,是一种基于IP层的通信技术。多播是一种在一个发送者和多个接收者之间进行通信的方法。与任播(anycast)和单播(unicast)一样,多播也是一种IPv6的包传送方式。多播在CDPD技术中的无线数据网络中也可以使用。
关键词:局域网;多播技术;套接字;
一、设计原理
“多播”亦称“多点传送”(multicast),即一台主机发送的数据包可以同时被其他几台符合条件的计算机接收,这台主机和那些符合条件的计算机组成一个组,它们在组内的通信是广播。多核连接的原理是设置某些网络计算机的网卡的多功能传输模式,并指定不过滤目标物理地址为特定多媒体传输地址的数据帧。这样,这些计算机的驱动程序的程序就可以同时接受以组播地址為目的地物理地址的数据帧,而其他计算机的驱动程序则无法接收。与流式传输相比,该技术可以有效减轻网络上组播组以外的其他主机的负担,因为发送到组播组的数据不会传递给它们的驱动程序,从而避免不必要的浪费。资源。开发这项技术的目的是为了弥补“广播”通信的不足。
多播地址(multicast address)是一组主机的标示符,它已经加入到一个多播组中。在以太网中,多播地址是一个 48 位标识符,用于标识应该在该网络上接收数据包的一组站。在 IPv4 中,它历来被称为 D 类地址,一种 IP 地址类型,范围从 224.0.0.0 到 239.255.255.255。 D 类地址用于组播。
上述的,则是根据相同的IP多播地址来分类的,所有的 相同的IP多播地址的主机一起构成了一个主机组,也可以称之为多播组。并且多播组中的主机的数量是动态的,随着具体情况的不同而变化的,任意一台主机无论地理位置和现有的多播组中的主机的数量的多少有什么分别,只要满足条件都可以随时加入该多播组,并且也可以随时离开,并且一台主机还可以分属于若干个不同的主机组,具有很强的灵活性。
二、实现方法
在TCP/IP协议中,采用D类地址来支持多播技术,所以一共有28位可以用来分组作为标记,28位则可以同时支持做多大约25亿个多播组,所以在用量环节不用担心没有地址用来分组或者不够用来分组。所以当一个进程通过一个D类地址来发送多播的数据包的时候,则会尽最大努力的将其发送到,但是不保证送到。通过这个能够看得出来这个传输模式数据包是类似于UDP的不可靠协议,而不是TCP的可靠协议。当这些地址全部加入多播组之后,源主机发送的任何数据都会完全的复制出来一份,发送给组内包括原始源节点在内的所有地址。D类地址的IP范围在244.0.0.0-239.255.255.255。分为永久地址和临时地址2类,其中永久地址主要保留下来以作为特殊用途,比如244.0.0.0没有使用,244.0.0.1代表子网内所有主机,244.0.0.2则代表了所有的路由器。而临时主机在使用前要先创建一个多播组,通过进程来控制主机加入或者退出某一个组,而每一个主机都要实时的记录其进程所归属的组。多播是由多播路由器实现,普通路由器也可以经过设置而具备多播路由器的功能。多播路由器则发送信息给位于子网上的主机,而主机则向多播路由器回复报告进程在当前所述的分组,而各个主机则把相关的D类地址返回。这里面使用到了IGMP协议,一种类似于ICMP,一种格式相对简单只有询问和相应的2种分组功能的协议。
三、设计方法和步骤
(1)初始化Winsock资源并创建套接字 在使用 windows的套接字之前,必须首先初始化 windows sockets DLL,这里通过调用WSAStartuo()函数来实现,可以让应用程序制定API要求的版本。可以随时根据情况需要加入所需要加入的多播组,而且发送数据方式还是多方面的,并且创建的套接字还具有重叠性。
#include <sys/types.h>
#include <sys/socket.h>
int socket(int domain, int type, int protocol); 返回套接字
(2)构建服务器地址结构
struct sockaddr_in serveraddr;
#include <strings.h>
bzero(&serveraddr, sizeof(serveraddr));
serveraddr.sin_family = AF_INET;
serveraddr.sin_addr.s_addr = htonl(INADDR_ANY); //IP
serveraddr.sin_port = htons(SERVER_PORT);//端口
(3)绑定地址
int bind(int sockfd, const struct sockaddr *addr,
socklen_t addrlen);
(4)构建组播属性结构
struct ip_mreqn group;
#include <arpa/inet.h>
inet_pton(AF_INET,GROUP,&group.imr_multiaddr);//设置组播地址 net_pton(AF_INET,"0.0.0.0", &group.imr_address);//设置本地地址
group.imr_ifindex=if_nametoindex("ent0");//设置网卡接口
(5)设置组播权限和属性
setsockopt(sockfd,IPPROTO_IP,IP_MULTICAST_IF,&group,
sizeof(group));//设置组播权限及选项
(6)设置客户端组播地址
struct sockaddr_in cliaddr;
bzero(&cliaddr,sizeof(cliaddr));
cliaddr.sin_family=AF_INET;
inet_pton(AF_INET,GROUP,&cliaddr.sin_addr.s_addr);
cliaddr.sin_port=htons(CLIENT_PORT);
(7)發送数据调用sendto()函数,可在指定的UDP套接字上向指定的多播组发送多播数据。调用时,参数to应指向多播组的IP地址。值得注意的是,若一个应用程序只是打算给多播组发送 数据,便不必加入一个多播组。
sendto(sockfd,buf,strlen(buf),0,(structsockaddr*)&cliaddr,
sizeof(cliaddr));//往组播地址发送信息,返回数据大小
(8)丶从多播组接收数据随后关闭并释放资源函数recvfrom()的功能很简单,在多播通信结束后,则调用closesocket()来关闭整个套接字体系,然后释放 资源。
4 结语
多播作为一种行之有效的节约网络带宽的一对多的通信方式,在现在的网络中有着广泛的使用。在网络中需要将节点信号发送到到多个节点的情况下,重复点对点和广播方式都会浪费带宽,所以多播有了广阔的适用范围,这也是我们要做多播方法的意义所在。
参考文献
[1]于秋生.Visual C++ 程序设计教程[M].北京:机械工业出版社,2004.
[2]任泰明.TCP/IP协议与网络编程[M].西安:西安电子科技大学出版社,2004.
[3]张继军.基于分组网络的服务质量保证[M].北京:北京邮电大学出版社,2004
[4]吴应桦,郭胜国."基于局域网的多播通信系统的设计."无线互联科技 .(2015):13-14.Print.
关键词:局域网;多播技术;套接字;
一、设计原理
“多播”亦称“多点传送”(multicast),即一台主机发送的数据包可以同时被其他几台符合条件的计算机接收,这台主机和那些符合条件的计算机组成一个组,它们在组内的通信是广播。多核连接的原理是设置某些网络计算机的网卡的多功能传输模式,并指定不过滤目标物理地址为特定多媒体传输地址的数据帧。这样,这些计算机的驱动程序的程序就可以同时接受以组播地址為目的地物理地址的数据帧,而其他计算机的驱动程序则无法接收。与流式传输相比,该技术可以有效减轻网络上组播组以外的其他主机的负担,因为发送到组播组的数据不会传递给它们的驱动程序,从而避免不必要的浪费。资源。开发这项技术的目的是为了弥补“广播”通信的不足。
多播地址(multicast address)是一组主机的标示符,它已经加入到一个多播组中。在以太网中,多播地址是一个 48 位标识符,用于标识应该在该网络上接收数据包的一组站。在 IPv4 中,它历来被称为 D 类地址,一种 IP 地址类型,范围从 224.0.0.0 到 239.255.255.255。 D 类地址用于组播。
上述的,则是根据相同的IP多播地址来分类的,所有的 相同的IP多播地址的主机一起构成了一个主机组,也可以称之为多播组。并且多播组中的主机的数量是动态的,随着具体情况的不同而变化的,任意一台主机无论地理位置和现有的多播组中的主机的数量的多少有什么分别,只要满足条件都可以随时加入该多播组,并且也可以随时离开,并且一台主机还可以分属于若干个不同的主机组,具有很强的灵活性。
二、实现方法
在TCP/IP协议中,采用D类地址来支持多播技术,所以一共有28位可以用来分组作为标记,28位则可以同时支持做多大约25亿个多播组,所以在用量环节不用担心没有地址用来分组或者不够用来分组。所以当一个进程通过一个D类地址来发送多播的数据包的时候,则会尽最大努力的将其发送到,但是不保证送到。通过这个能够看得出来这个传输模式数据包是类似于UDP的不可靠协议,而不是TCP的可靠协议。当这些地址全部加入多播组之后,源主机发送的任何数据都会完全的复制出来一份,发送给组内包括原始源节点在内的所有地址。D类地址的IP范围在244.0.0.0-239.255.255.255。分为永久地址和临时地址2类,其中永久地址主要保留下来以作为特殊用途,比如244.0.0.0没有使用,244.0.0.1代表子网内所有主机,244.0.0.2则代表了所有的路由器。而临时主机在使用前要先创建一个多播组,通过进程来控制主机加入或者退出某一个组,而每一个主机都要实时的记录其进程所归属的组。多播是由多播路由器实现,普通路由器也可以经过设置而具备多播路由器的功能。多播路由器则发送信息给位于子网上的主机,而主机则向多播路由器回复报告进程在当前所述的分组,而各个主机则把相关的D类地址返回。这里面使用到了IGMP协议,一种类似于ICMP,一种格式相对简单只有询问和相应的2种分组功能的协议。
三、设计方法和步骤
(1)初始化Winsock资源并创建套接字 在使用 windows的套接字之前,必须首先初始化 windows sockets DLL,这里通过调用WSAStartuo()函数来实现,可以让应用程序制定API要求的版本。可以随时根据情况需要加入所需要加入的多播组,而且发送数据方式还是多方面的,并且创建的套接字还具有重叠性。
#include <sys/types.h>
#include <sys/socket.h>
int socket(int domain, int type, int protocol); 返回套接字
(2)构建服务器地址结构
struct sockaddr_in serveraddr;
#include <strings.h>
bzero(&serveraddr, sizeof(serveraddr));
serveraddr.sin_family = AF_INET;
serveraddr.sin_addr.s_addr = htonl(INADDR_ANY); //IP
serveraddr.sin_port = htons(SERVER_PORT);//端口
(3)绑定地址
int bind(int sockfd, const struct sockaddr *addr,
socklen_t addrlen);
(4)构建组播属性结构
struct ip_mreqn group;
#include <arpa/inet.h>
inet_pton(AF_INET,GROUP,&group.imr_multiaddr);//设置组播地址 net_pton(AF_INET,"0.0.0.0", &group.imr_address);//设置本地地址
group.imr_ifindex=if_nametoindex("ent0");//设置网卡接口
(5)设置组播权限和属性
setsockopt(sockfd,IPPROTO_IP,IP_MULTICAST_IF,&group,
sizeof(group));//设置组播权限及选项
(6)设置客户端组播地址
struct sockaddr_in cliaddr;
bzero(&cliaddr,sizeof(cliaddr));
cliaddr.sin_family=AF_INET;
inet_pton(AF_INET,GROUP,&cliaddr.sin_addr.s_addr);
cliaddr.sin_port=htons(CLIENT_PORT);
(7)發送数据调用sendto()函数,可在指定的UDP套接字上向指定的多播组发送多播数据。调用时,参数to应指向多播组的IP地址。值得注意的是,若一个应用程序只是打算给多播组发送 数据,便不必加入一个多播组。
sendto(sockfd,buf,strlen(buf),0,(structsockaddr*)&cliaddr,
sizeof(cliaddr));//往组播地址发送信息,返回数据大小
(8)丶从多播组接收数据随后关闭并释放资源函数recvfrom()的功能很简单,在多播通信结束后,则调用closesocket()来关闭整个套接字体系,然后释放 资源。
4 结语
多播作为一种行之有效的节约网络带宽的一对多的通信方式,在现在的网络中有着广泛的使用。在网络中需要将节点信号发送到到多个节点的情况下,重复点对点和广播方式都会浪费带宽,所以多播有了广阔的适用范围,这也是我们要做多播方法的意义所在。
参考文献
[1]于秋生.Visual C++ 程序设计教程[M].北京:机械工业出版社,2004.
[2]任泰明.TCP/IP协议与网络编程[M].西安:西安电子科技大学出版社,2004.
[3]张继军.基于分组网络的服务质量保证[M].北京:北京邮电大学出版社,2004
[4]吴应桦,郭胜国."基于局域网的多播通信系统的设计."无线互联科技 .(2015):13-14.Print.