背景技术
Mtracert(Multicast Trace Route,组播路由跟踪)是一种追踪组播报文的转发路径、定位组播环境中网络故障的工具。随着组播应用日益广泛,组播维护和故障定位的需求自然成为必要的需求,组播路由跟踪功能显得越来越重要。组播路由跟踪除了具有路径跟踪的功能外,还具有收集和分析流量信息的功能。由于组播路由跟踪中的Request(请求)报文中包含流量统计的字段,因此可以在组播路由跟踪的同时完成流量统计的信息收集。另外,还可以通过以一定时间为间隔连续进行几次组播路由跟踪,完成组播流量、速率的统计。
现有技术中组播路由跟踪的基本原理是:在路由器(或网管主机)上输入mtrace命令,指定组播源地址、接收者地址、组播组,发起组播路由追踪,向接收者的最后一跳路由器发送IGMP(Internet Group Management Protocol,互联网组管理协议)Traceroute Query(查询)报文;最后一跳路由器收到后,在该报文中添加本路由器的信息,向沿着到组播源的逆向组播路径方向的上一跳邻居路由器发送IGMP Traceroute Request(请求)报文,收到IGMPTraceroute Request报文的路由器,在Request报文中添加包含本路由器信息的Response Block(响应数据块),然后继续向上一跳路由器发送IGMP Traceroute Request报文,依次类推,直到到达连接组播源的第一跳路由器或遇到致命错误;当第一跳路由器收到IGMP TracerouteRequest报文后,则向发起Mtrace跟踪的路由器发送IGMP Traceroute Response(响应)报文,该IGMP Traceroute Response报文中包含了IGMP Traceroute Request报文中的全部信息,仅改变了报文的类型;最终由发起组播路由跟踪的路由器对收到的IGMP Traceroute Response报文进行分析显示。由于组播转发路径上的每跳路由器添加的响应数据块都包含报文到达时间、出接口地址、入接口地址、上一跳地址、入接口的接收报文数量、出接口的发送报文数量、(S,G)(组播源地址,组播组地址)转发包数量、错误码等关键信息,因此IGMP TracerouteRequest报文中会包含上述各种信息,相应地IGMP Traceroute Response报文中也会包含上述各种信息,发起组播跟踪的路由器通过对收到的IGMP Traceroute Response报文进行分析,就能完成追踪组播路径、定位组播故障和分析组播流量等功能。
例如,参见图1,路由器A发起组播路由跟踪,发送IGMP Traceroute Query报文给最后一跳路由器R5,R5收到IGMP Traceroute Query报文后发送IGMP Traceroute Request报文给逆向组播路径的上一跳路由器R4,R4添加包含R4信息的响应数据块后发送IGMP TracerouteRequest报文给路由器R2,R2添加包含R2信息的响应数据块后发送IGMP Traceroute Request报文给第一跳路由器R1,R1收到后改变报文类型发送IGMP Traceroute Response报文给发起者A,A收到后可以根据IGMP Traceroute Response报文进行分析,完成组播路由跟踪以及流量统计等功能。
在组播路由跟踪的过程中,当路由器收到发送给自己的IGMP Traceroute Query报文时,如果发现自己不是真正的最后一跳路由器,则向组播跟踪发起者回应包含错误码为WRONG_LAST_HOP的IGMP Traceroute Response报文。
在实现本发明的过程中,发明人发现上述现有技术至少存在以下缺点:
当收到IGMP Traceroute Query报文的路由器与接收者直连,且该路由器上发往接收者的报文的入接口和出接口相同时,可能无法完成正确路径追踪,或者会产生两个不同的IGMPTraceroute Response报文,即具有上述特征的路由器收到Query报文后,如果发现自己不是真正的最后一跳路由器,会产生一个包含错误码为WRONG_LAST_HOP的IGMP TracerouteResponse报文,而真正的最后一跳路由器若没有收到IGMP Traceroute Response报文,则不会进行路由跟踪,正确的路径追踪无法完成;而真正的最后一条路由器若收到了IGMPTraceroute Response报文,并进行路由跟踪,最后发起者就会收到两个IGMP TracerouteResponse报文。通常发起者会处理先收到的IGMP Traceroute Response报文,然后结束组播路由跟踪过程,对于后收到的IGMP Traceroute Response报文则丢弃。如果先收到的IGMPTraceroute Response报文为正确的IGMP Traceroute Response报文,则能够准确定位最后一跳路由器,并完成组播路由跟踪;如果先收到的IGMP Traceroute Response报文为包含错误码的IGMP Traceroute Response报文,则无法定位出最后一跳路由器,组播路由跟踪失败,无法完成正确路径追踪。
例如,参见图2,组播源为S1,组播路由跟踪发起者为路由器RTA,路由器RTB与RTC均与接收者PC1相连,其中RTB为真正最后一跳路由器,当RTA发起mtrace组播路由跟踪时,一种情况是如果在发送的IGMP Traceroute Query报文中指定参数为:组播源地址2.2.2.2,最后一跳路由器地址1.1.1.2,接收者地址1.1.1.3,追踪组地址为G或者为空,则指定的最后一跳路由器RTC收到该IGMP Traceroute Query报文后,发现自己不是真正的最后一跳路由器,会返回一个包含错误码为WRONG LAST HOP的IGMP Traceroute Response报文给RTA,RTA收到IGMP Traceroute Response报文后,结束组播路由跟踪,这种情况下真正的最后一跳路由器RTB没有收到IGMP Traceroute Query报文,不会进行路由跟踪,则无法完成正确路径追踪。另外一种情况是,如果RTA在发送的IGMP Traceroute Query报文中指定参数为:组播源地址2.2.2.2,接收者地址1.1.1.2,追踪组地址为G或者为空,且携带Alert选项,则IGMPTraceroute Query报文经过的所有路由器都会对该报文既上送又转发。这种场景下IGMPTraceroute Query报文中没有指定最后一跳路由器,而且指定的接收者并不是真正的接收者PC1。其中,RTB收到IGMP Traceroute Query报文后,判断自己是真正的最后一跳路由器,则进行路由追踪,最终RTA会收到一个IGMP Traceroute Response报文。同时,RTB还会继续转发IGMP Traceroute Query报文,因此RTC会收到IGMP Traceroute Query报文后,RTC收到后判断出自己不是真正的最后一跳路由器,则RTC返回一个包含错误码为WRONG LAST HOP的IGMP Traceroute Response报文给RTA。最终发起者RTA会收到两个IGMP Traceroute Response报文,RTA会处理先收到的IGMP Traceroute Response报文,后收到的IGMP Traceroute Response报文则丢弃。如果先收到正确的IGMP Traceroute Response报文,则组播路由跟踪成功,如果先收到包含错误码的IGMPTraceroute Response报文,则组播路由跟踪失败。
发明内容
为了正确完成组播路由跟踪,本发明实施例提供了一种组播路由跟踪的方法和路由器。所述技术方案如下:
一方面,一种组播路由跟踪的方法,所述方法包括:
路由器接收执行组播路由跟踪的路由器发来的互联网组管理协议组播路由跟踪查询报文;
确定自己与所述互联网组管理协议组播路由跟踪查询报文中指定的接收者直连,且发往所述接收者的报文的入接口和出接口相同;
判断所述互联网组管理协议组播路由跟踪查询报文中的组播组地址是否为空;
如果为空,则将所述互联网组管理协议组播路由跟踪查询报文的目的地址修改为到源地址的逆向组播路径方向的上一跳路由器;如果不为空,则将所述互联网组管理协议组播路由跟踪查询报文的目的地址修改为所有路由器的组播地址;
向所述出接口发送所述修改后的互联网组管理协议组播路由跟踪查询报文;
所述接收者的最后一跳路由器根据接收到的所述互联网组管理协议组播路由跟踪查询报文或所述修改后的互联网组管理协议组播路由跟踪查询报文,沿着到组播源地址的逆向组播路径向上一跳路由器发送互联网组管理协议组播路由跟踪请求报文,直到连接组播源的第一跳路由器收到所述互联网组管理协议组播路由跟踪请求报文后,向所述执行组播路由跟踪的路由器发送互联网组管理协议组播路由跟踪响应报文。
另一方面,一种路由器,所述路由器包括:
接收模块,用于接收执行组播路由跟踪的设备发来的互联网组管理协议组播路由跟踪查询报文;
判断模块,用于判断是否所述路由器与所述接收模块收到的互联网组管理协议组播路由跟踪查询报文中指定的接收者直连,且所述路由器上发往所述接收者的报文的入接口和出接口相同;
发送模块,用于当所述判断模块判断的结果为是时,判断所述互联网组管理协议组播路由跟踪查询报文中的组播组地址是否为空,如果为空,则将所述互联网组管理协议组播路由跟踪查询报文的目的地址修改为沿着源地址的逆向组播路径方向的上一跳路由器,如果不为空,则将所述互联网组管理协议组播路由跟踪查询报文的目的地址修改为所有路由器的组播地址,向所述出接口发送所述修改后的互联网组管理协议组播路由跟踪查询报文,使所述接收者的最后一跳路由器接收到所述修改后的互联网组管理协议组播路由跟踪查询报文。
本发明实施例提供的技术方案的有益效果是:
通过修改互联网组管理协议组播路由跟踪查询报文的目的地址后转发该互联网组管理协议组播路由跟踪查询报文,可以确保真正的最后一跳路由器能够收到并处理互联网组管理协议组播路由跟踪查询报文或修改后的互联网组管理协议组播路由跟踪查询报文,从而保证组播路由跟踪的发起者只收到一个正确的互联网组管理协议组播路由跟踪响应报文,完成正确的组播路由跟踪。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
本发明实施例解决特殊组网环境下定位最后一跳路由器的问题,特殊组网环境是指收到IGMP Traceroute Query报文(以下称为查询报文)的路由器与接收者直连,且该路由器上发往接收者的报文的入接口和出接口相同,这种情况下收到查询报文的路由器并不是真正的最后一跳路由器。本发明实施例通过修改查询报文中的目的地址,确保真正的最后一跳路由器能够收到并处理查询报文或修改后的查询报文,从而正确完成组播路由跟踪。
实施例1
本实施例以查询报文中指定了最后一跳路由器为例进行说明,参见图3,本发明实施例提供了一种组播路由跟踪的方法,具体包括以下步骤:
步骤101:在执行组播路由跟踪的路由器上输入mtrace命令,mtrace命令中指定了组播源地址、最后一跳路由器地址、组播接收者地址和组播组地址,即:执行组播路由跟踪的路由器(即发起者)向所述mtrace命令中指定的最后一跳路由器发送查询报文。在查询报文中指定最后一跳路由器的情况下,查询报文不携带Alert选项。
步骤102:所述mtrace命令中指定的最后一跳路由器接收到上述查询报文。
步骤103:所述mtrace命令中指定的最后一跳路由器判断是否自己与收到的查询报文中指定的接收者直连,且该路由器上发往接收者的报文的入接口和出接口相同;如果是,执行步骤105;否则,执行步骤104。
步骤104:所述mtrace命令中指定的最后一跳路由器按照现有技术中的处理流程进行处理。
步骤105:所述mtrace命令中指定的最后一跳路由器根据收到的查询报文中的组播组地址修改查询报文,向上述出接口发送修改后的查询报文,使接收者的真正的最后一跳路由器接收到修改后的查询报文。
其中,所述mtrace命令中指定的最后一跳路由器根据查询报文中的组播组地址修改查询报文的步骤具体包括:
判断查询报文中的组播组地址是否为空;如果为空,则将查询报文的目的地址修改为沿着源地址的逆向组播路径方向的上一跳路由器,此时上一跳路由器即真正的最后一跳路由器;如果不为空,则将查询报文的目的地址修改为所有路由器的组播地址,即将目的地址修改为224.0.0.2,从而保证真正的最后一跳路由器能够收到修改后的查询报文。
步骤106:所述真正的最后一跳路由器接收到修改后的查询报文,根据修改后的查询报文生成IGMP Traceroute Request报文(以下称为请求报文),沿着到组播源地址的逆向组播路径向上一跳路由器发送该请求报文。
其中,所述真正的最后一跳路由器收到修改后的查询报文后,发现该查询报文中的目的地址是自己或224.0.0.2,则所述真正的最后一跳路由器在修改后的查询报文中添加自己的信息生成请求报文,沿着到组播源地址的逆向组播路径向上一跳路由器发送请求报文。
步骤107:所述真正的最后一跳路由器的上一跳路由器收到请求报文后,继续沿着到组播源地址的逆向组播路径向自己的上一跳路由器发送该请求报文,直到连接组播源的第一跳路由器收到该请求报文。
步骤108:第一跳路由器根据收到的请求报文向发起者发送IGMP Traceroute Response报文(以下称为响应报文)。
步骤109:发起者收到响应报文后进行分析,完成组播路由跟踪。
例如,参见图2,RTA发起组播路由跟踪,组播组地址为G,指定最后一跳路由器地址为1.1.1.2,指定的最后一跳路由器RTC收到查询报文后,发现自己与接收者PC1直连,且RTC上发往PC1的报文的入接口和出接口相同,表明自己并不是真正的最后一跳路由器,则将查询报文的目的地址更改为224.0.0.2,然后发送修改后的查询报文,真正的最后一跳路由器RTB收到修改后的查询报文后,根据修改后的查询报文生成请求报文并发送请求报文,进行路径跟踪,直至组播路由跟踪结束。
本实施例针对查询报文中指定的最后一跳路由器并不是真正的最后一跳路由器的场景,通过修改查询报文的目的地址后转发该查询报文,可以确保真正的最后一跳路由器能够收到并处理修改后的查询报文,保证组播路由跟踪的发起者只收到一个正确的响应报文,从而完成正确的组播路由跟踪。
实施例2
本实施例以查询报文中没有指定最后一跳路由器为例进行说明,参见图4,本发明实施例提供了一种组播路由跟踪的方法,具体包括以下步骤:
步骤201:在执行组播路由跟踪的路由器上输入mtrace命令,mtrace命令中指定了组播源地址、组播接收者地址和组播组地址,执行组播路由跟踪的路由器则根据该mtrace命令向网络中发送查询报文。即:执行组播路由跟踪的路由器(即发起者)向所述mtrace命令中指定的组播接收者发送查询报文,该查询报文携带Alert选项。这种情况下,查询报文经过的所有路由器都会既上送又转发。
步骤202:真正的最后一跳路由器收到查询报文后,由于查询报文携带Alert选项,则既将查询报文上送控制平面进行处理,又将查询报文转发出去。
其中,所述真正的最后一跳路由器将查询报文上送控制平面进行处理的过程具体如下:
根据该查询报文判断自己为真正的最后一跳路由器,则根据该查询报文生成请求报文,沿着到组播源地址的逆向组播路径向上一跳路由器发送该请求报文。
相应地,上一跳路由器收到请求报文后,继续沿着到组播源地址的逆向组播路径向自己的上一跳路由器发送该请求报文,直到连接组播源的第一跳路由器收到该请求报文。第一跳路由器根据收到的请求报文向发起者发送响应报文。发起者收到该响应报文后,进行分析完成组播路由跟踪。
步骤203:网络中的路由器接收到真正的最后一跳路由器转发的查询报文。
步骤204:所述网络中的路由器判断是否自己与收到的查询报文中指定的接收者直连,且该路由器上发往接收者的报文的入接口和出接口相同;如果是,则执行步骤206;否则,执行步骤205。
步骤205:所述网络中的路由器按照现有技术中的处理流程进行处理,然后结束。
步骤206:此时所述网络中的路由器判断出自己不是真正的最后一跳路由器,则根据收到的查询报文中的组播组地址修改查询报文,向上述出接口发送修改后的查询报文,使接收者的真正的最后一跳路由器接收到修改后的查询报文。
其中,根据查询报文中的组播组地址修改查询报文的步骤具体包括:
判断查询报文中的组播组地址是否为空;如果为空,则将查询报文的目的地址修改为沿着源地址的逆向组播路径方向的上一跳路由器,此时上一跳路由器即真正的最后一跳路由器;如果不为空,则将查询报文的目的地址修改为所有路由器的组播地址,即将目的地址修改为224.0.0.2,从而保证真正的最后一跳路由器能够收到修改后的查询报文。
步骤207:真正的最后一跳路由器接收到修改后的查询报文,比较当前收到的修改后的查询报文的ID与上次处理过的查询报文的ID是否相同,由于真正的最后一跳路由器上次将查询报文上送处理时记录了该查询报文的ID,且修改后的查询报文中的ID并没有改变,因此此时比较的结果是两个ID相同,则真正的最后一跳路由器不处理当前收到的修改后的查询报文,直接丢弃该修改后的查询报文,从而保证发起者只收到一个响应报文。
例如,参见图2,RTA发起组播路由跟踪,组播组地址为G,携带Alert选项,真正的最后一跳路由器RTB收到查询报文后,上送控制平面处理并转发给RTC,其中控制平面生成请求报文,从而进行组播路由跟踪,直至组播路由跟踪结束。另外,RTC收到查询报文后,发现自己与接收者PC1直连,且RTC上发往PC1的报文的入接口和出接口相同,则将查询报文的目的地址更改为224.0.0.2,然后发送修改后的查询报文,真正的最后一跳路由器RTB收到修改后的查询报文后,比较修改后的查询报文的ID与上次处理的查询报文的ID后,丢弃修改后的查询报文,从而保证RTA只收到一个响应报文。
本实施例针对查询报文中不指定最后一跳路由器而指定接收者的场景,真正的最后一跳路由器收到查询报文后进行组播路由跟踪,且丢弃非真正的最后一跳路由器修改后的查询报文,可以确保发起者只收到一个响应报文,完成正确的组播路由跟踪。
实施例3
参见图5,本发明实施例提供了一种路由器,具体包括:
接收模块,用于接收执行组播路由跟踪的设备发来的查询报文;
判断模块,用于判断是否路由器与接收模块收到的查询报文中指定的接收者直连,且路由器上发往接收者的报文的入接口和出接口相同;
发送模块,用于当判断模块判断的结果为是时,根据接收模块收到的查询报文中的组播组地址修改查询报文,向出接口发送修改后的查询报文,使接收者的最后一跳路由器接收到修改后的查询报文。
进一步地,发送模块具体包括:
判断单元,用于当判断模块判断的结果为是时,判断接收模块收到的查询报文中的组播组地址是否为空;
修改单元,用于当判断单元判断的结果为空时,将查询报文的目的地址修改为沿着源地址的逆向组播路径方向的上一跳路由器;当判断单元判断的结果不为空时,将查询报文的目的地址修改为所有路由器的组播地址;
发送单元,用于向出接口发送修改单元修改后的查询报文,使接收者的最后一跳路由器接收到修改后的查询报文。
本实施例通过修改查询报文的目的地址后转发该查询报文,可以确保真正的最后一跳路由器能够收到修改后的查询报文,最后一跳路由器根据收到的查询报文和修改后的查询报文发送请求报文,从而完成正确的组播路由跟踪。
本发明实施例可以利用软件实现,相应的软件程序可以存储在可读取的存储介质中,如路由器的硬盘或缓存中。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。