IP组播主机扩展 

1. 介绍

IP组播是把数据传输给一些主机,一个或多个主机由一个IP地址表示。组播象平常的IP传输一样以最佳的方式将数据传输给所有的主机。组的成员中动态的,成员可以在任何时间加入一个组或离开一个组。组的大小和位置没有限制。一个主机可以是多个组的成员。组可以是永久的,也可以是临时的,永久的组有一个公证的分配好的IP地址,永久组内的成员数也可以为0。有一些组播地址是保留用于临时组的,只有组内有成员时组才存在。网络上传输组播数据报时是通过组播路由器进行的,组播路由器可以和网关一起,也可以和网关分离。主机在传输IP组播数据报时将它作为本地网络组播进行,本地网络组播向直接相邻的主机传送数据报。如果数据报的IP生存期大于1,组播路由器负责转发此数据报到组内的其它成员所在的网络。在IP生存期内能够达到的网络上,相应的组播路由器进行本地组播完成全部的组播过程。

2. 等级

针对本文有三种情况:我们把它们分级处理:

0级: 不支持IP组播
在当前,不要求所有主机支持IP组播,对于这一级的主机,组播不影响它们的活动。如果一个网络中有1级或2级主机,它们可能把组播数据报发送到0级主机上。这种数据报采用D类地址,因此容易识别,0级主机把它们抛弃了也就是了。

1级: 支持发送IP组播,但不支持组播接收
1级主机完成一部分组播功能,但这些主机不能加入任何主机组。从0级升级到1级十分容易,代码改变量很少。

2级: 完全支持IP组播
2级允许主机加入或离开组,也允许向组发送数据报。它需要实现IGMP和IP扩展以及一些本地网的主机接口程序。

3. 组地址

主机组是D类地址表示,D类地址高4位是"1110",也就是说,D类地址是从224.0.0.0到239.255.255.255,其中224.0.0.0保留,而224.0.0.1表示永久组(包括网关)。

4. IP实现例子

IP实现的组播扩展由以下的层次结构表示。在此模型中,ICMP和IGMP是IP模块中实现,将IP地址映射到本地网络地址的工作由本地网络模块完成。



5. 传送组播IP数据报

5.1. IP服务接口扩展

组播数据报在传输时所进行的操作和平常的IP传输一样,上层协议模块只告诉IP要传送数据报一个组播地址,而不是一些地址。尽管如此,一些扩展也是必要的。如果上层接口没有提供指定组播数据报IP生存时间的方法,服务接口应该提供。如果上层协议选择不指定生存时间,对所有组播IP数据报默认值为1。如果主机和多个网络相连,服务接收应该提供上层协议一种方法,使它知道哪个接口将用于组播。初始传输时只有一个端口参与,组播路由器负责转发到其它网络。如果上层协议未指定传输接口,则使用默认接口传输组播数据报。如果发送主机是这个组中的成员,服务接口要能够提供一种机制禁止数据报的本地传输。

5.2. IP模块扩展

为了支持组播,IP模块必须能够识别IP主机组地址。大部分的IP模块包括下面的代码:

if IP目的地在本地网  传输数据报到IP目的
else  传输数据报在网关

为了适应组播扩展,路由算法需要做下面的改进:

if IP目的地址在本地网 or IP目的地址是主机组 向目的地址直接传输数据报
else 将数据报发向网关

如果发送主机自己是组内的成员,必须要给自己留一份发送数据报的副本。主机组地址不能出现在数据报源地址域或源路由的任何地方。

5.3. 本地网络服务接口扩展

不需要对本地网络服务接口进行修改,IP模块指定的是组地址而不是单个的地址。

5.4. 对以太本地网模块的扩展

以太网直接支持发送本地的组播包。所需要做的就是将IP组地址映射到以太组播地址上就行了。一台IP组播地址可以通过将低23位映射到IP地址的低23位的以太组播地址01-00-5E-00-00-00完成。因为有28个有意义的位存在于IP组播地址中,所以几个主机组地址可以会映射到一个以太组播地址上。

5.5. 其它本地网络模块扩展

符合IEEE 802.2标准或支持组播的局域网可以象以太网一样处理组播。对于象实验以太网那样不支持组播但支持广播的网络来说,所有的主机组地址可以映射到一个广播地址上。对于只以点对点方式连接的主机,那就只有一个个发了。对于存储转发网络,如ARPANET或X.25网络,所有IP主机组地址可以映射到一个公认的IP组播路由器本地地址上,这个路由器完成在本网内和网间进行组播的任务。

6. 接收IP组播包

6.1. IP服务接口扩展

收到的组播IP数据报的处理和平常单播时的一样,由上层协议处理。选择什么协议要看IP头中的协议域,与目的地址没有关系。但是,在数据报未到达特定的组之前,上层协议必须要求IP模块加入这个组,因为需要两个新的服务:

JoinHostGroup ( group-address, interface )
LeaveHostGroup ( group-address, interface )

JoinHostGroup要求主机成为由group-address指定的组中的成员,而LeaveGroup地正和它相反,使主机离开某一组。如果主机只有一个接口,上面两个函数中的interface可以忽略。如果主机和多个网络相连,上层协议可以选择interface不指定,在这种情况下,请求会送到组播的默认端口。允许多个接口加入同一组,也允许多个上层协议加入同一组。两个操作必须立即返回,并通过调用者它们是不是执行成功了。如果提供了无效的参数,JoinHostGroup肯定失败,而LeaveHostGroup则不一定。

6.2. IP模块扩展

为了支持接收IP组播数据报,IP模块也要进行一些扩展以支持和某一网络接口相关的组成员。接收到的数据报的处理方法和主机在某一地址接收到数据报的处理方法一致。如果接收到的数据报不是给这个组的,直接抛弃,不会产生错误,也不会记入日志。如果一个主机有多个接口,而某一接口接收到的另一接口应该接收的数据报,此数据报也会被抛弃。接收到的数据报不会因为生存时间为1而被拒绝,如果接收到的数据报有一个IP主机组地址在它的源地址域中,则直接抛弃此包。主机组列表可以随着JoinHostGroup和LeaveHostGroupt而更新。每个成员身体要有一个访问记数(或类似的机制)来处理多个要求加入和离开请求。第一个加入请求和最后一个离开请求时会通过相应的主机接口,这样接口可以更新自己的组播接收过滤器。

IP模块还需要实现IGMP协议,它是用于向本地路由器通知特定本地网络组成员的情况的。为了支持IGMP,每个第二层主机必须在初始化的时候使每个接口加入"all-hosts"组(地址为:224.0.0.1),只要这个机器开着就不能离开这个组。

6.3. 本地网络服务接口扩展

接收到的本地网络组播包作为普通的本地网络包,在使用Receive Local后被送到IP模块。为了能够命名IP模块能够知道哪个本地模块应该接收这个包,必须加入两个新服务:

JoinLocalGroup ( group-address )
LeaveLocalGroup ( group-address )

其中"group-address"是IP主机组地址。JoinLocalGroup 要求本地网络模块接收接收到的包。LeaveLocalGroup要求本地网络模块停止传送。本地网络模块应该将IP主机组地址和本地网络地址进行映射,并按请求的服务(如加入组,离开组)对过滤器进行更新。如果不能正确过滤接收到的包,本地网络模块可以不用管LeaveLocalGroup,可以对多于JoinLocalGroup要求的地址进行发送。本地网络模块对发出的组播包不能向上层传送,loopback组播由IP层以上的协议处理。

6.4. 以太本地网络模块扩展

这了支持组播,以太模块必须必须接收发向以太组播地址的包,以太组播地址和IP组播地址是对应的。应该有效地利用以太硬件的过滤功能。但是现在的以太接口对可以识别的地址数有一个限制,但是必须能够对一定数量的以太组播地址进行侦听,这就意味着当地址超过了过滤器的限制时打开地址过滤器接收所有的组播包。对于硬件实现不合适的,可以使用以太软件模块进行实现。

6.5. 非以太的本地网络模块扩展

其它的组播网络,如IEEE 802.2网络,可以象以太一样处理组播IP数据报。对于纯广播网络,如实验以太网,所有接收到的广播包都要传送到IP模块进行IP过滤。在点对点或存储转发网络上,组播和平常的传送没有什么两样,不需要对什么模块进行改变。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值