CN104009923A - 一种基于指针迭代的ipv6报文硬件解析方法 - Google Patents
一种基于指针迭代的ipv6报文硬件解析方法 Download PDFInfo
- Publication number
- CN104009923A CN104009923A CN201410196343.XA CN201410196343A CN104009923A CN 104009923 A CN104009923 A CN 104009923A CN 201410196343 A CN201410196343 A CN 201410196343A CN 104009923 A CN104009923 A CN 104009923A
- Authority
- CN
- China
- Prior art keywords
- pointer
- ext
- ipv6
- message
- type
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Abstract
本发明公开了一种基于指针迭代的IPV6报文硬件解析方法,主要包括如下步骤:将输入报文转换为64bit宽的数据,从报文头开始,对报文进行周期计数;根据IPV6基本头的外层信息,解析出IPV6基本头的位置以及基本头中的下个首部所在位置,并存入指针;用报文所在的处理周期以及在周期内的偏移与指针值进行比较,提取出基本头的下个首部类型并判定是否是IPV6扩展头,如否,则扩展头解析结束;如是,则根据首部类型值以及指针值来提取第一个扩展头中的头长度、下个首部类型信息,下个扩展头的位置等信息,并分别存入类型寄存器与位置指针;用类型寄存器与位置指针对下一层报文进行迭代处理,将新计算出的值覆盖旧值,直至扩展头解析结束。本发明的特点是:使用硬件资源少;能够对任意扩展头组合的IPV6报文的解析;能够实现IPv6报文的实时解析。
Description
技术领域
本发明涉及计算机网络技术中的一种报文解析方法,特别是涉及一种基于指针迭代的IPv6报文硬件解析方法。
背景技术
近年来,IPv6网络有了很大的发展和应用,尤其是基于各种隧道协议的Ipv6网络层出不穷。丰富多样的报文类型对与网络设备的报文解析能力与报文分类带来了很大的压力。
因为各层协议种类丰富,协议间的嵌套变化多端,使得使用硬件对各种报文进行实时解析困难重重。目前通常的做法是,用硬件完成基础的功能较为简单的协议解析,随后通过控制通道或数据通道交由上层的协议处理软件进行进一步处理。这种做法的好处是处理比较灵活,可重构性强,但在数据流量巨大的情况下采用上述方法会使系统处理能力与实时性受到很大限制。因此,现在亟需一种能够通过硬件实时完成更多的协议解析的方法。
发明内容
本发明的目的是:提供一种基于指针迭代的能够实时对IPv6报文解析的方法。
本发明的技术方案是:
一种基于指针迭代的IPV6报文硬件解析方法,其特征在于,所述方法包括如下步骤:
A、将输入报文转换为64bit宽的数据,从报文头开始,对报文进行周期计数;
B、根据IPV6基本头的外层信息,解析出IPV6基本头的位置以及基本头中的下个首部所在位置,并存入指针;
C、用报文所在的计数周期以及在周期内的偏移与指针值进行比较,提取出基本头的下个首部类型并判定是否是IPV6扩展头,如否,则扩展头解析结束; 如是,则根据首部类型值以及指针值来提取第一个扩展头中的头长度、下个首部类型信息,下个扩展头的位置等信息,并分别存入类型寄存器与位置指针;用类型寄存器与位置指针对下一层报文进行迭代处理,将新计算出的值覆盖旧值,直至扩展头解析结束。
进一步地,所述步骤B的具体过程为:根据IPV6基本头的外层信息,解析出IPV6基本头的位置以及基本头中的下个首部所在位置,用寄存器basehead_pointer作为指针存储基本头的位置,用寄存器first_ext_headtype_pointer作为指针存储基本头中下个首部所在位置,计算并生成指针first_ext_headloc_pointer作为基本头的下个首部所在位置。
进一步地,所述步骤C的具体过程为:用报文所在的周期以及在周期内的偏移与寄存器first_ext_headtype_pointer进行匹配,提取出基本头的下个首部类型并存入寄存器first_ext_headtype,根据寄存器first_ext_headtype存储的值来判定是否是IPV6扩展头,如否,则扩展头解析结束;如是,根据first_ext_headloc_pointer来提取第一个扩展头中的头长度和下个扩展头的首部类型的信息,累加计算下个扩展头的位置与类型,并分别存入指针next_ext_headloc_pointer与寄存器next_ext_headtype;用指针next_ext_headloc_pointer与寄存器next_ext_headtype对下一层报文进行处理,用新计算出的值覆盖旧值,接着对下层报文进行迭代处理,直至扩展头解析结束。
进一步地,所述迭代处理的过程为:解析出首层扩展头的位置与类型,并将首层扩展头的位置存入指针first_ext_headtype_pointer,将其类型存入寄存器first_ext_headtype;根据首层扩展头的位置与类型,解析出第二层扩展头的位置及其类型,并存入指针next_ext_headloc_pointer与寄存器next_ext_headtype;依次类推,根据第n层扩展头的位置与类型,解析出第n+1层的扩展头位置及其类型,并同样存入指针next_ext_headloc_pointer与寄存器next_ext_headtype,进行替换;直至next_ext_headtype指示下一层为非IPV6扩展头,则完成迭代过程。
本发明的有益效果是:
1)灵活,系统可以支持任意Ipv6扩展头的任意组合,无需增加新的组件,不会降低系统的处理能力与实时性;
2)实时,系统支持对Ipv6数据的实时解析,解析过程仅有微秒级的逻辑处理延时。
附图说明
下面结合附图和实施例对本发明作进一步详细说明
图1为本发明的系统步骤流程示意图;
图2为本发明实施例的数据报文格式;
具体实施方式
下面将结合附图,对本发明的技术方案作进一步的描述。
本发明的核心思想是:首先对到达的数据分组进行周期计数;然后利用硬件指针存储下层协议的特定位置;接着利用数据所在计数周期以及在周期内的偏移与指针的值进行比较,提取出下层协议的特定信息;最后利用指针迭代进行IPV6的扩展头解析。
如图1所示,本发明的技术方案主要包括如下步骤:
步骤101、每个时钟周期处理64bit宽的报文数据,从报文头开始,对报文进行周期计数;
步骤102、根据IPV6基本头的外层信息,解析出IPV6基本头的位置以及基本头中的下个首部所在位置,用寄存器basehead_pointer作为指针存储基本头的位置,用寄存器first_ext_headtype_pointer作为指针存储基本头中的下个首部所在位置,计算并生成指针first_ext_headloc_pointer做为基本头的下个首部所在位置;
步骤103、用报文所在的处理周期以及在周期内的偏移与first_ext_headtype_pointer进行匹配,提取出基本头的下个首部类型并存入寄存器first_ext_headtype,根据first_ext_headtype存储的值来判定是否是IPV6扩展头,如否,则扩展头解析结束;
步骤104、根据first_ext_headloc_pointer来提取第一个扩展头中的头长度、下个首部类型信息,累加计算下个扩展头的位置与类型,并分别存入指针next_ext_headloc_pointer与寄存器next_ext_headtype;
步骤105、用指针next_ext_headloc_pointer与next_ext_headtype对下一层报文进行迭代处理,用新计算出的值覆盖旧值,直至扩展头解析结束。
下面结合具体事例,对本发明的技术方案作进一步说明。
结构如图2所示的IPV6 over ETH-II报文,它的解析过程如下:
对64bit宽的数据报文进行同步周期计数;
进行Ipv6帧头定界,根据外层为以太网帧,确定以太网协议类型位置在13、14字节,则在第2个时钟周期到达时,取出其周期内的第5、6字节即为协议类型,如果为0x86dd,则表明下层为Ipv6数据,即可以确定Ipv6 base head开始于报文第15字节,其中下个首部类型位于数据的第20字节,置first_ext_headtype_pointer为20;
提取基本头中的下个首部类型,在数据的第3个周期到达时,取其周期内的第2个字节,即为基本头中的下个首部类型,判断基本头中的下个首部是否为扩展头,本实施例中,下个首部为0表示其下个首部为逐跳扩展头。
提取首个扩展头的类型与指针信息,将 “0”写入next_ext_headtype,同时计算出在逐跳头中指示的下个首部位置应为“55”,将“55”写入next_ext_headloc_pointer;
提取扩展头中的头长度、下一跳类型等信息,并计算扩展头中下一跳头的位置,进行指针迭代,在数据的第7个周期到达时,取其第7个字节,即为逐跳头中指示的下一个扩展头类型,可以得出新的next_ext_headtype为43,同时取其第8个字节计算逐跳头的头长度,加上next_ext_headloc_pointer的值55,即得新的next_ext_headloc_pointer为63,用新的next_ext_headtype与next_ext_headloc_pointer替代旧值,完成第一次迭代。
以此类推,重复迭代,直到扩展头解析结束。
最后应当说明的是:以上实施例仅用以说明本发明的技术方案而非对其限制;尽管参照较佳实施例对本发明进行了详细的说明,所属领域的普通技术人员应当理解:依然可以对本发明的具体实施方式进行修改或者对部分技术特征进行等同替换;而不脱离本发明技术方案的精神,其均应涵盖在本发明请求保护的技术方案范围当中。
Claims (4)
1.一种基于指针迭代的IPV6报文硬件解析方法,其特征在于,所述方法包括如下步骤:
A、将输入报文转换为64bit宽的数据,从报文头开始,对报文进行周期计数;
B、根据IPV6基本头的外层信息,解析出IPV6基本头的位置以及基本头中的下个首部所在位置,并存入指针;
C、用报文所在的计数周期以及在周期内的偏移与指针值进行比较,提取出基本头的下个首部类型并判定是否是IPV6扩展头,如否,则扩展头解析结束; 如是,则根据首部类型值以及指针值来提取第一个扩展头中的头长度、下个首部类型信息,下个扩展头的位置等信息,并分别存入类型寄存器与位置指针;用类型寄存器与位置指针对下一层报文进行迭代处理,将新计算出的值覆盖旧值,直至扩展头解析结束。
2.根据权利要求1所述的一种基于指针迭代的IPV6报文硬件解析方法,其特征在于,所述步骤B的具体过程为:根据IPV6基本头的外层信息,解析出IPV6基本头的位置以及基本头中的下个首部所在位置,用寄存器basehead_pointer作为指针存储基本头的位置,用寄存器first_ext_headtype_pointer作为指针存储基本头中下个首部所在位置,计算并生成指针first_ext_headloc_pointer做为基本头的下个首部所在位置。
3.根据权利要求2所述的一种基于指针迭代的IPV6报文硬件解析方法,其特征在于,所述步骤C的具体过程为:用报文所在的周期以及在周期内的偏移与寄存器first_ext_headtype_pointer进行匹配,提取出基本头的下个首部类型并存入寄存器first_ext_headtype,根据寄存器first_ext_headtype存储的值来判定是否是IPV6扩展头,如否,则扩展头解析结束;如是,根据指针first_ext_headloc_pointer来提取第一个扩展头中的头长度和下个扩展头的首部类型的信息,累加计算下个扩展头的位置与类型,并分别存入指针next_ext_headloc_pointer与寄存器next_ext_headtype;用指针next_ext_headloc_pointer与寄存器next_ext_headtype对下一层报文进行处理,用新计算出的值覆盖旧值,接着对下层报文进行迭代处理,直至扩展头解析结束。
4.根据权利要求3所述的一种基于指针迭代的IPV6报文硬件解析方法,其特征在于,所述迭代处理的过程为:解析出首层扩展头的位置与类型,并将首层扩展头的位置存入指针first_ext_headtype_pointer,将其类型存入寄存器first_ext_headtype;根据首层扩展头的位置与类型,解析出第二层扩展头的位置及其类型,并存入指针next_ext_headloc_pointer与寄存器next_ext_headtype;依次类推,根据第n层扩展头的位置与类型,解析出第n+1层的扩展头位置及其类型,并同样存入指针next_ext_headloc_pointer与寄存器next_ext_headtype,进行替换;直至next_ext_headtype指示下一层为非IPV6扩展头,则完成迭代过程。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410196343.XA CN104009923B (zh) | 2014-05-12 | 2014-05-12 | 一种基于指针迭代的ipv6报文硬件解析方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410196343.XA CN104009923B (zh) | 2014-05-12 | 2014-05-12 | 一种基于指针迭代的ipv6报文硬件解析方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104009923A true CN104009923A (zh) | 2014-08-27 |
CN104009923B CN104009923B (zh) | 2017-07-14 |
Family
ID=51370418
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410196343.XA Active CN104009923B (zh) | 2014-05-12 | 2014-05-12 | 一种基于指针迭代的ipv6报文硬件解析方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104009923B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106850559A (zh) * | 2016-12-26 | 2017-06-13 | 中国科学院计算技术研究所 | 一种可扩展的网络协议解析系统及方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1585379A (zh) * | 2004-05-25 | 2005-02-23 | 华中科技大学 | 一种数据包的快速解析方法 |
CN1794732A (zh) * | 2005-12-26 | 2006-06-28 | 北京交通大学 | IPv6微型传感路由器协议栈体系结构及实现方法 |
US20080117913A1 (en) * | 2006-02-21 | 2008-05-22 | Tatar Mohammed I | Pipelined Packet Switching and Queuing Architecture |
-
2014
- 2014-05-12 CN CN201410196343.XA patent/CN104009923B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1585379A (zh) * | 2004-05-25 | 2005-02-23 | 华中科技大学 | 一种数据包的快速解析方法 |
CN1794732A (zh) * | 2005-12-26 | 2006-06-28 | 北京交通大学 | IPv6微型传感路由器协议栈体系结构及实现方法 |
US20080117913A1 (en) * | 2006-02-21 | 2008-05-22 | Tatar Mohammed I | Pipelined Packet Switching and Queuing Architecture |
Non-Patent Citations (2)
Title |
---|
李由,罗艺林,何鹏: "基于以太网数据帧格式的IPv6报文解析器设计", 《自动化信息》 * |
李由,罗艺林: "基于硬件描述语言的IPv6报文解析器设计", 《计算机光盘软件与应用》 * |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106850559A (zh) * | 2016-12-26 | 2017-06-13 | 中国科学院计算技术研究所 | 一种可扩展的网络协议解析系统及方法 |
Also Published As
Publication number | Publication date |
---|---|
CN104009923B (zh) | 2017-07-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
GB2370479B (en) | A method of processing data packets | |
MX2015010418A (es) | Red de acceso por radio evolución a largo plazo. | |
CN108063970A (zh) | 一种处理直播流的方法和装置 | |
CN106162293B (zh) | 一种视频声音与图像同步的方法及装置 | |
CN204376951U (zh) | 多设备信息采集系统 | |
CN103714004A (zh) | Jvm在线内存泄露分析方法及系统 | |
CN107147465A (zh) | 一种面向时间触发网络的交换机时钟同步控制器及控制方法 | |
CN108327745A (zh) | 一种列车数据实时解析方法和装置 | |
IN2015DN03017A (zh) | ||
CN105045391A (zh) | 智能手表手势输入方法及智能手表 | |
CN105677311A (zh) | 一种函数调用关系的识别方法及装置 | |
MY157412A (en) | Method of identifying a protocol giving rise to a data flow | |
CN106412697A (zh) | 智能电视自动获取时区的方法和装置 | |
CN102609472A (zh) | 进行分布式数据库系统性能测试的方法及系统 | |
IL276119A (en) | System, method and computer software for automatically generating training data for analyzing a new configuration of a communication network | |
CN103780624A (zh) | 一种面向复杂系统的通用应用层网络通信协议应用方法 | |
CN103607395A (zh) | 一种传输触觉数据的方法及装置 | |
CN109951430B (zh) | 一种数据处理方法及装置 | |
CN104009923A (zh) | 一种基于指针迭代的ipv6报文硬件解析方法 | |
CN106789416A (zh) | 工控系统专用协议识别方法与系统 | |
CN105634863A (zh) | 一种应用协议检测的方法及设备 | |
CN103905184A (zh) | 经典网络融入量子保密通信网络流量控制方法 | |
CN104283958B (zh) | 一种系统任务调度方法 | |
CN102843269B (zh) | 一种模拟微码业务处理流程的方法及系统 | |
CN111315026A (zh) | 信道的选择方法、装置、网关及计算机可读存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |