μIP协议栈范文(精选7篇)
μIP协议栈 第1篇
在网络迅猛发展的今天,以太网以其优良的性能和灵活性迅速普及。通讯、消费电子等各式各样的嵌入式设备要接入以太网,都需要部分或是完整地实现TCP/IP协议,而目前嵌入式系统大部分使用经济型处理器,受内存和速度限制,不适合将TCP/IP协议直接移植到此类嵌入式系统。现介绍轻量级的协议栈——LwIP(Light weight Internet Protocol),详细介绍其在μC/OS上的移植过程。
移植基于广州致远电子股份有限公司的SMART ARM 2300开发平台,微控制器为NXP公司的LPC2378,该控制器基于32位的ARM7TDMI-S CPU,拥有512 KB片上Flash编程空间,32 KB的片上SRAM,AHB总线, VIC控制器,支持32个向量中断,带DMA的以太网MAC控制器,USB,UART,CAN等[1]。
网络接口结构图如图1所示。网络接口硬件由LPC2378,DM9161A(100BASE-TX和10BASE-T以太网物理层的单芯片、低功耗收发器)和HR601680组成,HR601680起到高压隔离和杂波抑制作用。
操作系统为μC/OS-II ,它是一个完整的、可移植、可固化、可裁剪的占先式实时多任务内核,本次使用的μC/OS版本为2.52。
1 LwIP协议栈分析
LwIP(Light weight Internet Protocol,轻量级TCP/IP协议栈)是瑞士计算机科学院的Adam Dunkels等开发的一套用于嵌入式系统的开放源码TCP/IP协议栈,其当初的设计目标就是减少协议栈的内存占用及代码规模,其核心代码行数只有两千五百多行,编译后目标代码只有13KB左右,运行时RAM占用不到4KB[2],因此非常适合运行在硬件资源十分有限的嵌入式系统中。
传统的TCP/IP进程模型有两种:一种是每个协议都是一个单独的进程,另外一种是所有的协议都驻留在操作系统内核里。前一种模型的优势是每个协议都可以随时参与到系统中,代码较容易理解;缺点是报文在层间的传递导致的进程切换开销很大。后一种是windows采用的方式,应用程序通过系统调用与协议栈通信,所以减少了进程切换的开销,但由于与内核密切关联,可移植性较差。
LwIP协议栈的进程模型如图2所示,LwIP将所有的协议都放在一个进程tcpip_thread中,使得协议与操作系统内核独立开来。应用程序可以嵌入到协议进程中,通过函数调用与LwIP通信。同时LwIP也提供了消息队列,当应用程序单独于协议栈时可通过mbox与协议栈通信。
LwIP使用包缓冲区pbufs存储和传递网络信息包。由于TCP包可能需要几百个字节,而ICMP数据仅有几个字节,为了能够很好地适应不同大小网络数据包对内存的需求,pbufs结构支持动态的内存分配。pbufs有三种类型:PBUF_POOL、PBUF_RAM、PBUF_ROM。
图3所示为一个PBUF_RAM链接一个PBUF_ROM。PBUF_RAM结构中的next指针指向链中的下一个pbuf,payload指针指向pbuf的数据区。Len指明pbuf中数据的长度,tot_len是以此pbuf为头的pbuf链中数据的总长。flags标识pbuf的类型,ref为引用计数。PBUF_ROM与PBUF_RAM类似,最大的不同是PBUF_ROM的数据存储在pbuf子系统不能管理的存储区。PBUF_POOL是从pbuf池中申请得到的,它的大小是固定的。数据包发送时用的是PBUF_ROM或是PBUF_RAM,接收需要动态申请存储空间,所以使用PBUF_POOL类型。
2 LwIP协议栈移植
LwIP协议的移植主要包含两部分:操作系统模拟层和网络接口层。
为了使得LwIP具有更好的可移植性,LwIP没有直接使用跟操作系统关联的函数调用和数据结构,而是通过操作系统模拟层来代替。
2.1 操作系统模拟层
操作系统模拟层的移植包含以下几个方面:跟操作系统相关的宏定义、同步与通信接口、定时器接口、任务创建接口的实现。
2.1.1 跟CPU及编译相关的宏定义
在LwIP源码中的srcarchincludearch 目录下,有cc.h、cpu.h 等文件,其中定义了一些与CPU 或编译器相关的宏,需要根据软硬件环境做相应的更改。
在cpu.h文件中定义 BYTE_ORDER宏,以指明处理器的字节序,ARM7 默认为小端存储系统,故定义BYTE_ORDER为LITTLE_ENDIAN。
另外需修改 cc.h 中的数据类型长度的定义,将u8_t定义为无符号字符型,s8_t定义为有符号字符型,u16_t定义为无符号短整型,s16_t定义为有符号短整型,u32_t为无符号整型,s32_t为有符号整型。
在C语言中结构体一般是4字节对齐的,而在LwIP中,是通过数据的长度从结构体中读取数据,这就需要定义“packed”关键字,使编译器主动放弃结构体对齐。
在LwIP中定义了PACK_STRUCT_FIELD(x)等宏,默认为空,移植时根据编译器定义不同的关键字[3]。经查阅ARM编译器手册,ADS编译器对应的关键字为“__packed”,故定义PACK_STRUCT_FIELD(x) 为__packed x,定义PACK_STRUCT_BEGIN为__packed。
2.1.2 同步与通信实现
LwIP的进程同步机制只提供了信号量,消息的传递则使用被称作“邮箱”的抽象方法。在μC/OS II中已经有信号量和消息队列的机制,对其封装一下就可以满足LwIP的要求。
1)信号量 (sys_sem_t)
μC/OS中信号量类型为OS_EVENT,使用类型定义typedef在sys_arch.h中定义sys_sem_t类型:
typedef OS_EVENT* sys_sem_t;
LwIP提供了信号量的操作的接口,包括创建、发送、等待以及释放信号量,内部的实现调用μC/OS提供的接口。需实现的信号量操作及具体实现函数如表1所示。
移植时对表1中实现函数列中的对应函数封装即可。
2)邮箱(sys_mbox_t)
首先需要定义邮箱的数据类型sys_mbox_t,其定义如下:
邮箱机制的实现与信号量类似,需要实现的函数如表2所示。
为方便调试,定义一个邮箱的链表__staLwIPMBoxs,并在LwIP初始化函数sys_init中使用OSQCreate建立MBOX_NUM个邮箱,将邮箱链表的首地址保存在pstCurFreeMBox中,保证初始化时邮箱已成功创建,sys_mbox_new实现时返回邮箱链中已经创建的邮箱即可,这样做目的是减少运行时错误。
另外在sys_mbox_free函数实现时,为防止邮箱不空导致的释放邮箱失败,需在释放前先调用OSQFlush清空邮箱。
2.1.3 定时接口实现
LwIP运行时的每个线程都有一个timeout链表,该链表的地址保存在sys_timeout结构体中。定时接口函数sys_arch_timeouts的作用是返回线程的sys_timeout。需要注意的是该接口函数在任何情况都不允许返回空值,在定义sys_timeout结构体数组时,数组的大小要比LwIP线程数多一个,以保证线程的优先级在LwIP线程优先级之外时能返回一个可用的sys_timeout结构体。操作流程如图4所示。
2.1.4 LwIP线程创建
在μC/OS-II 中,没有线程(thread)的概念,与之相对应的是任务(Task),并已经提供了创建新任务的系统 API 调用 OSTaskCreate(),移植时只需把OSTaskCreate封装一下,就可以实现 sys_thread_new的功能。在调用OSTaskCreate创建新任务时,需要指定任务的优先级。
为了便于管理,定义LwIP任务的起始优先级为LWIP_THREAD_START_PRIO,sys_thread_new创建任务时指定任务的LwIP内部优先级,任务最终的优先级为起始优先级与内部优先级的和。
2.2 网络接口层
网络接口层实现对网卡的驱动。嵌入式系统网络接口的实现的方式很多,芯片的选型千差万别,因此LwIP没有提供完整的网络接口驱动,而是提供了一个驱动的模板——ethernetif.c。网络接口层的移植主要是具体实现该文件中的相关函数。
在 LwIP 中可以有多个网络接口,每个网络接口都对应了一个“ struct netif ”结构体变量,这个 netif 包含了相应网络接口的属性、收发函数[4]。LwIP 通过调用 netif结构体 的方法input()及output()进行以太网 packet 的接收、发送等操作。网络接口驱动程序中需要实现网络接口的初始化、发送、接收以及中断响应。
ethernetif.c文件中包含ethernetif_init、ethernetif_input、ethernetif_output、low_level_input、low_level_output、low_level_init几个函数。移植时主要实现跟硬件密切相关的low_level_开头的3个函数。
ethernetif_init在建立网络接口时被调用,内部实现通过调用low_level_init完成实际对硬件的初始化设置。ethernetif_input在接收到网络数据包时被调用,其内部通过调用low_level_input函数实现网络接口的数据接收,并根据包的类型做相应的处理(如果是IP包则更新ARP表,去掉以太网帧头部,然后传递到网络层;如果是ARP包,就传递给etharp_arp_input函数)。当协议栈有IP包要发送时会调用ethernetif_output函数,其内部调用low_level_output函数实现包数据的传送。
low_level_init中需要把MAC地址填入netif→hwaddr[6]中,设置最大传输单元mtu的值,调用EMACInit完成网卡的初始化,然后创建ethernetif_input任务。
在EMACInit函数中将外设电源控制寄存器PCONP的以太网电源/时钟控制位PCENET置1,以使能以太网模块。设置MAC1寄存器的8~11、14、15位为1,复位MAC内部模块。设置Command寄存器3~5位为1,复位所有的数据通路和主机寄存器。将MAC1寄存器清零,设置最大帧寄存器MAXF、冲突窗口/重试寄存器CLRT等。设置Command寄存器的9位为1,选择RMII模式,第7位为1,禁用接收过滤功能。置MII管理配置寄存器MCFG的2~4位为110,设置主时钟20分频。向MII管理地址寄存器MAC_MADR写入0x0181,向MII管理数据寄存器MAC_MWTD写入0x9200,复位DM9161A。根据PHY的5号寄存器的值设置以太网模式寄存器SUPP(100 Mbps/10 Mbps)和工作模式(全双工/半双工),将MAC地址写入MAC地址寄存器SA0~SA2,初始化MAC描述符表,设置中断服务地址。至此MAC初始化完成。
low_level_output链路层发送函数把待发送的数据帧写入以太网的发送缓冲区,设置控制寄存器,增加TxProduceIndex寄存器值以传送网络数据包给网络硬件设备。
low_level_input函数从接受描述符状态字中获得包的长度,在pbuf pool中申请一个pbuf链,设置接收缓冲区的地址,并将接收到的数据复制到接收缓冲区。
3 实时性能改进
在网络通信中需要对较为重要的请求及时做出响应,比如TCP通信建立时的握手数据发送请求等。由于LwIP只有一个待发送的数据队列,数据的优先级按进入队列的先后顺序优先级依次降低,导致紧急的数据无法快速地发送出去,从而影响系统的实时性。因此,可采取增加一个或多个紧急队列,把数据按照优先级的高低依次放入各个队列,发送时只有在高优先级队列的数据发送完后才发送低优先级的数据。
假设系统当前有a条普通消息,b条紧急消息,如果只有一个发送队列,紧急消息的发送就会有很大的不确定性,而使用紧急队列则可以保证所有的紧急消息在(b-1)*(t1+t2)时间内发送。式中t1为消息发送时间,t2为增加队列导致的消息发送增加的时间。由于t2相对于t1很小,所以不会对消息发送造成影响。
等待队列的实现采用了指针数组的循环队列方式实现,数组中的指针指向等待发送的数据。
紧急队列的C语言描述如下:
MAXLENGTH定义为一个宏,指明紧急队列的长度,head和tail分别指向紧急队列的头和尾,对于数组而言,head和tail指定为数据下标,并在增加过程中始终对MAXLENGTH取余。当head等于tail 时,表示紧急队列空;当 head等于(tail+1)%MAXLENGTH表示队列已满。
发送时,系统需要先判断紧急队列是否为空,如果为空则发送等待队列数据,如果不空,则发送紧急队列数据直至队列为空。代码如下所示:
4 测试
在LwIP任务中初始化协议栈,配置网络接口。创建TCP的服务端任务,功能为将接收到的数据再返回给客户端,流程如图5所示。
设置开发板的IP地址为192.168.0.2,子网掩码为255.255.255.0,网关为192.168.0.1,编译整个工程。通过JTAG下载编译后的HEX文件,复位后,使用交叉网线连接开发板与PC机,设置PC机IP为192.168.0.1,子网掩码、网关与开发板的设置一致。在PC端命令行下输入ping 192.168.0.2,接收到返回包,证明ICMP协议正常。
PC机上运行TCP&UDPDebug软件,创建一个TCP客户端以连接开发板,在发送区写入数据,将在接收区看到发送的数据,证明TCP协议正常。用同样的方法验证UDP协议正常,证明协议栈移植成功。
5 结束语
LwIP为中低档次的嵌入式设备接入以太网提供了很好的解决方案,具有很高的推广价值。除了实时性能上的改进,LwIP的响应速度也有提高的空间,比如提高协议进程的优先级,优化TCP握手等。
参考文献
[1] NXP.LPC2377/78 Product data sheet.http://www.nxp.com.2011
[2] Dunkels A.Design and Implementation of the lwIP TCP/IP Stack.http://www.es.sdu.edu.cn/.2001
[3]黄飞飞.嵌入式实时操作系统μC/OS-II的研究与应用.南京航空航天大学学位论文,2008:55—56
μIP协议栈 第2篇
摘要:实现一个运行在16位数字信号处理器TMS320VC5402上的小型嵌入式TCP/IP协议栈。对TCP/IP协议中的IP协议、ARP协议、UDP协议进行分析,完成基于TCP/IP协议的嵌入式网络系统。
关键词:DSPTMS320VC5402TCP/IP协议栈嵌入式系统
引言
随着嵌入式系统应用范围的不断扩展及网络应用的日益普及,使得越来越多的嵌入式系统需要支持网络功能。TCP/IP是目前一种被广泛采用的网络协议。TCP/IP是一套把因特网上的各种系统互连起来的协议组,已成为事实上最常用的网络标准之一。本文对TCP/IP协议中的IP协议、ARP协议和UDP协议进行了分析,利用DSP的专用汇编语言实现了自己的通信协议。由此可使DSP直接对Ethernet发来的数据包解分析,并能按照TCP/IP协议正确打包和发送,最终实现DSP与PC机的数据通信,成功地完成了语音数据的采集和发送,实现了DSP与PC机的语音数据传输。
1TCP/IP协议分析
一般在嵌入式系统中实现的TCP/IP协议都是面向数据采集和传输的,所以大部分实现都是IP协议、ARP协议、UDP协议或者是TCP协议。本文完成的是IP协议、ARP协议和UDP协议。一般认为TCP/IP为四层协议,实现的协议栈结构如图1所示。
DSP程序自下而上实现以下协议:
①媒介访问控制MAC(MediaAccessControl),向以太网收发数据。传送的数据格式为Ethernet数据帧格式。Ethernet帧的长度是可变的,但都大于64字节,小于1518字节。它包括头部、数据和尾部三部分。8字节的前导用于帧同步,CRC域用于帧校验。目的地址和源端地址是指网卡的物理地址(MAC地址),具有唯一性。
②地址解析协议ARP(AddressResolutionProtocol),使得物理地址和IP地址可以对应起来。在Ethernet上,使用地址解析协议ARP协议来实现IP地址到MAC地址的动态转换。ARPRequest(ARP请求)和ARPResponse(ARP响应)类型都是0X0806.ARP报文格式包括硬件类型、协议类型、硬件地址长度、协议地址长度、操作字段、源端物理地址、源端IP地址、目的物理地址和目的IP地址。
③Internet网核心协议IP(InternetProtocol),实现IP网络上的数据传输的基础。IP协议提供了一种高效、不可靠和无连接的传输方式。IP报文是IP协议的基本处理单元,是由报头和数据两部分组成的。IP报头包括20字节的固定部分和变长的选项部分。20字节的固定部分包括IP协议的版本号、IP首部长度、服务类型、报文总长度、标识符、片偏移、报文生存时间、首部校验和以及源端IP地址和目的端IP地址。
④用户数据报协议UDP(UserDatagramProtocol),提供不可靠的数据传输功能。它不对要发送的数据进行缓冲,直接把从应用层收到的数据加上UDP首部发送出去。UDP不会把应用层多、次发送的数据合并成为一个包发送出去。这对于编写简单的请求/响应模式的应用是很方便的,而且利用UDP协议对传输速率也没有太大的影响。UDP协议的数据报格式包括源端口口、目的端口号、数据报长度、UDP校验和以及UDP数据。
⑤上层应用协议,对语音数据打包传输,实现DSP与PC机的语音数据传输。
2硬件接口电路
硬件接口电路如图2所示。
微处理器采用的是TI公司生产的TMS320VC5402数字信号处理器。它采用了改进的哈佛结构,操作速率达到了100MIPS.以太网控制芯片采用RTL8019AS,是台湾Realtek公司生产的一种高度集成的以太网控制器。它实现了以太网媒介访问层(MAC)和物理层(PHY)的全部功能。译码、电平变换及向功能由XC95144xl完成。它是Xilinx公司生产的低功耗CPLD器件。HR61001G是中山汉仁电子有限公司生产的10BASE-T接口器件,起低通滤波和隔离变压等作用。
3软件设计
3.1DSP上嵌入式TCP/IP协议的汇编程序设计
由于DSP的资源有限,所以网络协议根据嵌入式应用进行了裁减。本设计中完成了ARP、IP、UDP等部分协议,既能够保证DSP接入以太网,又使DSP资源能够满足嵌入式系统应用的要求。
首先介绍一下所设计的DSP接收和发送以太网数据包所使用的数据结构。作者选择了联合体结构作为DSP接收和发送以太网数据包的缓冲区。联合体允许大小和类型不同的定义临时存储在同一存储器空间。这样的好处是各层协议之间数据的传递,实质上是数据指针在传递,而不是数据拷贝传递。而且各层协议可以直接使用该缓冲区,因为缓冲区内的结构体完全
是按照各个协议的帧格式设计的。在联合体databuf中有四个结构体成员―ethernetpkt、ippkt、udppkt、arppkt,分别对应着以太网数据帧、IP协议、UDP协议、ARP协议的帧格式。这4个结构体成员是按照它们各自协议的帧格式进行定义的。值得注意的是,因为databuf中存储的`是RTL8019AS发送的以太网数据帧,联合体的成员共用databuf缓冲区,所以在各个结构体中要预留低层协议报头存储空间。例如,IP协议的结构体ippkt就要在结构体定义中留下ethernetpkt报头的存储空间,即ippkt定义中前9个整型空间不能使用,从第10个整型空间开始才是IP数据报的内容。
下面分4层介绍所完成的嵌入式TCP/IP协议。
①物理层:主要完成以太网控制器RTL8019AS的复位,寄存器的初始化,并设置RTL8019AS的工作方式、中断响应、DMA通道接收缓冲区的地址设置等。
初始化程序如下:
WRITE0x21,CR/*设置命令寄存器,选中第0页*/
WRITE0x4c,PSTART/*页起始地址寄存器初始化,设定接收缓冲区起始页地址*/
WRITE0x80,PSTOP/*页停止地址寄存器初始化,设定接收缓冲区终止页地址*/
WRITE0x4c,BNRY
/*页边界地址寄存器初始化,设定从接收缓冲区读取数据的位置,读指针*/
WRITE0x40,TPSR/*发送页地址寄存器初始化,设定发送缓冲区的起始页地址*/
WRITE0xcc,RCR
/*接收配置寄存器初始化,使用接收缓冲区,仅接收自己地址的数据包、广播地址数据包和多点播地址包,小于64字节的包丢弃,校验错的数据包不接收*/
WRITE0xe0,TCR
/*传输配置寄存器初始化,启用CRC自动生成和自动校验,工作在正常模式*/
WRITE0xc9,DCR
/*数据配置寄存器初始化,使用FIFO缓存,工作在正常模式,DMA传输数据16位宽*/
WRITE0x01,IMR/*中断屏蔽寄存器初始化,使能数据包正确接收中断*/
WRITE0xff,ISR/*复位中断状态寄存器*/
WRITE0x61,CR/*设置命令寄存器,选中第1页*/
WRITE0x4d,CURR
/*当前页地址寄存器初始化,指向当前正在写的页的下一页,写指针*/
其中WRITE为宏指令,其定义如下:
WRITE.macrodata,reg
STdata,*(net_reg)
PORTW*(net_reg),reg
RPT#(20-1)
NOP
.endm
②网络层:主要实现IP协议和ARP协议。当DSP接收到正确的以太网数据包以后,调用check_packet函数处理。如果是ARP请求,则发送一个ARP应答;如果是ARP应答,则把对方的IP地址和以太网地址放到ARP缓存中;如果是IP包,则调用IP处理模块处理,接收数据。
check_packe函数如下:
arp:CMPM*(databuf.ethernetpkt.protocol),#0x0608
;判断协议类型是否为ARP协议
BCip,NTC
CALLarp_process;调用ARP协议处理模块
ST#taskfree,*(task);设置空闲任务指针
Btaskfree;跳转到空闲任务
Ip:CMPM*(databuf.ethernet.protocol),#0x0008;判断协议类型是否为IP协议
CC
ip_process,TC;若为IP协议,调用IP协议处理模块
ST#taskfree,*(task);设置空闲任务指针
Btaskfree;跳转到空闲任务
arp_process:接收ARP请求后,封装好ARP数据报,调用send_packet函数完成发送。在本设计中,DSP工作复位时,ARP协议发送一个ARP请求,发送自己的IP地址和物理地址给PC机。
ip_process:接收IP数据报后,判断协议,协议如果为17,即是UDP协议,则调用函数udp_process,处理UDP数据报,否则丢弃该数据报。在本设计中,正确接收一帧数据报后,会给PC机一个应答信息,通知PC机已经正确接收了数据报,可以继续发送数据。应答信息的封装首先调用create_udp_packet完成对应答信息的UDP协议的封装,然后调用create_ip_packet函数,这个函数完成了把封装好的UDP数据报再封装成IP数据报。最后调用send_packet函数完成发送。
③传输层:如果IP数据报中的协议类型为17,则为UDP数据报,需要调用udp_process函数处理数据报。正确接收了数据后,给发送一个应答信息,上面已经提到了具体过程,这里不再复述了。这里介绍一下UDP协议的一个难点―UDP数据的和校验。UDP和校验要求加上UDP伪首部以后再进行校验,伪首部格式包括32位源IP地址、32位目的IP地址、8位数据0、8位协议和16位UDP数据长度。作者根据接收缓冲区的内存管理特点,即接收缓冲区的成员结构共用同一块数据存储区,所以将IP协议的帧头从生存时间开始到帧头结束封装成UDP伪首部。其实这样做,只需将8位生存时间改为全0,16位首部和改为UDP数据长度即可,8位的协议、32位源IP地址和32位的目的IP地址不用改动。作UDP和校验的时候,从IP协议帧头的报文生存时间开始到IP数据报的数据部分结束作带进位的相加,最后比较对和校验就可以了。
④应用层:由于传输的是语音数据,将采集的数据经过A律压缩放到DSP数据缓冲区databuf中,应用TCP/IIP协议将其发送给PC机。将PC机发送来的语音数据A律压缩通过DSP的多通道缓冲串行口发送给声卡。对于语音数据的处理,交给PC机完成,这里只实现数据的传输。
注:TCP/IP协议源码见网站。
3.2PC机上的应用程序设计
使用的VB编程,利用Winsock控件完成语音数据的接收。这方面有很多例子可以借鉴,所以就不作太多的介绍。
结语
μIP协议栈 第3篇
本课题研究是基于闪电定位系统的网络接口部分, 设计通信协议, 联成雷电遥测网络。该网络具有实时观测雷电活动, 显示方位, 然后自动记录、存储和整理分析雷电参数, 雷电参数可以在终端上任意的调用、查询和统计, 这样, 雷电探测仪的功能就能得到更充分的发挥。雷电监测定位系统在雷电的监测、研究以及防护等领域处于极其核心的位置。
2 软件设计
设计的关键是TCP/IP协议栈的嵌入, 能够使收发双方顺利解包通信。本软件运行于终端上, 实现与终端DSP的双向通信, 在通信中可以自行按照资料定制数据包的格式。
2.1 TCP/IP协议栈程序设计
本课题是基于嵌入式系统的TCP/IP设计, 所以必须对TCP/IP协议栈进行必要的简化。本设计保留四个主要的协议, 即ARP协议、IP协议、ICMP协议、TCP协议。
它实现的基本功能有以下几个方面:
(1) 实现数据的接受、发送, 同时对数据进行一定的处理。
(2) 实现网络基本传输协议。
(3) 实现网络远程控制, 基本分为以下几个模块:主控模块, 初始化模块, 协议模块, 网络传输接口模块。
在系统工作时, 程序先从main () 函数运行, 接着调用RTL8019AS初始化程序, 最后主程序进入一个无条件循环工作状态, 一直等待中断服务程序或和其它应用功能函数的运行。程序流程图如图2-1所示。
2.1.1定制ARP协议
ARP协议的处理过程, 主要分为ARP的初始化、相应ARP请求、ARP应答和ARP包处理。在实现网卡的驱动程序之后, ARP处理操作就是封装ARP包。
ARP请求函数实现ARP请求操作。ARP协议根据子网掩码判断IP地址是否在同一网段, 如果在同一子网段, ARP就请求其MAC地址, 否则请求默认网关的MAC地址。在发送ARP请求包时, 因为不知道对方物理地址, 在设置好本机的IP地址和物理地址以及目的IP地址后, 必须将目的物理地址设置为广播地址, 由收到该请求的主机来填充此字段。
ARP的应答函数, 除目的端硬件以外, 所有的其他字段都有填充值。在收到一份ARP请求包后, 应答函数就把硬件的地址填充进去, 然后把两个目的端地址分别替换掉两个发送端的地址, 并把相关操作字段置为2, 最后发送回去。
ARP的处理函数用来完成对接收ARP应答包的信息处理, 主要涉及到ARP开始合法ARP字段更新ARP表的学习和更新, 以及唤醒IP层的等待发送报文调度函数。
2.1.2 IP协议的实现
在发送IP报文的时候, IP发送程序要判断目的IP地址是否在本网段内, 这要涉及到子网掩码和网关的IP地址。根据本地IP地址和子网掩码来判断是不是本网段内主机。若为本网段内主机, 而且ARP缓存表中没有该地址的映射关系, 则在本网段内发送ARP请求, 请求该主机的物理地址与IP地址映射;若该主机不在本网段内, 就要把目的物理地址设置为网关的物理地址来发送IP报文, 相应的ARP请求也是发送给网关的ARP请求。系统中实现的IP模块主要包括以下功能:IP初始化、IP包处理、发送IP报文。
2.1.2 IP协议的实现
发送IP包时, 程序要判断目的IP地址和本地IP是否在同一网段内, 这要根据本地IP地址和子网掩码来判断。若目的IP为本网段内地址, 并且ARP缓存表中不存在该地址的映射关系, 则在本网段内发送一个ARP请求, 用于请求该主机的物理地址与IP地址映射关系。如果该主机不在本网段内, 就把目的物理地址设置成网关物理地址来发送IP包, 相应的ARP请求也发送给网关。该设计中涉及到的IP模块主要包括以下几个功能:IP初始化、IP处理、IP包发送。
2.1.3定义TCP协议
TCP是面向连接的协议, 传输TCP数据一般要经过三个阶段:建立连接、传输数据以及断开连接。由于该系统的设计是针对某个特定的应用进行的, 因而对TCP协议的算法进行适当的简化是很有必要的。
TCP状态机处理接收的TCP字段, 这由TCP报文处理函数来实现, 传输的数据放在TCP缓冲区中, 并且要置位相应的标志。
调用TCP状态机是在接收到报文时, 发送报文时要调用TCP状态机函数, 以此更新套接字的状态。通过定制系统的TCP/IP协议栈, 使系统更加模块化, 发送TCP报文时, TCP层把数据报文封装好, 并交给IP层, 报文的发送任务就由IP层处理。
3 测试结果
在对计算机IP地址进行设置后, 可以实现PC机与DSP终端的网络通信。在测试的过程中, 可以通过ping命令, 来实现和查看网络连接情况。然后用SpyNet从主机抓包, 先由终端向PC端发送数据, 然后再接收终传来的信息。由图可以看出控制软件的发送信息和接收信息的协议类型。本次测试借助程序抓包的情况下进行的, 验证了终端对于网络数据的接收和发送功能。基本实现了设计的要求和功能。
由图可知, 本机发送了“您好, 这是测试信息”, 在收终端到信息后, 把数据原包发送回来。并在软件上显示出来。由以上测试表明, 终端与PC机不仅成功连接, 而且发送数据成功, 说明终端网络模块, 网络驱动以及TCP/IP协议都能正常工作。
4 结论
本文研究了DSPs嵌入TCP/IP协议栈, 完成了硬件平台的搭建, 轻量级TCP/IP协议栈的嵌入。在实现TCP/IP协议时, 考虑到DSP的自身存储容量、运行速度和总线宽度, 所以对一些协议内部复杂的细节处理要去掉, 采用精简的协议进行通讯。DSP利用精简的TCP/IP可以实现基于以太网的数据传输, 为进一步实现雷电探测的远程测控、远程诊断和远程软件升级提供了很好的平台。此外, 可以在DSP中嵌入实时操作系统, 嵌入不同的网络组件, 这些为气象雷电定位的实现具有十分重要的意义。
参考文献
[1]张昊伟, 舒跃强, 李德军.闪电定位技术评述[J].气象水文海洋仪器, 2010 (03) .
μIP协议栈 第4篇
关键词:TCP/IP,网络协议,防御,安全协议
在短期内,基础TCP/IP网络协议不可能进行重新设计和部署实施,无法从根本上改变目前网络面临严重安全威胁的状况。通过部署一些监测、预防与安全加固的防范措施,是增强网络对已知攻击的抵御能力不可或缺的环节。
1 网络各层防范措施
在网络接口层,主要监测和防御的安全威胁的方法是网络嗅探,可以利用防范网络嗅探的思路,检测出局域网中的监听点,并在网络设计上尽量细分和优化网络结构,尽量消除数据广播的情况,并对关键路径上的网关、路由器等设备进行严格的安全防护,以减少网络嗅探造成的影响。此外,对于无线网络而言,应增强链路层加密的强度,同时对各类网络采用加密通信协议,使得在通信过程中,即使遭受嗅探也不会破坏数据要达到的机密性要求。
在互联层上,虽然IP、ICMP、ARP等协议中存在安全缺陷,安全问题带来的风险很难完全避免,但我们可以采用多种检测和过滤技术来发现和阻断网络中可能出现的欺骗攻击,此外也可以增强防火墙、路由器和网关设备的安全策略,对一些用于欺骗攻击的特殊数据包进行过滤,特别是对外部网络进行欺骗攻击的数据包进行出站过滤,只有如此,才能共同维护整个互联网的安全。对关键服务器使用静态绑定IP-MAC映射表、使用IP sec协议加密通信等预防机制,可以有效地增强网络对欺骗攻击的抵御能力。
在传输层,可以实现基于面向连接和无连接服务的加密传输和安全控制机制,包括身份认证,访问控制等。
应用层可以采用加密、用户级身份认证、数字签名技术、授权和访问控制技术,以及主机安全技术,如审计、入侵检测等。
2 网络各层安全协议
为了克服TCP/IP协议栈的安全缺陷和问题,互联网研究机构也在不断地研究和开发一些网络安全协议,IETF、IEEE 802等国际性的网络研究和标准化组织在不断地进行讨论和改进,并作为标准化协议规范对业界进行发布,使得业界能够在这些标准在网络设备、操作系统中实现和应用这些安全协议,从而增强现有网络的安全性。在TCP/IP协议栈各个层次上运用的网络安全协议如下表1所示。
2.1 网络接口层的安全协议
网络接口层的安全协议设计和标准化主要由IEEE802委员会负责推进,由于无线网络传输媒介的共享特性,因此比有线网络更加需要安全保护机制,目前常用的802.11Wi Fi、蓝牙(Bluetooth)等无线网络均实现了用于身份认证、加密传输和防止假冒篡改攻击的安全协议,如WEP(Wired Equivalent Privacy)和WPA/WPA2(Wi-Fi Protected Access)协议等。此外IEEE802委员会还制定了802.1X协议,提供了基于端口访问控制的接入管理协议标准,为各种不同类型网络中的用户认证和访问控制给出了通用的解决方案。
2.2 网络互联层的安全协议
网络互联层目前最重要的安全通信协议主要是IP sec协议簇。IP sec(Internet Protocol Security),即互联网安全协议,是IETF(Internet Engineering Task Force)提供的一系列的互联网安全通信的标准规范,这些是私有信息通过公用网的安全保障。IP sec适用于目前的IP版本IPv4和下一代IPv6。IP sec规范相当复杂,规范中包含大量的标准文档。由于IP sec在TCP/IP协议的核心层——IP层实现,因此可以有效地保护各种上层协议,并为各种安全服务提供一个统一的平台,IP sec也是被下一代互联网所采用的网络安全协议。IP sec协议是现在VPN开发中使用最广泛的一种协议,有可能在将来成为IPVPN的标准。
IP sec协议簇的基本目的是把密码学的安全机制引入IP协议,通过使用现代密码学方法支持机密性和认证服务,使用户能有选择地使用,并得到所期望的安全服务。IP sec将几种安全技术结合形成一个完整的安全体系,包括安全协议部分和密钥协商部分。IP sec的安全协议主要包括AH协议(Authentication Header,认证头)和ESP协议(Encapsulate Security Payload,封装安全载荷)两大部分:AH认证协议提供五连接的完整性、数据源认证和抗重放保护服务,但是AH不提供任何机密性保护服务;而ESP协议则为IP协议提供机密性、数据源验证、抗重放,以及数据完整性等安全服务。其中,数据机密性是ESP的基本功能,而带有数据源身份认证、数据完整性检验以及抗重放保护等功能。此外IP sec中还包含了密钥协商和交换协议,如Internet密钥交换协议(Internet Key Exchange,IKE),负责处理通信双方的协议及算法的协商,产生并交换加密和认证密钥,以建立起AH和ESP协议需要的通信双方安全关联(Security Association,SA)。
IP sec协议支持隧道及传输两种模式。隧道模式用于主机与路由器或两部路由器之间,保护整个IP数据包。通常情况下,只要IP sec双方有一方是安全网关或路由器,就必须使用隧道模式。传输模式用于两台主机之间,保护传输层协议头,实现端到端的安全。它所保护的数据包的通信终点也是IPsec终点。传输模式下,IP sec主要对上层协议即IP包的载荷进行封装保护,通常情况下,传输模式只用于两台主机之间的安全通信。
由于工作在互联层上,IP sec协议能够为IP协议之上的任何网络应用提供安全保护机制,而网络应用无需任何的特殊设计和实现,就可以使用IP sec.
2.3 传输层的安全协议
传输层上的安全协议主要是TLS(Transport Layer Security),其前身是由Netscape公司所开发的SSL(Secure Socket Layer),目前最新版本是IETF发布的TLS l.2标准化网络安全协议(RFC 5246)。TLS协议在传输层上通过密码学算法,为应用层的网络通信提供了安全的点到点传输,在Web浏览、电子邮件、即时通信和Vo IP(Voice over IP)等网络应用服务中得到了广泛使用。
TLS协议基于密码学算法支持在互联网上的身份认证和通信机密性保护,能够防止窃听、干扰和消息伪造。TLS协议包括两个协议组:TLS记录协议和TLS握手协议。TLS记录协议位于可靠的传输协议TCP之上,用于封装各种高层协议,提供的安全性具有两个基本特性。
(1)加密:使用对称加密算法(如DES、RC4等)进行数据加密,以保证传输数据的机密性,对称加密所产生的密钥对每个连接都是唯一的,对称密钥由TLS握手协议进行协商,记录协议也可以不使用加密。
(2)可靠:信息传输使用密钥进行消息完整性检查,通常使用安全哈希函数(如SHA、MD5等)来计算消息完整性校验和(Message Authentication Code,MAC)。
TLS握手协议允许服务器与客户机在应用程序协议传输和接收其第一个数据字节前,进行单向身份认证,或者彼此之间相互认证,并协商加密算法和加密密钥。
TLS协议已被用于封装整个网络栈以创建虚拟专有网络(Virtual Private Network,VPN),如开源的Open VPN软件,一些厂商也将TLS的加密和认证机制与访问授权相结合,研制出功能更强的SSLVPN产品,与传统的IP sec VPN技术相比,TLS在防火墙和网络地址转换(Network Address Translation,NAT)设备穿越方面具有内在的优势,使其在存在大量远程访问用户的环境中具有更好的易管理性。
2.4 应用层的安全协议
在应用层,安全通信协议的特点是需要针对不同的应用安全需求,设计不同的安全机制,例如HTTP安全、电子邮件、远程控制、电子交易等,在安全协议设计过程中也会尽量地使用底层协议已经提供的安全防护能力。
对于万维网访问进行安全防护的主要协议是安全超文本传输协议(Secure Hypertext Transfer Protocol,HTTPS),基于传输层安全协议TLS实现,端口号为443,通常应用于电子商务、资产管理等应用,随着近年来的发展,HTTPS在Web上逐步流行,在涉及个人敏感信息的登录及使用环节,安全的网站一般都会使用HTTPS协议进行加密传输和身份认证。
安全电子邮件协议(Secure/Multipurpose Internet Mail Extensions,S/MIME),由RSA公司提出,是电子邮件的安全传输标准。S/MIME使用PKI数字签名技术,支持消息和附件的加密传输,采用单向散列算法,如SHA—1、MD5等,也采用公钥机制的加密体系,证书格式采用X.509标准。目前大多数电子邮件产品都包含了对S/MIME的内部支持,网络管理员应启用该安全协议,从而避免了电子邮件明文传输所面临的信息泄露等安全风险。
3 结束语
TCP/IP协议是互联网得以蓬勃发展的基础,然而TCP/IP协议在开始设计时并没有考虑到现在网络上如此多的安全威胁,因此不可避免地遭遇了各种形形色色的攻击方式。本文介绍了网络各层上的防范措施和安全协议,包括它们的技术原理和具体过程。应对网络协议的攻击威胁,TCP/IP协议也正在进行着完善和改进,对于防御者而言,应采用最新的安全协议来武装自己的网络,从而降低网络安全风险。
参考文献
[1]胡银萍.浅谈常见的网络攻击及其防范技术措施[J].电脑知识与技术,2011(22).
μIP协议栈 第5篇
随着嵌入式设备与网络的日益结合,在单片机系统中引入TCP/IP协议栈,以支持单片机接入网络,成为嵌入式领域的一个重要方向。在此对基于SST89E516RD单片机的TCP/IP协议栈的实现方法给予讨论。选用SST89E516RD单片机实现了在线仿真和编程的功能,大大节约了开发成本。采用VB 6.0语言与Window 98/2000/XP等为软件开发平台,对系统进行了测试。经过几个月的软硬件测试表明:系统设计合理、稳定可靠,已基本实现了最初的设计目标。对其他类似系统移植该项技术奠定了基础,有很好的参考价值。
1 系统硬件实现
整个系统以SST89E516RD单片机为核心,通过RTL8019AS以太网控制芯片实现远程通信。串口完成网卡参数的修改、在线仿真。在系统中还使用X5045作为外部扩展的E2PROM,用来存储IP地址、物理地址以及网卡的其他配置信息,同时X5045还具有电压监控、看门狗定时器、上电复位三种功能,使用X5045监控系统的运行过程,当系统不稳定时可以进行有效地复位。图1为系统硬件结构图。
2 系统软件实现
系统软件主要包括客户端和服务器端软件的设计,主要有以下几部分内容:
(1) RTL8019AS的初始化和驱动程序的设计;
(2) 数据帧的发送和接收子程序;
(3) TCP/IP协议栈程序的设计;
(4) 客户端和服务器端程序的设计;
(5) X5045看门狗和E2PROM程序的设计。
系统的主程序流程图如图2所示。
由图2可知,系统首先完成对单片机定时器、串口、网卡芯片和以太网等部分的初始化,然后进入以太网处理部分的主程序,通过定时器中断进行网口数据的超时出错处理,并完成TCP定时器保活和ARP表生存时间的更新。
2.1 系统初始化
所谓初始化和驱动程序是指实模式下一组硬件芯片的驱动子程序,它们屏蔽了底层硬件处理细节,同时向上层软件提供与硬件无关的接口。主要包括定时器初始化,初始化PING表、ARP表,初始化TCP,RTL8019AS的初始化等。RTL8019AS的初始化主要包括网卡的复位和网卡寄存器的初始化。RTL8019AS的初始化主要包括网卡的复位和网卡寄存器的初始化。RTL8019AS内部寄存器有4页,与NE2000兼容的有3页,第4页不用。页选择由CR寄存器的PS1,PS0位确定。在零页寄存器中可以设置接收、发送状态配置以及发送缓存区的起始页与接收缓存区起止页地址等;在1页寄存器中可以设置以太网接口的MAC地址和组播地址。对网卡的初始化就是对相关寄存器初始化,这些寄存器包括CR,RCR,TCR,PSTART,PSTOP,BNRY,TPSR,ISR,DCR,IMR,CURR,PAG0~PAG5,MAR0~MAR5等。初始化过程如下:
(1) CR=0x21,选择页零的寄存器同时使芯片处于停止模式,不会发送和接收数据包;
(2) RCR=0xE0,设置接收结构寄存器,monitor方式,所有数据包都被拒绝;
(3) TCR=0xE2,设置发送配置寄存器,工作在内部lookback模式;
(4) PSTART=0x4C,接收缓冲区开始页面地址;
(5) PSTOP=0x80,接收缓冲区中止页面地址;
(6) BNRY=0x4C,接收缓冲区最后页面指针;
(7) TPSR=0x40,发送页的起始页地址,初始化为指向第一个发送缓冲区的页即0x40;
(8) ISR=0xFF,清除所有中断标志;
(9) DCR=0xC8,设置数据配置寄存器,使用FIFO缓存,普通模式,8位数据DMA;
(10) IMR=0x00,设置中断屏蔽寄存器,屏蔽所有中断;
(11) CR=0x61,选择页一的寄存器;
(12) CURR=0x4D,网卡写内存的指针,指向当前正在写的页的下一页,初始化时指和0x4C+1=0x4D;
(13) 设置多址寄存器MAR0~MAR5,均设置为0x00;
(14) CR=0x22,使网卡芯片开始工作;
(15) 设置网卡地址寄存器PAR0~PAR5;
(16) CR=0x21,选择页零的寄存器;
(17) RCR=0xCC,设置接收结构寄存器,设置为使用接收缓冲区,跟外部网络连接;
(18) TCR=0xE0,设置发送配置寄存器,启用CRC自动生成和自动校验,工作在正常模式;
(19) CR=0x22,使网卡芯片开始工作;
(20) ISR=0xFF,清除所有中断标志;
2.2 TCP/IP协议栈的移植
以太网帧的发送与接收属于协议层中的最底层。发送前的协议封装和接收时的协议分解都非常简单。封装时,只需在上层封装数据前面添加14 B的以太网首部就可以了;接收到数据帧之后,根据头信息中的帧类型字段判断是否属于IP包或ARP包,若是就继续相应的协议分解,否则将被丢弃,不予处理。帧的接收工作由网卡自动完成,只需对相关的寄存器如PSTART,PSTOP,CURR和BNRY进行适当的初始化即可。以太网帧的发送过程如下:
(1) 初始化命令寄存器CR,启动RTL8019AS;
(2) 设置数据配置寄存器DCR,以字节方式通信;
(3) 设置发送配置寄存器TCR,选择RTL8019AS数据发送的工作方式;
(4) 设置远程开始地址寄存器RSAR0(低位),RSAR1(高位),指明远程DMA操作时所传送数据的起始地址;
(5) 设置远程字节计数寄存器RBCR0(低位),RBCR1(高位),指明远程DMA操作时所传送的数据的字节数;
(6) 设置命令寄存器CR,开始远程DMA写操作。RTL8019AS自动将数据I/O端口的数据写入其缓冲区中;
(7) 开始向数据I/O端口传送需要发送的数据;
(8) 数据传送完毕后,设置发送页起始地址寄存器TBCR,指明待发送数据的起始地址;
(9) 设置发送字节计数寄存器TBCR0(低位),TBCR1(高位),指明待发送数据的字节数;
(10) 设置命令寄存器CR,启动本地DMA操作,把缓冲区中的数据发送到网络上;
(11) 结束。
需要指出的是,数据在发送前必须先由上到下进行层层封装才能正确地发送出去,同时,接收到的数据包还必须自下而上层层解包才能为用户所识别,即协议分解。在协议编程实现中,数据封装与协议分解互为逆过程。这就是说,必须在数据采集子系统中实现嵌入式TCP/IP协议才能完成数据的TCP/IP处理。
2.3 客户端和服务器端程序的设计
分别设计客户端和服务器端程序,适应于不同的工作场合。在面向连接的TCP协议中,服务器和客户机开始通信之前必须首先建立连接。在连接之前,服务器程序必须正在运行并处于监听模式,等待客户端的连接。TCP的连接是通过3次握手协议来完成的。首先,客户端发送1个SYN标志位的TCP段给服务器,其带有所选择段的初始序号。服务器端收到该报文段后,以1个带有SYN标志的段作为应答,其中也给出根据本身情况选择的初始序号,并包含对客户端的确认。而客户端收到服务器端的应答后,再次送回1个报文段,其中带有对服务器端SYN的确认。这样双方的连接就建立了,以后就能开始传送数据。同样终止1条TCP连接实际上也需3次握手过程。
3 应用系统实现
为了验证系统的可行性,应用VB开发了接口程序,构建了软硬件测试平台,用来设置网卡的配置参数并实现数据的发送与接收。所有配置参数包括(本地IP地址、服务器端IP地址、端口号、网卡物理地址、ping的IP地址、串口号等)都能通过串口动态地更改。系统能实现Ping的功能,以方便检查以太网的状态。
3.1 参数设置界面
用串口线将测试板(数据采集和控制系统模块,下同)与计算机连接起来,选择好串口号,然后按“连接单片机”按钮,连接状态工具栏里出现“已经连接”,说明测试板与计算机已经连接上,然后就可以修改配置参数了。在参数设置栏中填写正确的参数值后,按“设定”按钮,接收状态栏中会提示参数设置成功,然后按测试板上的复位键,网卡的参数配置
就被写到了X5045中。参数设置界面如图3所示。
3.2 数据收发测试界面
分别测试客户端和服务器端软件通信是否正常。
(1) 服务器端程序的测试
打开客户端测试界面,如图4所示,设置连接IP地址为192.168.0.44(该地址必须与服务器端的IP地址一致),设置连接端口号为3330(该端口号必须与服务器端端口号一致)。将作为服务器端的程序烧入到测试板的微处理器中,通过图3修改配置界面,将服务器端需要的参数写入X5045,参数配置包括:“单片机IP地址”(指的是测试板自身的IP地址)为192.168.0.44,“服务器端IP地址”可以不用设置(因为测试板本身就即服务器端);如果是新网卡芯片,还需要设置MAC地址,这里设为121314151617(一般选择任意的12位数即可);“服务器端口号”设为3330(必须与客户端一致);网关设为192.168.0.1(要与上位机保持在同一个网段内)。设置好所有参数后,可以进行数据的收发了。
(2) 客户端程序的测试
打开服务器端测试界面,如图5所示。
设置连接IP地址为192.168.0.44(该地址指的是上位机自身的IP,必须与客户端设置的“服务器端IP地址”一致),设置连接端口号为3330(该端口号须与客户端设置的“服务器端口号”一致)。将作为客户端的程序烧入到系统的微处理器中,参数配置:“服务器IP地址”(指的是上位机的IP地址)为192.168.0.44,“单片机IP地址”可以不用设置(因为系统仅作为客户端),“服务器端口号”设为3330(必须与客户端一致),网关设为192.168.0.1(要与上位机保持在同一个网段内)。设置好所有参数之后,即可进行数据收发。服务器端的数据可以被发送到串口,同样,数据也可以从串口发送到服务器端。测试表明:上位机通过以太网与系统之间的通信正常。
4 结 语
在此实现了TCP/IP协议栈在单片机上的移植,完成了系统的硬件电路和相关嵌入式软件的设计,应用VB开发了上位机修改参数界面,通过串口完成对网卡等参数的配置和修改,解决了数据包的超时重发、定时保活、参数配置、硬件看门狗复位等一系列问题。实验表明,整套程序比较稳定,收发数据正常,TCP超时重传效果很好。经过近1个月的测试,没有出现任何丢包和堵塞的现象。
μIP协议栈 第6篇
互联网技术普遍应用于各个领域,诸如通信、电子商务等。嵌入式系统作为各个重要领域的专用计算机系统,这也使得其在电子领域的到迅猛的发展,用于通信、信息采集、控制、监控和跟踪等。然而在过去对这两个重要的研究领域的研究由于一些不可避免的因素的限制是相互独立的,嵌入式系统与外界的通信方式主要依靠RS-232、CAN等,通信的质量、距离与速度等受到很严重的限制,如今得益于电子行业的快速发展,大量电子系统已经接入互联网,于是“嵌入式+互联网”这一新兴的领域成为了现当代电子爱好者的新宠。
基于嵌入式互联网技术的终端设备已经应用于移动网络、信息数据采集、远程控制设备等,这些设备能够实现这些功能,究其根本在于在嵌入式终端上实现了TCP/IP网络通信,使数据可以成为在Internet上传输的数据包。在早期,由于微处理器的处理速度以及存储运算能力的限制难以承载复杂而且庞大的TCP/IP协议栈,而且传统的TCP/IP协议栈占用大量的系统资源,大量的资源被用在保证数据传输可靠性和数据流的控制上,这与对实时性要求比较高的嵌入式系统来说是不相符合的,这就需要对传统的TCP/IP协议栈进行简单有效的精简,移除TCP/IP的任何不必要机制。
嵌入式网络终端的网络架构必须能够在一些紧密的束缚下运行,并执行任务。完整的TCP/IP架构对处理能力和内存需求较大,这一只是被认为是重量级的。在21世纪初,专门为嵌入式网络终端IP协议族而设计了轻量级TCP/IP协议栈u IP。u IP不移除TCP/IP协议栈的任何必要机制,且能够适合有系统资源局限的嵌入式网络设备,从u IP的第一次发布以来,u IP协议栈已经广泛地运用在了网络化嵌入式系统和智能物件系统。
二、国内外研究现状
随着研究者对TCP/IP协议栈的研究,产生了多种网络协议栈架构。各种结构之前的区别主要在于嵌入式设备与Internet网络之间如何实现对接和在不同的嵌入式系统中搭载怎样的TCP/IP协议栈。主要方式如下:
1)专用的硬件芯片完成嵌入式系统与网络之间的协议转换;
2)代理协议完成嵌入式系统与网络之间的协议转换;
3)采用支持Internet的嵌入式操作系统;
4)直接在嵌入式电子系统上移植TCP/IP协议栈;
上面的四种方案,对嵌入式系统与Internet网络的连接逐渐摆脱了对硬件的直接依靠,突破硬件的束缚,进而转向更先进实时的操作系统的运作或者直接裸机移植TCP/IP协议栈,走向更开放和灵活的开发设计方式。而在此次的课题研究中将采用基于第四种方案的嵌入式网络技术,采用更加精简的TCP/IP协议,这样可以大幅度减少系统资源的消耗,从而能够在低成本小内存的电子系统上运行本应在计算机系统上运行的TCP/IP协议栈。
随着我国科技的高速发展,我国已经自主研制出了多种数据采集与控制系统,并通过与计算机或者专用的嵌入式系统相结合而成为独立的检测分析系统这使得以太网技术的运用越来越成为热点。
东北大学CNCI研究所,成功地完成了嵌入式TCP/IP协议栈研究以及开发工作,其研究的嵌入式TCP/IP协议栈得大小只有2.5KB左右,并且它被应用到嵌入式设备和网络通信平台的实验来构建嵌入式设备和互联网,而这种技术已成功申请国家专利。目前,嵌入式网络技术也已在各个领域的应用,在各个高校也已经逐渐嵌入式以太网技术为学生选课或必修课。在嵌入式网络协议栈研究东北大学是最早的单位也将领域的领先者,第一个协议主要用于8位处理器。
相比于国内对以太网协议栈的研究,国外拥有更显著的成果,较著名的TCP/IP协议栈有以下几种:
1)BCD协议栈:该协议栈是Vx Works内嵌的TCP/IP协议栈,此协议栈功能较为完整,但代码量比较大。
2)u C/IP协议栈:该协议栈是基于事实操作系统u C/OS的内嵌协议栈。开源免费并且可以剪裁,功能较为强大。
3)AVE-TCP协议栈:该协议栈是最早支持IPv6的协议栈之一,特点为支持双协议栈,可以构建IPv4和IPv6两种环境,但是此协议栈不是开源的。
4)Lw IP协议栈:该协议栈是由瑞典计算机科学研究院(SICS,Swedish Institute of Computer Science)Adam Dunkels等人开发的,此协议栈可以在操作系统下运行同时也可以无操作系统裸机运行。其特点为,功能比较完全,支持拥塞控制等功能并且完全开源可剪裁。
5)u IP协议栈:该协议栈同样是由瑞典计算机科学研究院(SICS,Swedish Institute of Computer Science)Adam Dunkels等人开发的。此协议栈是目前最为精简的协议栈,代码量很少可以充分利用有限的系统资源,占用的RAM也很少只实现了传统TCPIP协议栈的一些必要机制,同时协议栈的结构也很简单,采用C语言完成。
三、总结
事实上计算机的通信标准就是依照TCP/IP协议栈,在传统的计算机系统中实现网络通信的TCP/IP协议栈是按照国际标准化组织开放系统互联参考模型(ISO/OSI)的7层参考模型以太网标准自定义了数据链路层和物理层[1]。TCP/IP协议栈中的ARP、IP、ICMP、TCP、UDP等相关协议的实现完成了计算机的网络互连,不但实现了数据的快速有效的传输,而且保证保证了数据传输的准确性。但是嵌入式系统是一个体积小、功耗低、成本低和资源有限的实时系统,处理器的运算速度和存储空间有相当大的局限性,根本不可能搭载庞大且复杂的传统TCP/IP协议栈,因此需要对传统的TCP/IP协议栈进行必要的精简优化,尽可能减少代码量缩减占用的内存空间,使其能够在嵌入式设备上运行并执行任务。并且在电子行业和互联网技术广泛运用的今天,开发一个精简、实时、灵活的嵌入式网络协议栈是非常必要的。
摘要:基于嵌入式互联网技术的终端设备已经得到了广泛应用,如移动网络、信息数据采集、远程控制设备等。实现的技术基础在于在嵌入式系统上实现了TCP/IP网络通信,使数据可以成为在Internet上传输的数据包。本文对基于嵌入式系统的以太网TCP/IP协议栈进行归纳总结,为后续研究人员提供参考。
关键词:以太网,TCP/IP协议栈,无线传感器节点,uIP
参考文献
[1]邢永峰,杨吉松.嵌入式Internet技术与应用[M].北京:化学工业出版社,2013-8.
[2]汪三请.基于STM32的嵌入式网络协议UIP的移植与分析[D].武汉:武汉理工大学,2011.
[3](美)瓦舒尔,(瑞典)丹克尔.基于IP的物联网架构、技术与应用[M].北京:人民邮电出版社,2011-8.
[4]杨唯克.基于STM32和WALN数据传输设计与实现[D].大连:大连海事大学,2014.
[5]曹玉.轨道轮重检测的信号采集传输系统设计与研究[D].湖南:中南大学,2014.
μIP协议栈 第7篇
油田测井技术中,利用网络进行远程控制是一个新的发展方向。但是,测井实时性与网络传输之间传输速度的协调处理是需要解决的重点技术之一。现在流行的windows系统在处理实时性上不如DOS(Disk Operation System)系统稳定,但是DOS系统本身又缺少网络功能。所以,在S G X 3型数控系统中采用了DOS系统,利用嵌入式Internet技术解决底层硬件实时性问题,实现远程控制的数控测井解决方案。在此方案中,为了使实施底层硬件控制的D O S系统具有网络传输功能,需要设计T C P/I P(Transmission Control Protocol/Internet Protocol)协议栈。
TCP/IP的发展与英特网的发展密切相关。目前网上使用的主要协议大都是基于T C P/I P协议栈的。另一方面,嵌入式Internet是随着嵌入式系统的广泛应用和计算机网络技术的发展而发展起来的一项新兴概念和技术。实现嵌入式设备的Internet网络化,需要实现TCP/IP网络协议。通常的解决方法有:第一是用专用的服务器实现,第二是通过专用的嵌入式网关连接,第三是把标准网络技术TCP/IP一直扩展到嵌入设备,由嵌入式系统自身实现服务器功能,是解决问题的最佳方案。本文采用了第三种解决方法,从最简单的操作系统DOS入手,使用灵活的C语言,从最底层逐步设计,建立一个最基本的TCP/IP协议栈,实现DOS系统下的网络功能。
2 TCP/IP协议栈整体设计
2.1 系统软硬件环境
基于网络的SGX3数控测井系统中采用了DOS操作系统下的嵌入式PC104做下位机,上位机用Windows2000/XP操作系统,两者通过以太网进行大数据量传输的技术。为了增强网络的控制和数据传输速度与数量,需要深入地对网络部分进行了解和设计,才能对网络进行更有效的控制。实现嵌入式Internet技术的关键,在于如何利用现有资源实现TCP/IP等协议处理,而在DOS下实现TCP/IP协议是最直接和清晰的,有利于对TCP/IP协议形成较深刻的认识,深入理解嵌入式Internet的关键技术,为在Linux下更为深入地开发嵌入式PC下的TCP/IP网络应用打基础。
2.2 运行系统整体软件结构
DOS下实现TCP/IP协议栈的一种思路是[2]:利用ODI(Open Data-Link Interface)接口与下层的NIC(Network Interface Card)进行数据交换,ODI接口又与上层的Packet Driver接口层进行标准转换,Packet Driver与上层的TCP/IP协议栈进行数据通讯。TCP/IP协议栈实现ARP,IP,ICMP,UDP,TCP等基本协议,应用层协议利用socket接口与TCP/UDP进行数据通信。
这个最基本的TCP/IP协议栈工作在以太网上,与底层以太网卡交换数据是通过Packet Driver接口进行的。这个接口多个应用程序共享一个数据链路层的网络接口。它提供了对一个特定数据包类型的初始化访问、结束访问,发送一个数据包,获取网络接口的统计数据和接口的信息。DOS下TCP/IP协议栈运行的整体框图如下图1:
本TCP/IP协议栈中实现ARP,IP,ICMP,UDP,TCP等协议和SOCKET主要的接口函数。具体的协议栈结构如图2。
3 ARP的设计与实现
3.1 ARP简介
在互联网络上,主机和网络设备都是通过逻辑地址来标识,在TCP/IP协议簇中逻辑地址也就是IP地址[1]。在互联网上各主机(不包括像路由器这样的网络连接设备)的公共IP地址是唯一的。数据分组通过物理网络在主机和网络设备之间传递。在物理级上,主机和网络设备都有各自的物理地址来标识。物理地址也是本地地址,由硬件实现,它的有效范围只是在本地网络,所以它在本地范围内必须是唯一的。在以太网中物理地址是48位的MAC地址。
ARP的作用是将一个IP地址与其对应的物理地址对应起来[1]。当发送站需要接收站的物理地址时,会去内存中的ARP表中找对应的物理地址,如果找到就将其放到发送帧的目的地址处。如果没有找到,就广播一个ARP查询分组。网络上的每一个主机或网络设备都会接收到这个分组,但只有查询分组中指定的接收站会作出反映,发送一个ARP响应分组给发送站,于是发送站得到了接收站的物理地址。如图3所示:
3.2 ARP协议相关数据结构
根据RFC826标准,定义与ARP相关的主要数据结构如下:
ARP数据帧的头部结构arp_Header:
其中hwType表示硬件类型,protAddrLen表示协议类型,hw Prot Addr Len表示硬件地址长度和协议长度,opcode表示操作,srcIPAddr表示发送方硬件地址,src IPAddr表示发送方IP地址,dst Eth Addr表示目标硬件地址,dstIPAddr表示目标IP地址。在以太网的环境下,硬件地址长度为6八位组,IP地址长度为4八位组。
为了记录ARP协议解析到的IP地址与相应的硬件地址对应关系,设计使用ARP表用。使用ARP与IP对应的ARP表,记录下解析的MAC地址,以减少在一定时间(如:300m)内对同一IP地址的多次重复解析,从而加快TCP/IP协议栈的运行。设计结构arp_tables如下:
其中,IP表示一个主机或网络设备的IP地址,hardware表示IP对应的硬件地址,flags标识本记录的有效性,expiry表示记录有效的时限。
当接收到ARP数据包时,如果源MAC地址是主机地址,就将源MAC与IP地址对保存到ARP表中,即使本机不是目的地址。为了减少ARP表的长度,和处理数据包的时间,同时又尽量保留与本机交互比较频繁的MAC/IP地址对,本文在处理接收ARP数据包时,只将目的IP是本机的数据包中的源地址对保存到ARP表中。对于嵌入式Internet设备来说,它们的通信对象相对是变化不大的,这样在减小了ARP表的同时也加快了查询ARP表的时间,提高了效率。
3.3 ARP协议模块设计
ARP整体模块图如图4:
3.3.1 主控制模块:arp_resolve(IPAddress)
输入参数:要解析的IP地址
返回值:IPAddress对应的MAC地址
说明:此模块解析IPAddress的MAC地址。
本模块根据输入的IP地址,首先检查ARP表是否有有效的地址对记录与要解析的IP地址相对应。如果有,就可以直接取出硬件地址,然后返回硬件地址。如果没有,就要进行ARP操作。对于与本机处于同一子网的IP地址,可以直接发出ARP请求报文,然后等待接收ARP应答报文。如果ARP应答报文正确,就可以得到要解析IP对应的硬件地址。如果不在同一子网,就要根据网关表找到目的子网对应的网关IP,然后解析网关IP(网关的IP已经在网络参数配置文件中设置)。本文中,TCP/IP协议设计用于主机,所以,可以直接将发送到其他网络的网关指定为本机所在网络的网关,以简化处理,加快处理。
3.3.2 输出处理模块:arp_request()
说明:发送一个ARP请求报文
本模块用来发送准备好的ARP报文,其最终是调用了Packet Driver中发送数据的函数。
3.3.3 输入处理模块:arp_handler()
输入参数:接收到的ARP数据报的首部
说明:本模块处理ARP数据报,如果输入的是一个ARP请求,则作出响应。如果是ARP响应则对ARP表作出相应的修改。
通常的处理是将收到的所有A R P的源M A C地址保存到ARP表中。为了减小ARP表的大小,尽可能保存有用的ARP记录,提高ARP表查询的效率,本ARP表中只记录与本机通信相关的主机的ARP,其他的主机不记录。即:只记录由本机发出请求的主机和向本机发出请求的主机。
3.3.4 ARP表处理模块:arp_search()
输入参数:要寻找的IP地址
返回:如果找到,返回IP对应的ARP表的记录;如果没有找到就返回NULL。
说明:本模块的作用是在ARP表找到IP对应的记录。
4 结束语
嵌入式TCP/IP协议栈应用于嵌入式设备,实现嵌入式设备的网络化是一个发展方向。本文设计的TCP/IP协议栈适用于主机而不是网络设备(如:路由器,三次交换机等)。对本文的TCP/IP协议栈的检测是利用运行在PC机上的windos2000系统进行的。其中对ARP的验证是对比利用windows系统获取的MAC地址与利用本协议栈获取的是否一致,这一步是进行上层协议设计的基础。结果是两者对局域网内同一个IP地址获取的MAC地址是一致的。
参考文献
[1]IAN MCLEAN.Windows2000 TCP/IP技术内幕[M].北京:机械工业出版社,2001.10
[2]姜淑菊,张书云,TCP/IP协议的通信程序设计[J],计算机应用,1997,(2):26-28
【μIP协议栈】相关文章:
双协议栈技术06-30
互联网协议ip07-01
互联网协议ip范文06-13
第4章互联网协议ip12-07
基于仿真技术的多平台TCP/IP协议分析实验课程的设计与应用03-04
合作协议(三方协议)07-07
借款协议补充协议08-25
三方协议补充协议07-29
信息服务协议协议08-07