IP组播通信机制及其实现_刘波

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

并采用Winsock2实现了一个
Mechanism and Implementation of IP Multicast Communication
LIU Bo
(Department of Computer Science South China Normal University Guangzhou 510631) Abstract Multicast communication is a very effective communication mode which can lighten greatly network loads and avoid wasting
作者简介 刘 波 1968~ 统 计算机网络 收稿日期 2 0 0 0 - 1 1 - 2 3
男 讲师 主要研究方向 操作系
131
播组的数据时 就会将数据转发给子网上对应的组成员 当在一个路由器上注册了一个或多个组播组时 该路由
器每隔一段时间就会利用IGMP协议(使用IP地址224.0.0.1)向 子网发出组成员身份查询报文 子网内的组成员利用IGMP 协议报告自己的组成员身份 如果存在一个成员仍在使用某 个组播地址 它就会用一条IGMP消息作出响应 以便路由 器知道子网内仍然存在那个组播组的成员 以后会继续转发 那个组播地址对应的组播数据 否则路由器会停止为那个组 播地址转发任何数据 为了避免IGMP查询和应答报文占用 太多的带宽资源 IGMP协议第二版允许组成员在脱离组播 组时主动向路由器发送一条"离开"消息 而不是等待路由器 的查询 在路由器上保存着一个参考性的组成员计数 每当 收到一条"离开"消息 就将相应的组成员计数减一 当子网 上所有成员都脱离了某个组播地址时 路由器会停止转发属 于该组播组的数据
(3)Internet组管理协议(IGMP) IGMP协议[4]由IP组播通信专用 用于管理组成员加入 或脱离组播组 当一个主机加入一个组播组时 它利用 IGMP协议(使用IP地址224.0.0.2)通知子网上的所有路由器 以便在路由器上建立相应的组播路由 表明在该子网上存在 属于那个组播组的成员 以后当路由器接收到发送给那个组
测网上各主机的IGMP响应 如果发生冲突 再尝试另一个 地址 直到无冲突为止
(2)IP组播的控制层面与数据层面 组播通信包wk.baidu.com控制层面与数据层面[3] 控制层面规定了 组成员如何组织起来 数据层面规定数据如何在组成员之间 传送 控制层面包括有根控制层面和无根控制层面
有根控制层面 存在一个特殊的组成员 作为根节点 其他 组成员都是叶节点 每个组播组都只有一个根节点 由根节点负责 组播组的创建 根节点可向任意数量的叶节点发出邀请 然后叶节 点适时申请加入相应的组播组
当路由器接收到一个组播分组时 记下发送站点S和接口I 如果I属于通向S的最短路径 就将分组转发给除I外的所有 接口 如果在第 步测试失败 就不转发分组 RPF算法利用路由表确定接收分组的接口I是否是通向S 的最短路径 然后决定如何处理分组(转发或丢弃) 实际上 需要计算的是从发送站点到当前站点的最短路径 而不是从 当前站点到发送站点的最短路径 当数据链路不对称时 它 们可能不同 一种好的做法是在路由器接收到一组播分组 时 若它处在从发送站点到下一跳之间的最短路径上就转发 分组 否则就不转发 利用OSPF的组播扩充 根据OSPF路 由器中的链路状态数据库可实现上述操作 从而生成从发送 站点到所有目的站点的"最短路径树" T2 T2具有下列特性 组播分组通过的路径是从发送站点到目的站点的最短路径 不同的发送站点对应的"最短路径树"不同 来自不同站点的 组播分组可通过不同链路传送 从而减少网络拥塞的发生 对于由上述方法生成的树T 利用组成员关系信息剪裁 掉T中不含组成员的树枝 生成组播树Ts 然后利用Ts转发 由S发出的组播分组 剪枝(Prune)的主要过程如下所示 在发送节点S发出第一个组播分组时执行扩散操作 即让第
无根控制层面 不存在根节点 所有组成员都是叶节点 各 成员节点之间是对等的 任何成员都可自由地加入一个组播组
数据层面包括有根数据层面和无根数据层面 有根数据层面 存在一个根节点 其他组成员都是叶节点
数据的传输只能在根节点与叶节点之间进行 既可是单向的 也 可 是双向的 由根节点发出的数据可由每个叶节点接收到 而由叶节 点发出的数据只会被根节点接收到
132
一个组播分组传播到T的所有节点 当T中的叶子节点由接口I接收到第一个分组时 如果该节点
对应的子网中存在组成员 则保留该节点 否则就剪掉该叶子节 点 并向发出该分组的路由器回送一个"剪枝"消息 (S I G) 表示 在接口I上不要再送来从节点S发送到组播组G的分组
中介路由器接收到"剪枝"报文就在内存中将它保存起来 如果 中介路由器在它转发第1个分组的所有接口上都收到一个"剪枝"报文 就剪掉该中介路由器节点 并沿T向上一个节点转发"剪枝"报文 上一 个节点也如此进行 最后T中只剩下通向目的节点的活动树枝了
到达目 的站点 的距离
下一跳 路由器
的IP 地址
通向该 路由器 的接口
表项更 新对应
的计 时器
图1 路由表的表项结构 路由器使用"距离向量组播路由协议"DVMRP(Distance Vector Multicast Routing Protocol)交换距离向量 (目的站点 IP 到该站点的距离)的更新信息 以更新路由表 RPF算 法使用路由表计算反向路径(从当前路由器到发送站点S的路 径) 生成反向路径转发树 路由器之间还使用DVMRP协议 交换当前组成员状况信息 由RPF算法生成反向路径转发树T1的主要过程如下
1 IP组播通信机制
(1) IP组播地址与组播组 IP组播地址是D 类IP地址 介于224. . . 与239.255. 255.255之间 其中224. . . 与224.0.0.255之间的地址是 为路由协议以及其它低级拓扑查找与维护协议保留的 用户 不可使用 例如224.0.0.2代表子网内的所有路由器 224.0.0. 1代表子网内的所有主机 它们只能由IGMP协议使用 一个 组播地址用来标识一组目标主机 对应同一个组播地址的目 标主机构成一个组播组 在一个组播地址发送数据时 数据 将发给属于该组播组的各个成员 IP组播地址分为两类 永久性组播地址和暂时性组播地 址 永久性组播地址是由Internet中央管理机构分配 用于固 定的组播组 不管是否存在组成员 该组播组始终存在 暂 时性组播地址的分配没有规定 用户可自由选择 不同网络 中的组播应用若只限制在本网络内 可以采用相同的IP组播 地址 而不会引起冲突 但如果组播的范围是跨网络的 采 用相同的IP组播地址就会引起冲突 解决方法最好是由一个 网络管理机构统一分配 或者是随机选择一个组播地址 监
第 27卷 第 6期
Vol.27
6
计算机工程 Computer Engineering
2001年 6月 June 2001
网络与通信
文章编号 1000 3428(2001)06 0131 03
文献标识码 A
中图分类号 TP914.3
IP组播通信机制及其实现
刘波
华南师范大学计算机科学系 广州 510631 摘 要 组播通信可有效减轻网络负担 避免资源浪费 是一种十分有效的通信方式 介绍了IP组播通信机制 多方会话系统MultiChat 以通过IP组播实现多人之间基于正文的对话 关键词 IP组播 Winsock Internet组管理协议 组播路由 组播树
resources This paper introduces the mechanism of IP multicast communication and the implementation of MultiChat --a conversational system
with Winsock 2 in order to realize conversations for persons based on text using IP multicast Key words IP multicast Winsock Internet group management protocol Multicast route Multicast tree
组播(Multicast)是一种将数据从一个成员发出 然后传 输给其他一个或多个成员的通信技术 介于单播(Unicast)与 广播(Broadcast)之间 其中单播是指将数据从一个发送站点 传输到一个接收站点 而广播是指将数据发送给网络中的所 有站点 在需要向多个站点发送相同数据时 采用单播方 式 发送站点必须将同样的数据重复发送多次 网络通信量 大 采用广播方式 网络中的每个站点都将接收到数据 不 管该站点是否需要该数据 这样会浪费较多的主机资源 而 采用组播通信 发送站点向某一特殊IP地址(即IP组播地址) 发送数据 网络中与该地址相关的接收站点都可接收到数 据 无关站点将不接收这些数据 因而可有效减轻网络通信 负担 避免资源浪费 组播通信是一种非常有效的通信方 式 在Internet上有较广泛的应用 例如在多媒体会议[1] 计 算机支持的协同工作CSCW 多站点文件传输和资源发现[2] 等方面具有特殊的作用
(4)IP组播路由 当前Internet上进行组播的经验主要来自Mbone[2] 在 MBone里使用的组播路由算法是 调用"反向路径转发"RPF 算法 根据路由表为每个发送站点S生成一棵反向路径转发 树T1 调用剪枝算法对T1进行剪枝 以生成发送站点S对应 的组播树 图1描述了路由表的表项结构
目的站点 IP地址
无根数据层面 不存在根节点 所有组成员都是叶节点 各 成员节点之间是对等的 所有组成员都能向组内其他成员发送数 据 也可接收由其他成员回送的数据
IP组播在控制层面与数据层面上都是无根的 任何成员 可随时加入或脱离组播组 组成员数目与网络拓扑可动态变 化 网络中的任何节点如果只打算向某个组播组发送数据 则不必加入该组播组 但如果打算从某个组播组接收数据 则必须先要加入该组播组
经过一段时间(该时间与网络拓扑 组成员关系的变化时限 有关) "剪枝"报文会从路由器的内存中删除 下一个组播分组将再 次扩散到T的所有节点 开始新的剪枝过程 以适应组成员关系和 网络拓扑的变化
上面的剪枝过程主要存在下列缺点
组播树Ts需频繁地更新 适应组成员关系的变化 路由器必须为每个组播组和发送节点保存相关信息 如果组 播组数目很大 就可能耗尽路由器的内存资源 第一个分组要在网络上扩散 如果在Internet上定期重复传输 这种分组 会消耗大量的网络资源 组播树的生成还与"存活时间"(TTL)有关 在主机加入 组播组时 可设置TTL值 当组播数据通过路由器时 路由 器会将其中的TTL值减1 若TTL不为0 才转发给相邻的各 个网络 但对于目标地址在224. . . 与224.0.0.255之间的 组播数据 不论其TTL有多大 路由器都不会对其进行转 发 通过设置TTL 可限制组播数据到达的范围 从而限制 组播树的规模 应恰当设置TTL值 太小会使某些成员之间 不能通信 太大会浪费网络资源 (5)支持IP组播的软硬件配置要点 要实现IP组播 所使用的网卡必须支持组播通信 为此网 卡要具有组播过滤功能 这可以由硬件组播过滤器或网卡驱动 程序来实现 IP组播中的数据帧头包含了一个特殊的MAC地 址 其中包含了IP组播地址 这使网卡很容易识别接收到的数 据是否是组播数据及组播地址是什么 软件方面 各组成员 组成员之间的路由器都必须提供对IGMP协议的支持 (6)IP组播的Winsock实现 对于Win32平台 利用Winsock可访问的IP协议来提供 对IP组播通信的支持 Winsock可创建的套接字包括流套接 字和数据报套接字等多种类型 但只有创建基于UDP协议的 数据报套接字 才支持IP组播 在组播时 网络中传输的组 播数据报与普通UDP包基本相同 只是目标主机地址换成了 IP组播地址 IP组播通信与普通的UDP协议通信一样 都是 "无连接"的 "不可靠"的 Winsock提供了两种不同的方法(Winsock 1与Winsock 2) 实 现 IP 组 播 在 Winsock 1 中 通 过 执 行 API 函 数 setsockopt 并 使 用 选 项 IP_Add_MemberShip(IP_Drop_ MemberShip)加入(脱离)IP组播组 而在Winsock 2中引入了 一个新函数WSAJoinLeaf 专门负责组播组的加入 针对 WSAJoinLeaf返回的句柄调用CloseSocket 将脱离相应的组 播组 利用Winsock实现IP组播通信的主要过程如下
相关文档
最新文档