首页> 中国专利> 一种嵌入式网络应用中UDP/IP协议栈实现方法

一种嵌入式网络应用中UDP/IP协议栈实现方法

摘要

本发明涉及一种基于数字信号处理器的嵌入式网络应用中UDP/IP协议栈实现方法。本发明针对数字信号处理器的特点实现8位存储与16位存储相互转换,提供一个UDP/IP协议与链路层及以下层之间数据存储格式的转换层;以16位为操作和存储单位实现UDP/IP协议栈IP层及UDP层处理,并针对数字信号处理器优化了16位校验值的计算。在使用单个数字信号处理器作为处理器的嵌入式网络电子产品中,本发明相比普遍的8位UDP/IP协议栈,具有以下优点:1)节约约一半的数据内存使用空间,更加有效地利用了网络嵌入式应用的硬件资源;2)优化了IP首部校验值和UDP数据报校验值的计算,从而提高了协议栈的处理效率。

著录项

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2012-05-16

    未缴年费专利权终止 IPC(主分类):H04L29/06 授权公告日:20091021 终止日期:20110307 申请日:20060307

    专利权的终止

  • 2009-10-21

    授权

    授权

  • 2007-11-07

    实质审查的生效

    实质审查的生效

  • 2007-09-12

    公开

    公开

说明书

技术领域

本发明属于网络通信领域,具体地说,本发明涉及一种基于数字信号处理器(Digital Signal Proccesser,DSPs)的嵌入式网络应用中UDP/IP协议栈实现方法。

背景技术

网际协议(IP)是一个网络层协议,它包含寻址信息和控制信息,可使数据包在网络中路由。IP协议是TCP/IP协议族中的主要网络层协议。用户数据报协议(UDP)是一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。

随着互联网技术的发展,网络电子产品层出不穷。在这些网络电子产品中,嵌入式电子产品占有很大的比重,例如交换机、家用路由器、IP电话、VoIP(Voiceover Internet Protocol)适配器等。嵌入式电子产品使用的处理器有嵌入式微处理器、嵌入式微控制器、嵌入式片上系统等。在一些网络应用中,例如VoIP适配器,即需要网络功能、又需要语音编解码的计算能力,会使用处理器加上数字信号处理器的方式实现,但这种设计系统复杂、成本较高、功耗较大。数字信号处理器虽然是专门为数字信号处理而设计的处理器,但是其仍然可以作为通用处理器实现控制功能。为了简化系统设计、降低成本,嵌入式网络应用方案可以采用单个数字信号处理器的架构,使用数字信号处理器同时提供网络传输的控制和计算能力。

但是,数字信号处理器本身是为进行数字信号处理运算而设计的微处理器,主要应用是实时快速的实现各种数字信号处理算法。数字信号处理器采用哈佛结构,指令与数据空间分开,可以同时访问指令和数据。当前,大多数16位定点数字信号处理器采用的是纯16位设计,不能对数据进行8位寻址,难以实现8位数据存储操作。相比支持8位数据操作的嵌入式微处理器和嵌入式微控制器,在处理IP/UDP协议网络分组的8位数据流时效率较低,在普遍的实现中会造成硬件资源的浪费。在大多数采用单个数字信号处理器架构的嵌入式网络应用中,UDP/IP协议栈在处理由链路层转送的网络分组的8位数据流时,一般使用16位空间单元存储8位的网络数据。例如在链路层使用媒介访问控制协议(MediaAccess Control,MAC)时,网络分组8位数据流在内存中,将浪费16位存储单元中高8位的部分,如图1。另外,在计算IP协议和UDP协议的16位校验值时,如果采用8位的存储方式,将不能发挥数字信号处理器在计算方面的优势。本发明针对针对16位定点数字信号处理器的特点,提出了一种16位的UDP/IP协议栈的实现方法,可以高效的运行于16位定点数字信号处理器之上。

发明内容

本发明的目的是针对16位定点数字信号处理器缺乏8位数据操作的支持的缺点,提出UDP/IP协议栈的一种高效的16位实现方法。

为实现上述发明目的,本发明提供的嵌入式网络应用中UDP/IP协议栈实现方法,包括定义IP层数据结构、IP分组收发处理以及定义UDP层数据结构、UDP数据报收发处理;其特征在于,

所述定义IP层数据结构是定义一个IP头结构体,该结构体包含一组字长为16位的字,这组字分别是:一个表征IP版本、IP分组首部长度和服务类型的字;一个表征IP分组长度的字;一个表征IP分组标识的字;一个表征IP标志和分片偏移的字;一个表征IP分组存活时间和负载协议类型的字;一个表征IP分组首部校验值的字;表征IP分组源IP地址的两个字;表征IP分组目的IP地址的两个字;表征IP选项的两个字;

