一种快速响应icmp回送请求报文的方法

文档序号:7647210阅读:502来源:国知局
专利名称:一种快速响应icmp回送请求报文的方法
技术领域
本发明涉及网络安全领域,特别是涉及一种快速响应ICMP回送请求报文的方法。
背景技术
ICMP(Internet Control Message Protocol)是互联网控制报文协议,它在发送方和接收方传递查询报文和出错信息。在请求注解(Request For Comment,RFC)792,即一系列已编号的互联网信息文档和标准之一,详细规定了ICMP协议。
ICMP协议的设计主要基于以下两点1),如果数据报文在互连网传输过程中出错,给发送方报告错误;2),接收方和发送方通过发送ICMP查询报文进行通讯,这样,一方可以检测另一方的可达性,以及从另一方获得必要信息。
基于以上两点,ICMP报文大体可以分为两种类型,即ICMP查询报文和ICMP差错报文,其中,ICMP查询报文是用一对请求和应答定义的报文。在实际应用中,网络中一台路由器需要知道另一台机器的网络可达性,这时可以通过ping命令发送ICMP回送请求报文来获得信息,另一方收到后回应ICMP回送应答报文。
如果发送方发起的ICMP回送请求报文是大包,这里的大包是指需要分片的ICMP回送请求报文(常用于网络性能测试或者网络大包攻击),常规的回应方法是用一定的缓存保存收到的分片,在一定时间内等到所有的分片到达该网络设备,重组完整后发送回应报文。目前最大的ping包长度是65500,这种常规的做法需要大量缓存,并且消耗CPU资源,CPU容易受到攻击。

发明内容
本发明所要解决的技术问题在于提供一种快速响应ICMP回送请求报文的方法,用于提高对ICMP回送请求报文的响应速度。
为了实现上述目的,本发明提供了一种快速响应ICMP回送请求报文的方法,用于网络设备,其特征在于,包括步骤一,接收ICMP回送请求报文,并对所述ICMP回送请求报文进行分片分类;步骤二,根据不同的分片类型对所述ICMP回送请求报文进行分别处理,以获得相应的出接口信息和封装信息;及步骤三,根据所述出接口信息和所述封装信息封装ICMP回送应答报文并发送。
所述的快速响应ICMP回送请求报文的方法,其中,所述步骤一中,根据IP头的偏移量字段对所述ICMP回送请求报文进行分片分类。
所述的快速响应ICMP回送请求报文的方法,其中,所述步骤一中,所述分片类型包括单片、头片、中间片及尾片。
所述的快速响应ICMP回送请求报文的方法,其中,所述步骤二中,当所述ICMP回送请求报文的分片类型为单片或头片时,根据单片或头片的源IP地址查找路由表获得所述ICMP回送请求报文的出接口信息和封装信息,并记录所述源IP地址、所述出接口信息、所述封装信息。
所述的快速响应ICMP回送请求报文的方法,其中,所述步骤二中,当所述ICMP回送请求报文的分片类型为中间片或尾片时,通过直接获取方式获取头片的路由信息。
所述的快速响应ICMP回送请求报文的方法,其中,所述步骤二中,还包括判断通过直接获取方式获取头片的路由信息是否成功的步骤,若是,则执行所述步骤三;否则,进一步根据相应分片的源IP地址查找路由表,以获取出接口信息,再执行所述步骤三。
所述的快速响应ICMP回送请求报文的方法,其中,所述步骤三中,根据所述ICMP回送请求报文的不同分片类型对所述ICMP回送应答报文采用不同的封装方式。
所述的快速响应ICMP回送请求报文的方法,其中,当所述ICMP回送请求报文为单片包或头片包时,所述步骤三具体为步骤311,修改二层MAC头,将目的MAC与源MAC互换;
步骤312,修改IP头,将所述ICMP回送请求报文的源IP与目的IP互换,并修改所述ICMP回送请求报文的生存时间值,重新计算IP头的校验和;步骤313,修改ICMP头,将ICMP头的TYPE字段类型由请求改为应答,并根据所述ICMP回送请求报文ICMP头的校验和直接得到所述ICMP回送应答报文的ICMP头的校验和;及步骤314,封装成所述ICMP回送应答报文的单片包或者头片包并发送。
所述的快速响应ICMP回送请求报文的方法,其中,当所述ICMP回送请求报文为中间片包或尾片包时,所述步骤三具体为步骤321,修改二层MAC头,将目的MAC与源MAC互换;步骤322,修改IP头,将所述ICMP回送请求报文的源IP与目的IP互换,并修改所述ICMP回送请求报文的生存时间值,重新计算IP头的校验和;步骤323,封装成所述ICMP回送应答报文的中间片包或者尾片包并发送。
与现有技术相比,本发明方法具有如下优点a1),本发明方法不需要知道整个ICMP包的长度,也不需要修改ICMP回送请求报文载荷的内容,对于不需分片的ICMP回送请求报文可以直接应答,对于大包的各分片也不需要进行重组,而是对每个分片直接处理并封装发送,从而达到节约CPU资源,快速响应的目的。
a2),在分布式网络设备中应用时,本发明方法可以在网络设备的线卡上对ICMP回送请求报文直接进行分布式响应,不需要与主控板进行一系列交互,从而可以节约网络设备带宽资源,快速处理本线卡收到的ICMP回送请求报文。
以下结合附图和具体实施例对本发明进行详细描述,但不作为对本发明的限定。


图1是本发明方法中对于各种分片类型的示意图;图2是本发明方法中对于ICMP回送请求报文的处理流程图;图3是本发明方法中计算ICMP校验和方法的示意图。
具体实施例方式
以下结合附图和实施例,详细说明本发明技术方案的具体实现方式。
请参阅图1所示,是本发明方法中对于各种分片类型的示意图,图2是本发明方法中对于ICMP回送请求报文的处理流程图。
如图2所示,处理流程按时间顺序大体又包括以下三个子处理流程b1),收到ICMP回送请求报文时进行分类的流程,用于收到ICMP回送请求报文后按照包是否分片来分类;b2),获取封装和路由信息的流程,用于根据分片的源IP地址查询路由表获得出接口信息和封装信息;以及b3),封装ICMP回送应答报文的流程,用于封装ICMP回送应答报文并发送。
上述b1)流程中,在收到发给本地的ICMP回送请求报文后,对报文进行分片分类。
如图1所示,描述了分片分类的方法,其根据IP头的偏移量(offset)字段进行分类。分片的类型包括单片(SINGLE FLIT)、头片(HEAD FLIT)、中间片(MIDDLE FLIT)、尾片(TAIL FLIT)。
当分片类型为单片时,DF位置1,MF位=0,偏移量字段置0;当分片类型为头片时,DF位置0,MF位=1,偏移量字段置0;当分片类型为中间片时,DF位置0,MF位=1,偏移量字段不为0;当分片类型为尾片时,DF位置0,MF位=0,偏移量字段不为0。
其中,DF(Don′t Fragment)为不分片位标志字段,MF(More Fragment)为更多的后续分片标志字段。
当ICMP回送请求报文的类型分别为单片、头片、中间片或尾片,对应地,ICMP回送请求报文称为单片包、头片包、中间片包或尾片包。头片包、中间片包和尾片包构成大包。
上述b2)流程中,按照分片类型的不同分别处理,以获取数据包(即ICMP回送请求报文)的出接口信息和封装信息。
ICMP回送应答报文要到达请求方,必需查询路由表获得请求方的路由信息,这些路由信息包括该报文最终从应答方的哪个接口发出报文,也就是出接口信息,报文以何种格式发出去,是否需要其他如802.1Q tag、MPLS标签等,也就是报文最终的封装信息。其中MPLS(Multiprotocol Label Switch)为多协议标签交换。
如图2所示,如果收到的ICMP回送请求报文为单片包或头片包,则需要根据源IP地址查路由表获得数据包的出接口信息和封装信息,并记录源IP地址、出接口信息、封装信息等;而对于后续的中间片包或尾片包,则可以直接获取到头片包的路由信息,如果获取不成功,就用该分片的源IP地址再查一次路由表。
上述b3)流程中,根据b2)流程获得的信息封装ICMP回送应答报文;其中,封装处理区分分片类型,封装采用零拷贝原则,并采用一种特殊算法获得ICMP校验和。
图2中,对于ICMP回送请求包的处理流程具体包括步骤201,收到ICMP回送请求报文;步骤202,判断ICMP回送请求报文的报文类型,若报文类型为单片包或头片包,则执行步骤203,若报文类型为中间片包或尾片包,则执行步骤205;步骤203,根据源IP地址查询路由表获得出接口信息;步骤204,修改IP头和ICMP头,修改IP头校验和、ICMP头校验和,并转入步骤207;步骤205,获取头片路由信息,并判断获取是否成功,若成功,则执行步骤206,否则执行步骤203;步骤206,修改IP头和IP头校验和;以及步骤207,封装完成后发送该报文。
下面以太网报文为例进一步说明对于头片和单片,首先修改二层MAC头,将目的MAC和源MAC互换,接下来修改IP头,将数据包的源IP与目的IP互换,并修改数据包的TTL值为指定值(一般为255),并重新计算IP头的校验和,然后修改ICMP头,将ICMP头的TYPE字段类型由请求(Request值为08)修改成应答(Reply值为00),并根据图3的方法重新计算ICMP头的校验和后封装完成,即根据ICMP回送请求报文ICMP头的校验和直接得到ICMP回送应答报文的ICMP头的校验和,最后直接封装成ICMP回送应答报文的单片包或者头片包并发送。TTL(Time To Live)为生存时间。
对于中间片和尾片,由于分片中不包括ICMP头,因此封装时只需修改二层MAC头和IP头即可,修改步骤与上述头片和单片相同。封装完成后同样直接发送。
如图3所示,描述了封装ICMP回送应答报文时ICMP头校验和的算法,它是能够快速封装应答报文的关键所在。与常规算法不同,其优点在于不需要对整个ICMP报文进行重组后重新计算校验和,也不需要修改ICMP报文载荷的内容,而是根据收到ICMP回送请求报文的ICMP头的校验和直接计算出ICMP回送应答报文的校验和。具体包括步骤301,获取ICMP回送请求报文为头片或单片时的ICMP头校验和,并假设为CheckSumRequest;步骤302,得到ICMP回送应答报文为头片或单片时的ICMP头校验和,并假设为CheckSumReply,则计算公式为CheckSumReply=CheckSumRequest+0x800上述计算公式可证明如下RFC1071第4页校验和快速计算方法中提到,当某一个字段发生变化时,可以避免重新计算整个报文的校验和,并且提出了新老校验和的计算公式若报文中某一个16位比特的字段发生变化,并且假设老的字段值为m,新的为m′,老的校验和是C,新的校验和是C′,那么C′=C+(-m)+m′=C+(m′-m)。也就是说老的校验和与新的校验和之间的差是恒定值。
由上述b3)的封装ICMP回送应答报文的流程可知,ICMP回送应答报文与ICMP回送请求报文相比,从ICMP头开始,报文内容的区别是ICMP报文类型,将ICMP头中的类型字段由“请求”修改为“应答”,即由08修改为00,其他字段值不变,根据上述公式可以知道,对应修改前老的字段值为m=0x0000,新的m′=0x0800,C′=C+(-m)+m′=C+0x0800。证明完毕。
下面通过一实际应用举例进行描述本发明在一交换机系列设备中,为了能够快速响应ICMP回送请求报文,应用了本发明方法,该交换机系列设备可以快速回应65500字节的大包,时延不超过10毫秒。
本发明的应用和配置方法如下根据用户需求可以配置ICMP快速响应功能使能,可以使得协议栈在常规处理和快速处理之间切换,下面是配置命令使用的一个实例进入配置模式ZXR 10#config terminal配置ICMP快速响应使能ZXR 10(config)#ip icmp fast-process配置ICMP快速响应不使能ZXR 10(config)#no ip icmp fast-process通过举例可知,本发明方法的原理就是对于ICMP回送请求报文的分片进行分布式处理,与常规处理相比,该处理方法可以节省CPU资源,达到快速响应、防止攻击的目的。
本发明提出了在网络设备上用软件实现一种快速响应ICMP回送请求报文的方法,与现有技术相比,这种方法不仅可以提高对ICMP回送请求保文的响应速度,而且不需要缓存数据包的分片,可以节约内存,减轻网络设备CPU负担,防止CPU被攻击。
当然,本发明还可有其他多种实施例,在不背离本发明精神及其实质的情况下,熟悉本领域的技术人员当可根据本发明作出各种相应的改变和变形,但这些相应的改变和变形都应属于本发明所附的权利要求的保护范围。
权利要求
1.一种快速响应ICMP回送请求报文的方法,用于网络设备,其特征在于,包括步骤一,接收ICMP回送请求报文,并对所述ICMP回送请求报文进行分片分类;步骤二,根据不同的分片类型对所述ICMP回送请求报文进行分别处理,以获得相应的出接口信息和封装信息;及步骤三,根据所述出接口信息和所述封装信息封装ICMP回送应答报文并发送。
2.根据权利要求1所述的快速响应ICMP回送请求报文的方法,其特征在于,所述步骤一中,根据IP头的偏移量字段对所述ICMP回送请求报文进行分片分类。
3.根据权利要求1或2所述的快速响应ICMP回送请求报文的方法,其特征在于,所述步骤一中,所述分片类型包括单片、头片、中间片及尾片。
4.根据权利要求3所述的快速响应ICMP回送请求报文的方法,其特征在于,所述步骤二中,当所述ICMP回送请求报文的分片类型为单片或头片时,根据单片或头片的源IP地址查找路由表获得所述ICMP回送请求报文的出接口信息和封装信息,并记录所述源IP地址、所述出接口信息、所述封装信息。
5.根据权利要求3所述的快速响应ICMP回送请求报文的方法,其特征在于,所述步骤二中,当所述ICMP回送请求报文的分片类型为中间片或尾片时,通过直接获取方式获取头片的路由信息。
6.根据权利要求5所述的快速响应ICMP回送请求报文的方法,其特征在于,所述步骤二中,还包括判断通过直接获取方式获取头片的路由信息是否成功的步骤,若是,则执行所述步骤三;否则,进一步根据相应分片的源IP地址查找路由表,以获取出接口信息,再执行所述步骤三。
7.根据权利要求4、5或6所述的快速响应ICMP回送请求报文的方法,其特征在于,所述步骤三中,根据所述ICMP回送请求报文的不同分片类型对所述ICMP回送应答报文采用不同的封装方式。
8.根据权利要求7所述的快速响应ICMP回送请求报文的方法,其特征在于,当所述ICMP回送请求报文为单片包或头片包时,所述步骤三具体为步骤311,修改二层MAC头,将目的MAC与源MAC互换;步骤312,修改IP头,将所述ICMP回送请求报文的源IP与目的IP互换,并修改所述ICMP回送请求报文的生存时间值,重新计算IP头的校验和;步骤313,修改ICMP头,将ICMP头的TYPE字段类型由请求改为应答,并根据所述ICMP回送请求报文ICMP头的校验和直接得到所述ICMP回送应答报文的ICMP头的校验和;及步骤314,封装成所述ICMP回送应答报文的单片包或者头片包并发送。
9.根据权利要求7所述的快速响应ICMP回送请求报文的方法,其特征在于,当所述ICMP回送请求报文为中间片包或尾片包时,所述步骤三具体为步骤321,修改二层MAC头,将目的MAC与源MAC互换;步骤322,修改IP头,将所述ICMP回送请求报文的源IP与目的IP互换,并修改所述ICMP回送请求报文的生存时间值,重新计算IP头的校验和;步骤323,封装成所述ICMP回送应答报文的中间片包或者尾片包并发送。
全文摘要
本发明公开了一种快速响应ICMP回送请求报文的方法,用于网络设备,其特征在于,包括步骤一,接收ICMP回送请求报文,并对所述ICMP回送请求报文进行分片分类;步骤二,根据不同的分片类型对所述ICMP回送请求报文进行分别处理,以获得相应的出接口信息和封装信息;及步骤三,根据所述出接口信息和所述封装信息封装ICMP回送应答报文并发送。采用本发明方法对不需分片的ICMP回送请求报文可以直接应答,对每个分片直接处理并封装发送,从而达到节约CPU资源,快速响应的目的,本发明方法还可以在网络设备的线卡上对ICMP回送请求报文直接进行分布式响应,快速处理本线卡收到的ICMP回送请求报文。
文档编号H04L12/26GK101026578SQ20071006315
公开日2007年8月29日 申请日期2007年1月29日 优先权日2007年1月29日
发明者钱霄鸿, 纪小利, 刘兴铨, 夏靓 申请人:中兴通讯股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1