发明名称 一种嵌入式网络应用中UDP/IP协议栈实现方法
摘要 本发明涉及一种基于数字信号处理器的嵌入式网络应用中UDP/IP协议栈实现方法。本发明针对数字信号处理器的特点实现8位存储与16位存储相互转换,提供一个UDP/IP协议与链路层及以下层之间数据存储格式的转换层;以16位为操作和存储单位实现UDP/IP协议栈IP层及UDP层处理,并针对数字信号处理器优化了16位校验值的计算。在使用单个数字信号处理器作为处理器的嵌入式网络电子产品中,本发明相比普遍的8位UDP/IP协议栈,具有以下优点:1)节约约一半的数据内存使用空间,更加有效地利用了网络嵌入式应用的硬件资源;2)优化了IP首部校验值和UDP数据报校验值的计算,从而提高了协议栈的处理效率。
申请公布号 CN100553258C 申请公布日期 2009.10.21
申请号 CN200610056831.6 申请日期 2006.03.07
申请人 中国科学院声学研究所;北京中科智网科技有限公司 发明人 王劲林;张建东;邓峰;张武;齐向东;朱晓东;叶晓舟;武晓华;曾学文
分类号 H04L29/06(2006.01)I;H04L12/56(2006.01)I 主分类号 H04L29/06(2006.01)I
代理机构 北京泛华伟业知识产权代理有限公司 代理人 高存秀
主权项 1、一种嵌入式网络应用中UDP/IP协议栈实现方法,包括定义IP层数据结构、IP分组收发处理以及定义UDP层数据结构、UDP数据报收发处理;其特征在于,其中:所述定义IP层数据结构是定义一个IP头结构体,所述IP头结构体包含一组字长为16位的字,这组字分别是:一个表征IP协议版本、IP分组首部长度和服务类型的字;一个表征IP分组长度的字;一个表征IP分组标识的字;一个表征IP标志和分片偏移的字;一个表征IP分组存活时间和负载协议类型的字;一个表征IP分组首部校验值的字;表征IP分组源IP地址的两个字;表征IP分组目的IP地址的两个字;表征IP选项的两个字;所述定义UDP层数据结构是定义一个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位数据流。
地址 100080北京市海淀区北四环西路21号