所述定义UDP层数据结构是定义一个UDP头结构,该结构体包含一组字长为16位的字,这组字分别是:一个表征源端口号的字;一个表征目的端口号的字;一个表征UDP数据报长度的字;一个表征UDP数据报首部校验值的字。

所述IP分组接收处理包括如下步骤:

11)使用IP头结构体匹配IP分组;

12)获取IP分组IP协议版本,如果版本号不是4,则丢弃该分组,退出处理流程;

13)获取IP分组首部长度,用数字信号处理器优化计算并校验IP分组首部的16位校验值;如果校验值错误,则丢弃该分组,退出处理流程;

14)获取IP分组的源IP地址和目的IP地址,如果目的地址不是我方的IP地址,则丢弃该分组,退出处理流;

15)获取并处理IP分组的IP首部选项;

16)获取IP分组总长度,计算出数据负载长度;

17)获取数据负载协议类型,根据协议类型将数据负载传送给相应模块进行处理;

所述IP分组发送处理包括如下步骤:

21)获取内存空间,在起始处构建一个IP头结构,填充IP首部以下信息:版本号、服务类型、标识、生存时间;

22)根据负载数据协议类型填充IP头部协议信息;

23)将我方IP地址和负载数据的目的端IP地址填充到IP首部相应位置;

24)填充IP头部选项;

25)计算IP首部长度,填入IP首部;

26)将负载数据拷贝至IP首部选项数据之后,计算IP分组总长度,填充入IP首部;

27)用数字信号处理器优化计算IP分组首部的16位校验值,将校验值填充入IP首部;

28)将数据发送给本发明中的数据转换层,转换为8位存储格式并发送至链路层模块处理。

所述UDP数据报接收处理包括如下步骤:

31)使用UDP头结构体匹配UDP数据报;

32)获取UDP数据报的长度;

33)用数字信号处理器直接计算并校验UDP数据报的16位校验值;如果校验值错误,则丢弃该分组,退出处理流程;

34)获取UDP数据报的源端口与目的端口,查询是否有上层模块处理该UDP数据报;如果有,则计算负载数据长度并将数据传送给相应的上层模块;否则丢弃该分组;

所述UDP数据报发送处理包括如下步骤:

41)获取内存空间,在起始处构建一个UDP头结构,将负载数据拷贝到UDP头结构之后;

42)根据负载数据长度计算UDP数据报长度,并填充入UDP首部;

43)将源端口号和目的端口号填充入UDP首部;

44)用数字信号处理器直接计算UDP数据报的16位校验值,并填充入UDP数据报首部;

45)将UDP数据报传送给UDP/IP协议栈IP层处理。

所述UDP/IP协议栈与链路层之间设置一个转换层,该转换层实现内存数据8位存储与16位存储的相互转换,其中,

内存数据8位存储转换为16位存储包括如下步骤:

91)获取8位数据流的长度n,如果长度n为奇数,则长度n加1;

92)令i为0;

93)将8位数据流中第2×i+1个8位数据左移8位,与8位数据流中第2×i个8位数据相加,存入第i个16位存储单元中;

94)i增加2;

95)如果i小于n,则转入步骤93);否则转入96);

96)释放8位数据流原有内存空间中n/2之后的部分,剩余部分存储空间内即为转换好的16位数据;

内存数据16位存储转换为8位存储的方法包括如下步骤:

101)获取16位数据流的长度n;

102)获取长度为2×n的存储空间M

103)令i为0;

104)将16位数据流中第i个16位数据存入存储空间M中第2×i个单元中,将存储空间M中第2×i个单元数据与0x00FF相与;

105)将16位数据流中第i个16位数据存入存储空间M中第2×i+1个单元中,将存储空间M中第2×i+1个单元数据右移8位;

106)i增加1;

107)如果i小于n,则转入步骤104);否则转入108);

108)释放原数据流存储空间,存储空间M即为转换好的8位数据流。

本发明的优点是,在使用单个数字信号处理器作为处理器的嵌入式网络电子产品中,使用16位的UDP/IP协议栈,相比普遍的8位UDP/IP协议栈,具有以下优点:

1)针对16位定点数字信号处理器最小存储单元为16位的特点,本发明实现的协议栈,节约约一半的数据内存使用空间,更加有效地利用了网络嵌入式应用的硬件资源;

2)针对16位数字信号处理器计算能力强的特点,在16位的存储模式下,本发明实现的协议栈,可以使用针对该数字信号处理器的算法优化IP首部校验值和UDP数据报校验值的计算,从而提高了协议栈的处理效率。

附图说明

图1是现有技术中链路层使用MAC协议的网络分组8位流内存存储示意图;

图2是本发明中内存数据8位存储与16位存储的互相转换示意图;

图3是内存数据8位存储转换为16位存储的算法流程示意图;

图4是内存数据16位存储转换为8位存储的算法流程示意图;

图5是本发明中IP分组内存存储格式示意图;

图6是本发明中IP分组的接收处理流程示意图;

图7是本发明中IP分组的发送处理流程示意图;

图8是本发明中UDP数据报内存存储格式示意图;

图9是本发明中UDP数据报的接收处理流程示意图;

图10是本发明中UDP数据报的发送处理流程示意图;

图11是本发明中数字信号处理器16位校验和优化计算方法流程图。

具体实施方式

本发明包括内存数据8位存储与16位存储的互相转换、UDP/IP协议栈IP层实现方法和UDP/IP协议栈UDP层实现方法,下面分别进行描述。

内存数据8位存储与16位存储的互相转换

在现有技术中,网络协议栈链路层及以下层一般均针对8位存储单元,使用一个存储单元存储一个8位数据。因此,本发明的UDP/IP协议栈需要一个数据转换层,实现内存数据8位存储与16位存储的互相转换,如图2所示。

内存数据8位存储转换为16位存储的算法流程如图3所示,描述如下:

1)获取8位数据流的长度n,如果长度n为奇数,则长度n加1;

2)令i为0;

3)将8位数据流中第2×i+1个8位数据左移8位,与8位数据流中第2×i个8位数据相加,存入第i个16位存储单元中;

4)i增加2;

5)如果i小于n,则转入步骤3);否则转入6);

6)释放8位数据流原有内存空间中n/2之后的部分,剩余部分存储空间内即为转换好的16位数据。

内存数据16位存储转换为8位存储的算法流程如图4,描述如下:

1)获取16位数据流的长度n;

2)获取长度为2×n的存储空间M

3)令i为0;

4)将16位数据流中第i个16位数据存入存储空间M中第2×i个单元中,将存储空间M中第2×i个单元数据与0x00FF相与;

5)将16位数据流中第i个16位数据存入存储空间M中第2×i+1个单元中,将存储空间M中第2×i+1个单元数据右移8位;

6)i增加1;

7)如果i小于n,则转入步骤4);否则转入8);

8)释放原数据流存储空间,存储空间M即为转换好的8位数据流。

UDP/IP协议栈IP层实现方法

(一)定义数据结构。

经过转换层的转换,IP分组头部在内存中的16位存储格式如图5。本发明中,采用IP头结构体实现IP分组头部的匹配和处理。该结构体包含的成员依次如下:表征IP版本、IP分组首部长度和服务类型的16位数(本发明中16位数为一个字);表征IP分组长度的16位数;表征IP分组标识的16位数;表征IP标志和分片偏移的16位数;表征IP分组存活时间和负载协议类型的16位数;表征IP分组首部校验值的16位数;表征IP分组源IP地址的32位数;表征IP分组目的IP地址的32位数;表征IP选项的32位数数组。

(二)IP分组处理。

IP分组的接收处理流程参见图6,简要描述如下:

1)使用IP头结构体匹配IP分组;

2)获取IP分组IP协议版本,如果版本号不是4,则丢弃该分组,退出处理流程;

3)获取IP分组首部长度,采用针对数字信号处理器的优化算法计算并校验IP分组首部的16位校验值(优化算法的具体实现与数字信号处理器有关)。如果校验值错误,则丢弃该分组,退出处理流程;

4)获取IP分组的源IP地址和目的IP地址,如果目的地址不是我方的IP地址,则丢弃该分组,退出处理流程。这里需要注意的是,对于32位整数来说,如果数字信号处理器的存储方式是低16位在前、高16位在后,那么将IP地址存储为一个32位整数时,可以直接使用IP头结构中的IP地址赋值;否则需要进行转换,即首先将IP头结构中的IP地址中高16位,将其以16位数的形式赋值给32位数,而后将该32位数左移16位,在加上IP头结构中的IP地址中低16位,便得到了正确的IP地址信息。

5)获取并处理IP分组的IP首部选项;

6)获取IP分组总长度,计算出数据负载长度;

7)获取数据负载协议类型,根据不同的协议类型,将数据负载传送给不同的模块处理;

IP分组的发送处理流程参见图7,简要描述如下:

1)获取内存空间,在起始处构建一个IP头结构,填充IP首部以下信息:版本号(4)、服务类型、标识、生存时间;

2)根据负载数据协议类型填充IP头部协议信息;

3)将我方IP地址和负载数据的目的端IP地址填充到IP首部相应位置。这部分与IP分组接收处理类似,也需要根据数字信号处理器32位数的存储方式使用不同的处理。

4)根据需要填充IP头部选项;

5)计算IP首部长度,填入IP首部;

6)将负载数据拷贝至IP首部选项数据之后,计算IP分组总长度,填充入IP首部;

7)采用针对数字信号处理器的优化算法计算IP分组首部的16位校验值(优化算法的具体实现与数字信号处理器有关),将校验值填充入IP首部;

8)将数据发送给本发明中的数据转换层,转换为8位存储格式并发送至链路层模块处理。

上述步骤中,用数字信号处理器优化计算并校验IP分组首部的16位校验值的一种方法可参见图11,其具体步骤如下:

51)获取IP首部H的长度m;

52)初始化16位数组T,值均为0,大小为数字信号处理器的数学逻辑单元(Arithmetic Logic Unit,ALU)个数n;

53)另i为0;

54)另j为i*n;

55)T[0]增加D[j],T[1]增加D[j+1],...,T[n-1]增加D[j+n-1](在数字信号处理器中,各个ALU可以同时工作,如果有n个ALU的话,可以并行执行n个加法操作);

56)i增加1;

57)另j为i*n;

58)如果j小于m-n,转入步骤55);否则转入步骤59);

59)T[0]增加D[j];

60)j增加1;

61)如果j小于m,转入步骤59);否则转入步骤62);

62)对数组D求和,结果即为IP首部校验值;该结果发送时用于填充到IP首部的校验值;接收时用于检验IP首部校验值是否正确;

UDP/IP协议栈UDP层实现如下:

(一)定义数据结构。

由UDP/IP协议栈IP层传送来的UDP数据报头部,在内存中的16位存储格式如图8。本发明中,采用UDP头结构体实现UDP数据报头部的匹配和处理。该结构体包含的成员依次如下:表征源端口号的16位数(本发明中16位数为一个字);表征目的端口号的16位数;表征UDP数据报长度的16位数;表征UDP数据报首部校验值的16位数。

(二)UDP数据报处理。

UDP数据报的接收处理流程参见图9,简要描述如下:

1)使用UDP头结构体匹配UDP数据报

2)获取UDP数据报的长度;

3)采用针对数字信号处理器的优化算法计算并校验UDP数据报的16位校验值。如果校验值错误,则丢弃该分组,退出处理流程;

4)获取UDP数据报的源端口与目的端口,查询是否有上层模块处理该UDP数据报。如果有,则计算负载数据长度并将数据传送给相应的上层模块;否则丢弃该分组;

UDP数据报的发送处理流程参见图10,简要描述如下:

1)获取内存空间,在起始处构建一个UDP头结构,将负载数据拷贝到UDP头结构之后;

2)根据负载数据长度计算UDP数据报长度,并填充入UDP首部;

3)将源端口号和目的端口号填充入UDP首部;

4)采用针对数字信号处理器的优化算法计算UDP数据报的16位校验值,并填充入UDP数据报首部;

5)将UDP数据报传送给UDP/IP协议栈IP层处理。

上述步骤中,用数字信号处理器优化计算并校验UDP数据报的16位校验值的方法如下:

71)获取UDP数据报数据及伪IP首部D的长度m;

72)初始化16位数组T,值均为0,大小为数字信号处理器的数学逻辑单元(Arithmetic Logic Unit,ALU)个数n;

73)另i为0;

74)另j为i*n;

75)T[0]增加D[j],T[1]增加D[j+1],...,T[n-1]增加D[j+n-1](在数字信号处理器中,各个ALU可以同时工作,如果有n个ALU的话,可以并行执行n个加法操作);

76)i增加1;

77)另j为i*n;

78)如果j小于m-n,转入步骤75);否则转入步骤79);

79)T[0]增加D[j];

80)j增加1;

81)如果j小于m,转入步骤79);否则转入步骤82);

82)对数组T求和,结果即为UDP数据报校验值;该结果发送时用于填充到UDP数据报的校验值;接收时用于检验UDP数据报的校验值是否正确。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号