一种通用的针对应用层协议的IPv4/IPv6数据翻译网关及方法_2

文档序号:9690858阅读:来源:国知局
>[0035] 图2是本发明通用的针对应用层协议的IPv4/IPv6数据翻译网关体系结构示意图。
[0036] 图3是本发明通用的针对应用层协议的IPv4/IPv6数据翻译网关解析器生成流程 图。
【具体实施方式】
[0037] 下面结合附图和实施例详细说明本发明的实施方式。
[0038] 如图1所示,本发明通用的针对应用层协议的IPv4/IPv6数据翻译网关部署在ICP 一侧,以保证对用户的透明,ICP也可以方便地使用协议描述语言自定义私有协议。
[0039] 如图2所示,在通用的针对应用层协议的IPv4/IPv6数据翻译网关体系结构中,共 包含以下几个模块:
[0040] 分类器(Classifier):分类器决定接收到的数据报文的应用层协议类型。当一个 新的数据报文到来时,分类器根据传输层协议及端口来决定该数据报文的应用层协议类 型,然后调用对应的解析器来解析该数据报文。如果根据上述条件有多个协议同时匹配成 功,将会轮流调用对应的解析器,直到有一个协议的解析器接受该数据报文。同时分类器也 会记录一些有关流的信息。如果分类器判定该数据报文不需要处理跨协议的翻译,则会跳 过应用层处理。
[0041] 解析器(Parsers):解析器是解析器生成引擎根据协议描述语言转换而来的。解析 器分析应用层数据并根据翻译规则产生将会应用于该数据报文的翻译操作。例如,解析器 找到了 IPv4的地址IPx和端口 PORTx,并根据翻译规则(IPx,P0RTy->IPy,PORTy)产生相应的 操作来将ΙΡχ替换成IPy以及将PORTx替换成PORTy。
[0042] 数据报文修改模块(Packet Modifier):数据报文修改模块负责执行解析器生成 的翻译操作。所有的操作最终都会转换成文本替换操作。因为很多操作都会改变数据报文 的长度,本发明应用了优化算法来加速修改操作的执行过程。
[0043] TCP管理器(TCP Manager) :TCP管理器针对有状态的TCP连接执行一些额外的操 作。一方面它跟踪更新TCP序号和ACK序号,以处理TCP报文的无序接收;另一方面提供缓存 能力,以处理TCP重传和跨越数据报文的应用层协议字段。
[0044] 流状态管理器(Flow Manager):本发明通用的针对应用层协议的IPv4/IPv6数据 翻译网关会为每个数据流维护相关状态信息,包括协议类型、解析器状态、TCP序列号偏移 以及缓存状态等。流状态管理器与上述功能模块交互来获取、提供以及更新各种状态信息。 每个数据流由五元组(源/目的地址,源/目的端口,传输层协议)唯一标记,并且映射在一起 的IPv4/IPv6连接及其两个方向均视作同一数据流来管理。
[0045] 通过以上体系结构,IPv6单栈用户能够访问原有IPv4服务,并能够方便地支持多 种应用层协议,从而有效实现IPv4与IPv6的互联。
[0046] 本发明解决其技术问题所采用的技术方案通用的针对应用层协议的IPv4/IPv6数 据翻译网关需通过6个基本步骤完成:
[0047]步骤1:用户(一般是互联网内容提供商的网络管理员)使用本发明的协议描述语 言描述对其使用的应用层协议进行描述,包括协议头部格式及内容格式,标记出需要执行 翻译操作的字段,并指定在该字段上执行的操作。
[0048] 本发明中协议描述语言提供经过预定义的常用操作接口,用户可以调用接口来指 定将要执行的操作,而不必手动编写代码;同时该描述语言具有自动补全正则表达式的功 能,用户不必为每一个终结符编写正则表达式;该描述语言能够根据用户定义的规则自动 生成异常处理规则。
[0049] 步骤2:根据步骤1中用户编写的协议描述语言代码,生成可执行的解析器子程序。 首先,本发明自动补全用户代码中缺失的规则,包括终结符的正则表达式以及将预定义的 操作接口展开为C++代码,补全后的代码作为中间代码;然后,将中间代码分离为两部分,词 法规则和语法规则,分别送往对应的分析程序;最后,生成解析器的C++代码,并集成到翻译 网关中供其他模块调用。生成解析器的流程如图3所示。
[0050] 步骤3:当一个报文到来时,首先被分类器接收并进行分类。分类主要是根据传输 层协议及端口号,如果能够匹配某个应用层协议的解析器,则调用该解析器执行后续操作; 如果匹配到多个应用层协议,则轮流调用其对应的解析器,直到存在某解析器表示接受该 数据报文的格式。同时分类器也会记录一些有关流的信息。如果分类器判定该数据报文不 需要处理跨协议的翻译,则会跳过应用层处理。
[0051]步骤4:由步骤3调用的解析器对传入的数据报文的应用层数据进行分析,找到所 有需要被翻译的协议字段,包括其位置和长度,并查询流管理器来获取翻译之后的值,并将 这些信息传递给数据报文修改模块。解析器依靠上述协议描述语言定义的规则解析数据, 而不是使用正则表达式匹配,得出的结果更加精确并且有效减少误判。
[0052]对于一个数据流的不同方向,将创建两个独立的解析器实例分别处理。当一个报 文处理完毕而数据流未结束时,则解析器状态将被保存,等待下一个该数据流的报文到来 之后,再恢复运行。
[0053] 步骤5:数据报文修改模块接收步骤4中解析器所传递的参数,并执行其中包含的 操作。因为修改前后可能会出现数据报文长度的变化,如果使用常规算法,其最坏情况下时 间复杂度可达〇(NL),其中N为操作个数,L为报文长度。所以本发明提出了一种优化算法:
[0054] 算法卩&。1^七]\1〇(11;1^〇&1:;[011(卩,八)
[0055] 输入:数据报文p的应用层数据和操作集A
[0056] 输出:数据报文的应用层数据
[0057] 1:将操作集A中的操作按照start_pos升序排序
[0058] 2:p'-glen-|p
[0059] 3:ps-0;pd-0;head-0
[0060] 4:while head<|A|do
[0061] 5:if ps<A[head].start_pos then
[0062] 6: size-A[head] · start_pos_ps
[0063] 7:p' [pd~pd+size_l]-p[ps~ps+size_l]
[0064] 8:pd-pd+size;ps-ps+size
[0065] 9: else
[0066] 10: size-| A[head] .newdata |
[0067] 11 :p' [pd~pd+size-1]-A[head] .newdata
[0068] 12:pd-pd+size;ps-A[head] .end_pos
[0069] 13:head-head+1
[0070] 14:end if
[0071 ] 15:end while
[0072] 16: size-len-ps
[0073] 17 37 [pd~pd+size-1]-p[ps~len-1]
[0074] 18:return p7
[0075] 其中len为输入串长度,ps为原始串遍历指针,pd为目的串遍历指针,head为操作 集遍历指针,P [ a~b ]表示p串的从a到b位置的子串,-(左箭头)表示赋值操作。
[0076] 该算法的主要思想是遍历内容的每个字符,判断其来自于原始文本还是替换操作 的结果。首先,将操作集根据操作开始位置(start_p 〇s)升序排序。对于每个目标位置,判断 是应该选择来自操作的结果还是原始的文本。如果某一个操作的结果被选取了(即操作被 执行),新的数据将被拷贝到目标位置,同时原始文本的遍历指针将跳至该操作数据的结尾 处(end_p〇s)。因为修改前后可能会出现数据报文长度的变化,如果使用常规算法,其最坏 情况下时间复杂度可达〇(NL),其中N为操作个数,L为报文长度。所以本发明提出了一种优 化算法,该算法最坏情况下时间复杂度为〇(NlogN+L)。
[0077]该算法最坏情况下时间复杂度为0(NlogN+L)。
[0078]在执行数据报文修改操作时使用了缓存机制,来应对TCP报文重传、失序等。如果 出现需要修改的字段可能会跨越多个报文的情况时,也会将报文缓存。
[0079]步骤6:将修改之后的报文重新封装并转发,并在每接收到一个新的数据报文时重 复步骤3-6。
[0080]为了使本发明的技术方案及优点描述地更加清楚明白,以下结合一个样例性实施 例来进一步详细说明。实施例以SIP(Session Initiation Protocol)协议为背景,以SIP Invite报文为内容,说明应用层协议描述语言的格式与使用方法。所描述的实施例仅是本 发明的一部分实施例,而不是所有实施例的穷举。
[0081 ]以下对本发明按照实施例的内容进行逐步详细说明:
[0082]步骤1:用户使用本发明中的一种协议描述语言描述对其使用的应用层协议进行 描述,包括
当前第2页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1