学年论文﹙设计﹚
题 目 IP组播技术设计与实现
学生姓名 学号
所在院(系) 电子与信息工程
专业班级
指导教师
2010年 6 月 25 日
课程设计报告书目录
IP组播技术研究与实现
【摘要】介绍了ip组播技术的传输方式、地址、体系结构、应用模式、以及利用window的WinSock的API应用编程的基本命令和方法步骤
【关键词】ip组播;ip地址;机构体系;组播协议;WinSock;API编程
The ip multicast engineering research with realizes
Abstract: Introduced the ip multicast technology's transmission mode, the address, the
architecture, the application pattern, as well as use window WinSock the API application
programming basic command and the method step
Key words:ip multicast; ,ip address, Organization system, Multicast agreement, WinSock,
API programming
0 引言
随着网络技术的不断完善和发展, 以全球互联网(internet)为代表的各种网络在近十年得到了迅猛的发展。网络带宽越来越高, 用户数量越来越多, 视频点播(VOD/AOD)、远程教学、新闻发布、网络电视,多站点文件传输、多媒体远程教育、计算机支持的协同工作等新类型的多媒体业务将成为新一轮运营竞争的焦点,在这种情况下, 采用传统的客户服务器模型将重浪费网络资源, 相同的数据可能在网上传播很多次, 在一些带宽较低的链路上, 极可能引起严重的通信瓶径,就必然带来了网络拥挤问题。为了缓解网络瓶颈, 人们提出各种方案, 主要包括采用:链路聚合技术, 以增加互连带宽采用服务器的集群技术,以改变网络流量结构、减轻主干网的瓶颈应用Qos机制, 把带宽分配给一部分应用采用IP组播技术,有效解决网络的拥塞等,IP组播技术以其独特的优越性使它成为当前网络多媒体信息技术的佼佼者。
1 IP组播技术
1.1组播简介
谈IP组播技术之前我们先说说IPv4定义包的的几中传输方式: 课程设计报告书目录
1.1.1单播(Unicast) 传输 在信息的发送者与接收者之间建立点对点的网络连接。如果一个发送者需要同时给多个接收者发送相同的数据, 就必须相应地复制多份相同的数据包。如果有大量的主机希望获得同一份数据包时,这将使发送者负担沉重、网络延时增加。为保证服务质量就需要增加硬件和带宽。
1.1.2广播(Broadcast) 传输 是指在IP子网内广播数据包,所有在子网内部的主机都将收到这些数据包。广播意味着网络向子网每一个主机都投递一份数据包,不论这些主机是否乐于接收该数据包。所以广播的使用范围非常小,只在本地子网内有效,通过路由器和交换机网络设备控制广播传输。
1.1.3组播(Multicast) 传输 他是在发送者和每一个接收者之间实现点到多点的网络连接。如果一个发送者需要同时给多个接收者传输相同的数据, 只需构造一份相同的数据包,
在其中的信宿地址域中添入IP 组播地址, 一次发送出去, 而不必端对端地多次重复发送。他提高了数据传输的效率, 减少了网络拥塞。
1.2 组播技术体结构
组播协议分为主机-路由器之间的组成员关系协议和路由器-路由器之间的组播路由协议。组成员关系协议包括IGMP(互连网组管理协议)。组播路由协议分为域内组播路由协议及域间组播路由协议。域内组播路由协议包括PIM-SM(Protocol Independent Multicast-Sparse
Mode)、PIM-DM(Protocol Independent Multicast-Dense Mode)、DVMRP(Distance Vector
Multicast Routing Protocol)等协议,域间组播路由协议包括MBGP(MultIProtocol BGP)、MSDP(Multicast Source Discovery Protocol)等协议。同时为了有效抑制组播数据在链路层的扩散,引入了IGMP Snooping、CGMP等二层组播协议。
IGMP建立并且维护路由器直联网段的组成员关系信息。域内组播路由协议根据IGMP维护的这些组播组成员关系信息,运用一定的组播路由算法构造组播分发树进行组播数据包转发。域间组播路由协议在各自治域间发布具有组播能力的路由信息以及组播源信息,以使组播数据在域间进行转发。
1.3组播IP地址
组播IP地址用于标识一个IP组播组。IANA(internet assigned number authority)把D类地址空间分配给IP组播,其范围是从224.0.0.0到239.255.255.255。),IP组播地址前四位均为1110. 224.0.0.0~224.0.0.255为预留的组播地址(永久组地址),地址224.0.0.0保留不做分配,其它地址供路由协议使用; 224.0.1.0~238.255.255.255为用户可用的组播地址(临时组地址),全网范围内有效;239.0.0.0~239.255.255.255为本地管理组播地址,仅在课程设计报告书目录
特定的本地范围内有效。
2 实现IP组播的前提条件和技术体系结构
实现IP组播传输,则组播源、接受者及两者之间的下层网络都必须支持组播。这包括以下几方面:(1)主机的TCP/IP的实现支持接受和发送IP组播;(2)主机的网络接口卡支持组播;(3)有一套用于加入、离开、查询的组播管理协议,即IGMP(V1,V2);(4)有一套IP地址分配策略。并能将第3层IP地址映射到第2层MAC地址上;(5)支持IP组播的应用软件;(6)所有介于组播源和接受者之间的路由器,集线器、交换机、TCP/IP栈、防火墙均需支持组播。
PIM daemom通过系统调用从底层的socket接受消息,PIM消息,IGMP消息和内部控制消息,
具体的功能流程图如图1所示:
图1 组播路由协议流程图
其中PIM从PIM的socket接受的消息通过PIM接受函数处理,从IGMP的socket接受的IGMP消息和内部控制消息通过IGMP接受函数处理各种消息的分内和含义。(1)PIM消息的PIM-HELLO邻居发送消息,在每个端口上周期发送,消息接受方据此确定与发送方的蔺家咀关系。(2)IGMP消息,MEMBERSHIP-REPORT:成员关系报告消息。(3)内部控制消息:nocache指示底层数据转发时未找到匹配的缓冲区,wrongvifPIM
控制消息
IGMP模块 PIM daemon
组播路由协议模块
原始协议
输入
Socket
消息发送 Socket
选项设置 Socket
选项查询 IO控制
组播数据转发模块 KERNEL
IP包 组播
数据包 课程设计报告书目录
指示组播数据从不正确的入口输入。Wholepkt指示消息中包含整包组播数据,用于注册。
组播协议分为主机-路由器之间的组成员关系协议和路由器-路由器之间的组播路由协议。组成员关系协议包括IGMP(互连网组管理协议)。组播路由协议分为域内组播路由协议及域间组播路由协议。域内组播路由协议包括PIM-SM(Protocol Independent Multicast-Sparse
Mode)、PIM-DM(Protocol Independent Multicast-Dense Mode)、DVMRP(Distance Vector
Multicast Routing Protocol)等协议,域间组播路由协议包括MBGP(Multiprotocol BGP)、MSDP(Multicast Source Discovery Protocol)等协议。同时为了有效抑制组播数据在链路层的扩散,引入了IGMP Snooping、CGMP等二层组播协议。
3 IP 组播的应用模式
(1) 点对多点应用模式点对多点应用模式是指一个发送者, 多个接收者的应用模式, 也是最常见的组播应用模式。典型应用有视频会议、网络电视( IPTV )、分布式数据库更新、广播和监控等。
(2) 多点对点应用模式多点对点应用模式是指多个发送者, 一个接收者的应用模式。通常是应用在具有双向请求的场合, 任何一端(多点或点) 都有可能发起请求。在这种多点对点的应用模式中, 接收者可以接收多个发送者发送的数据, 其典型的应用有网络拍卖、投票选举、数据收集、远程视频采集监控。
(3) 多点对多点的应用多点对多点的应用模式是指多个发送者和多个接收者的应用模式。通常, 每个接收者可以接收多个发送者发送的数据, 同时, 每个发送者可以把数据发送给多个接收者, 其典型的应用有多媒体会议、协同工作、远程学习、并发处理、资源同步等。
4 利用WinSock 实现IP 组播通信
Windows Sockets 定义了Windows 的网络编程接口,可以运行在包括TCP IP, XN
SDECN,IPX SPX 等多种协议之上。而Windows Sockets 类则是对WindowsSocket sAPI 封装, 包括Csocket 和CasyncSocket 类。使用他们可以大大简化网络通信程序的编写。利用Berkeley Socket 现IP 组播通信的主要过程和编程方法如下: 课程设计报告书目录
图2 Winsock 实现IP 组播过程流程图
(1) 使用函数Socket () 创建1 个UDP 套接字。
(2) 使用函数Bind () 将套接字与本地的某个地址和端口连接起来。(3) 使用IP_
Multicast_ TTL 选项调用函数SetSockopt () 来设置TTL (0~ 255) , 其缺省值为1, 表示组播数据全部在一个网段内, 例如:
U _ Char t t l;
SetSockopt (SOCK, IPPRO TO _ IP, IP_ MUL TICAST_
TTL , &t t l, Sizeof ( t t l) ) ;
(4) 设置IP_ Add_ Membership 选项和要加入的组播组的地址结构, 调用函数Setsockopt () 加入到指定的组播组。如只打算发送数据, 则不必加入组播组, 例如:
Struct ip _ mreq;
{struct in_ addrir_ mult iaddr, st ruct in_ addrimr_
interface}mreq;
Setsockopt (SOCK, IPPRO TO _ IP, IP_ ADD_
MEMBERSH IP, &m req, sizeof (mreq) ) ;
(5) 调用函数Sendto ( ) 发送组播数据, 调用函数Recvfrom () 接收组播数据。
(6) 设置IP_ Drop_ Membership 选项和要脱离的组播组的地址结构。调用函数Setsockopt () 脱离指定的组播组, 例如: