论文部分内容阅读
摘 要:本文设计一种适合于应用层的、支持轻量级多播应用的报文传递机制。借鉴选择路由的思想,让多播组内的每个成员都动态的维护一个路径转发表。当树中的节点收到从其父节点转发的某个报文后,通过查询路径转发表,选择一条最优路径将其发送或并发发送到相应的接收节点。
关键词:应用层多播;报文传递;路径转发表
中图分类号:TP274+.2文献标识码:A
Design of Packet Transfer Mechanism of Application Layer Multicast
LI Jing-hui,LAI Lin
(Department of Computer Science Sichuan Institute of Education,Sichuan Chengdu 611130)
Key words: packet transfer mechanism;application layer multicast
本文设计了一套适用于通用、可扩展的支持轻量级应用的应用层多播的报文传递机制,包括设计转发表以及转发路径选择方法。解决了多播树中的成员收到从某个节点转发的其它成员发送的报文后,该如何进行复制及转发。由于应用层多播采取使用端系统替代网络节点的方法,也就是把网络节点所支持的多播的功能放在端系统实现,所以可以借鉴路由器的工作原理实现报文传递。
1 路由器原理
IP路由选择。从概念上讲,IP路由选择是简单的,特别对于主机来说。如果目的主机与源主机直接相连(如点对点链路)或都在一个共享网络上(以太网或令牌环网),那么IP报文就直接送到目的主机上。否则,主机把报文发往一默认的路由器上,由路由器来转发该报文。大多数的主机都是采用这种简单机制。
在一般的体制中,IP层可以从TCP、UDP、ICMP以及IGMP接收报文(即在本地生成的报文)并进行发送,或者从一个网络接口接收报文(待转发的报文)并进行发送。IP层在内层中有一个路由表,每当收到一份报文进行发送时,它都要对该表搜索一次。假设报文来自某个网络接口,IP层就首先检查该报文目的地址是否为本机的IP地址之一或者IP广播地址。如果是,报文将被送到由IP首部协议字段所指定的协议模块进行处理。如果报文的目的不是这些地址,那么进行如下处理:
(1)如果IP层被设置为路由器的功能,那么就对报文进行转发。
(2)否则报文被丢弃。
2 路由表
表1 路由表
由如表1所示的路由表源码可以看出[1],当前路由表中的每一项都包含下面这些信息:
·destination:目的网段。
·mask:子网掩码。
·interface:到达该目的地的本路由器的出口IP。
·gateway:下一跳路由器入口的IP。路由器通过interface和gateway定义到下一个路由器的链路,通常情况下,interface和gateway是同一网段的。
·metric:跳数,指该条路由记录的质量。一般情况,如果有多条到达相同目的地的路由记录,路由器会采用metric值小的那条路由。
3 路由选择功能
IP路由选择逐跳(hop-by-hop)进行 [2]。从上述路由表信息可以看出,IP并不知道到达任何目的的完整路径,当然除了那些与主机直接相连的目的。它假定下一站路由器比发送报文的主机更接近目的地,而且下一站路由器与该主机直接相连。所有的IP路由选择只为报文传输提供下一站路由器的IP地址。
IP路由选择主要完成以下这些功能:
(1)搜索路由表,寻找能与目的IP地址完全匹配的表目,其网络号和主机号都要匹配。如果找到的话,则把报文发送给该表目指定的下一站路由器或直接连接的网络接口,这取决于标志字段的值。
(2)搜索路由表,寻找能与目的网络号相匹配的表目。如果找到,则把报文发送给该表目指定的下一站路由器或直接连接的网络接口,这取决于标志字段的值。目的网络上的所有主机都可以通过这个表目来处置。例如,一个以太网上的所有主机都是通过这种表目进行寻径的。当然这种搜索网络的匹配方法必须考虑可能的子网掩码。
(3)搜索路由表,寻找标为"默认"的表目。如果找到,则把报文发送给该表目指定的下一站路由器。
4 报文传递
类似于路由器,对于多播组内的每个成员,要想把他们发送的报文能够传递给组内的其它所有成员,组内每个成员都必须要维护一张转发表。当树中的成员收到从其父节点转发的某个根节点发来的报文后,通过查找转发表中相应的项将其分别发送到当前成员的子节点。
(1)转发表的结构
当组内成员收到从其它成员发来的子父节点关系的消息后,将其都存储在一张如表4-2所示的转发表中。
分析表2可知,当前节点的转发表中有以下三项:
·Root_IP:每个多播树的根节点的IP地址。
理论上应该包括除当前成员外其它所有组内成员的IP地址。
·Father_IP:以上述节点做根节点时,当前节点的父节点的IP地址。
如果为0.0.0.0,则代表当前成员没有父节点。
·Child_IP:以上述节点做根节点时,当前节点的孩子节点的IP地址。
如果为0.0.0.0,则代表没有孩子节点。
表2 转发表
表2中的各条记录可作下述解释:
第一条:所有转发表的第一项记录的是以当前节点为根节点的情况。
当前节点以自己作为根节点建立多播树,因此当前节点没有父节点,用0.0.0.0表示其父节点不存在。如表4-2第一条所示,当前节点没有父节点,有两个孩子节点,其IP地址分别是202.117.21.63和202.117.21.119。
第二至第五条:分别表示在组内其它成员所建的多播树中,当前节点的父节点和孩子节点。
例如,从第二条和第三条可以看到,在IP地址为 202.117.0.208的成员建立的多播树中,当前节点的父节点的IP地址是202.117.21.119,子节点有两个,其IP地址是202.117.21.64和202.117.21.63。
转发表的存储结构如程序4-1所示:
程序4-1 转发表存储结构
(2)报文转发路径选择
报文转发路径选择分为两个部分:
1.当前节点作为根节点发送报文,则查看转发表的第一条记录,根据其Child_IP这一项进行转发。
2.当前节点接收到一个报文,先查看发送该报文的根节点的IP地址是否在当前节点转发表的第一项Root_IP中。
如果存在,再检查当前条目(设为第r条)的第二项Father_IP,与该报文的上一个转发节点的IP地址是否一致。上一个转发节点指的是当前节点在发送该报文的根节点所建多播树中的父节点。
如果一致,则根据第r条的Child_IP这一项,复制并发送报文给相应节点。
如果上面这些操作都没有成功,那么该报文就不能被传送,于是将其丢弃。如果不能传送的报文来自本机,那么一般会向生成报文的应用程序返回一个“主机不可达”或“网络不可达”的错误。
5 结束语
本文给出了应用层多播协议的另一个重要部分,也就是报文传递机制,通过该协议实现基于多播树的数据转发。
由端系统维护的转发表类似于路由表,该表中保存的是该端系统在多播树中的子父节点的信息。端系统根据接收到的报文的信息搜索转发表,寻找需要转发报文的子节点,然后将该报文发送给这些节点。
参考文献:
[1]如何读懂路由表[EB/OL]. http://www.net130.com/2004/6-4/12539-2.html.2004,(6).
[2]TCP/IP详解[EB/OL] .http://www.bookhome.net/diannao/tcpipxj.html.
关键词:应用层多播;报文传递;路径转发表
中图分类号:TP274+.2文献标识码:A
Design of Packet Transfer Mechanism of Application Layer Multicast
LI Jing-hui,LAI Lin
(Department of Computer Science Sichuan Institute of Education,Sichuan Chengdu 611130)
Key words: packet transfer mechanism;application layer multicast
本文设计了一套适用于通用、可扩展的支持轻量级应用的应用层多播的报文传递机制,包括设计转发表以及转发路径选择方法。解决了多播树中的成员收到从某个节点转发的其它成员发送的报文后,该如何进行复制及转发。由于应用层多播采取使用端系统替代网络节点的方法,也就是把网络节点所支持的多播的功能放在端系统实现,所以可以借鉴路由器的工作原理实现报文传递。
1 路由器原理
IP路由选择。从概念上讲,IP路由选择是简单的,特别对于主机来说。如果目的主机与源主机直接相连(如点对点链路)或都在一个共享网络上(以太网或令牌环网),那么IP报文就直接送到目的主机上。否则,主机把报文发往一默认的路由器上,由路由器来转发该报文。大多数的主机都是采用这种简单机制。
在一般的体制中,IP层可以从TCP、UDP、ICMP以及IGMP接收报文(即在本地生成的报文)并进行发送,或者从一个网络接口接收报文(待转发的报文)并进行发送。IP层在内层中有一个路由表,每当收到一份报文进行发送时,它都要对该表搜索一次。假设报文来自某个网络接口,IP层就首先检查该报文目的地址是否为本机的IP地址之一或者IP广播地址。如果是,报文将被送到由IP首部协议字段所指定的协议模块进行处理。如果报文的目的不是这些地址,那么进行如下处理:
(1)如果IP层被设置为路由器的功能,那么就对报文进行转发。
(2)否则报文被丢弃。
2 路由表
表1 路由表
由如表1所示的路由表源码可以看出[1],当前路由表中的每一项都包含下面这些信息:
·destination:目的网段。
·mask:子网掩码。
·interface:到达该目的地的本路由器的出口IP。
·gateway:下一跳路由器入口的IP。路由器通过interface和gateway定义到下一个路由器的链路,通常情况下,interface和gateway是同一网段的。
·metric:跳数,指该条路由记录的质量。一般情况,如果有多条到达相同目的地的路由记录,路由器会采用metric值小的那条路由。
3 路由选择功能
IP路由选择逐跳(hop-by-hop)进行 [2]。从上述路由表信息可以看出,IP并不知道到达任何目的的完整路径,当然除了那些与主机直接相连的目的。它假定下一站路由器比发送报文的主机更接近目的地,而且下一站路由器与该主机直接相连。所有的IP路由选择只为报文传输提供下一站路由器的IP地址。
IP路由选择主要完成以下这些功能:
(1)搜索路由表,寻找能与目的IP地址完全匹配的表目,其网络号和主机号都要匹配。如果找到的话,则把报文发送给该表目指定的下一站路由器或直接连接的网络接口,这取决于标志字段的值。
(2)搜索路由表,寻找能与目的网络号相匹配的表目。如果找到,则把报文发送给该表目指定的下一站路由器或直接连接的网络接口,这取决于标志字段的值。目的网络上的所有主机都可以通过这个表目来处置。例如,一个以太网上的所有主机都是通过这种表目进行寻径的。当然这种搜索网络的匹配方法必须考虑可能的子网掩码。
(3)搜索路由表,寻找标为"默认"的表目。如果找到,则把报文发送给该表目指定的下一站路由器。
4 报文传递
类似于路由器,对于多播组内的每个成员,要想把他们发送的报文能够传递给组内的其它所有成员,组内每个成员都必须要维护一张转发表。当树中的成员收到从其父节点转发的某个根节点发来的报文后,通过查找转发表中相应的项将其分别发送到当前成员的子节点。
(1)转发表的结构
当组内成员收到从其它成员发来的子父节点关系的消息后,将其都存储在一张如表4-2所示的转发表中。
分析表2可知,当前节点的转发表中有以下三项:
·Root_IP:每个多播树的根节点的IP地址。
理论上应该包括除当前成员外其它所有组内成员的IP地址。
·Father_IP:以上述节点做根节点时,当前节点的父节点的IP地址。
如果为0.0.0.0,则代表当前成员没有父节点。
·Child_IP:以上述节点做根节点时,当前节点的孩子节点的IP地址。
如果为0.0.0.0,则代表没有孩子节点。
表2 转发表
表2中的各条记录可作下述解释:
第一条:所有转发表的第一项记录的是以当前节点为根节点的情况。
当前节点以自己作为根节点建立多播树,因此当前节点没有父节点,用0.0.0.0表示其父节点不存在。如表4-2第一条所示,当前节点没有父节点,有两个孩子节点,其IP地址分别是202.117.21.63和202.117.21.119。
第二至第五条:分别表示在组内其它成员所建的多播树中,当前节点的父节点和孩子节点。
例如,从第二条和第三条可以看到,在IP地址为 202.117.0.208的成员建立的多播树中,当前节点的父节点的IP地址是202.117.21.119,子节点有两个,其IP地址是202.117.21.64和202.117.21.63。
转发表的存储结构如程序4-1所示:
程序4-1 转发表存储结构
(2)报文转发路径选择
报文转发路径选择分为两个部分:
1.当前节点作为根节点发送报文,则查看转发表的第一条记录,根据其Child_IP这一项进行转发。
2.当前节点接收到一个报文,先查看发送该报文的根节点的IP地址是否在当前节点转发表的第一项Root_IP中。
如果存在,再检查当前条目(设为第r条)的第二项Father_IP,与该报文的上一个转发节点的IP地址是否一致。上一个转发节点指的是当前节点在发送该报文的根节点所建多播树中的父节点。
如果一致,则根据第r条的Child_IP这一项,复制并发送报文给相应节点。
如果上面这些操作都没有成功,那么该报文就不能被传送,于是将其丢弃。如果不能传送的报文来自本机,那么一般会向生成报文的应用程序返回一个“主机不可达”或“网络不可达”的错误。
5 结束语
本文给出了应用层多播协议的另一个重要部分,也就是报文传递机制,通过该协议实现基于多播树的数据转发。
由端系统维护的转发表类似于路由表,该表中保存的是该端系统在多播树中的子父节点的信息。端系统根据接收到的报文的信息搜索转发表,寻找需要转发报文的子节点,然后将该报文发送给这些节点。
参考文献:
[1]如何读懂路由表[EB/OL]. http://www.net130.com/2004/6-4/12539-2.html.2004,(6).
[2]TCP/IP详解[EB/OL] .http://www.bookhome.net/diannao/tcpipxj.html.