关键词:
μIP协议栈(精选五篇)
μIP协议栈 篇1
关键词:移植,LwIP,μC/OS-Ⅲ
随着嵌入式系统功能的多样化及网络在各个领域中的广泛应用,具有网络功能的嵌入式终端拥有更高的使用价值和更强的通用性。μC/OS-Ⅲ是一个可裁剪、可固化、可剥夺型的实时内核,管理任务的数目不受限制[1]。作为μC/OS系列的最新版本,μC/OS-Ⅲ提供了实时内核所能提供的所有服务,可保证网络功能和其他诸多任务并发有序地执行。但μC/OS-Ⅲ仅仅是一个实时操作系统的内核,要实现网络功能还需移植一款符合嵌入式系统要求的以太网协议栈。Lw IP是由瑞典计算机科学研究院开发的轻量型TCP/IP协议栈,其特点是保持了以太网的基本功能,通过优化减少了对片内存储资源的占用[2]。一般情况下,具有十几KB SRAM和几十KB Flash存储能力的微控制器即可运行Lw IP协议栈[3]。该特点使其广泛使用于数据采集、工业控制等多个应用领域中。本文论述了使用LM3S9B95微控制器的嵌入式平台实现Lw IP 1.4.0版本在μC/OS-Ⅲ上的移植。LM3S9B95是T公司推出的基于ARM Cortex-M3内核的微控制器,其内部具有以太网控制器模块[4]。
1 Lw IP的移植过程
Lw IP的移植主要涉及两个方面:操作系统模拟层和硬件驱动层。Lw IP在设计时已考虑到在不同操作系统中的可移植性,其内部使用的函数和数据结构均为抽象定义[5]。开发者可根据不同的操作系统要求来具体实现相关的函数和数据结构。同时,硬件相关的驱动同样预留了接口,开发者可针对实际使用情况编写网络控制芯片驱动函数。另外,对不同的编译环境,开发者还需要编写部分头文件定义相关数据结构和宏。Lw IP在μC/OS-Ⅲ嵌入式系统中的结构如图1所示,其中的箭头框为移植工作需要实现的模块。
1.1 操作系统模拟层的编写
1.1.1 编写头文件cc.h
cc.h文件中包含处理器相关的变量类型、数据结构及字节对齐的相关宏。
Lw IP中使用的基本变量类型均以位数进行命名,为抽象的变量定义,开发者需要根据所用处理器具体定义。基本变量的定义有两种方法:一种是将变量直接定义为C语言的基本类型,如unsigned char、int等;另一种是将变量定义为操作系统内对应的抽象变量。当使用操作系统时,应采用第二种方法。该方法的优点是变量对于处理器是“透明”的,应用程序更换硬件平台时无需修改操作系统模拟层内的定义。μC/OS-Ⅲ中对基本变量的定义在cpu.h文件中,均以CPU为命名前缀。对于这些变量在μC/OS-Ⅲ中具体如何定义本文不做讨论。Lw IP要求定义8 bit、16 bit、32 bit和内存指针型变量:
由于ARM处理器的编译环境默认对变量存储采取4 B对齐方式,而以太网数据包等结构体要求处理器按照变量的实际大小存储和访问,因此,需要定义相关的结构封装宏,使得结构体内的成员变量不以4 B对齐的方式进行存储。移植工作采用了IAR开发环境,需根据该环境定义如下相关的宏:
1.1.2 编写头文件sys_arch.h
sys_arch.h文件要求定义操作系统相关的数据结构和宏。
Lw IP多线程功能需要信号量和邮箱等结构体,用于多个任务的同步和消息的传递。μC/OS-Ⅲ中的信号量OS_SEM和消息队列OS_Q可实现相应的功能。Lw IP1.4.0版本中使用了互斥信号量管理共享的资源,而有些嵌入式操作系统中不包含互斥信号量的变量类型。为了适应不同的操作系统,Lw IP定义了宏LWIP_COM-PAT_MUTEX。LWIP_COMPAT_MUTEX的值定义为1,则Lw IP使用二值信号量代替互斥信号量以及相关的功能函数。虽然μC/OS-Ⅲ包含了互斥信号量OS_MUTEX,但Lw IP中两种数据结构可相互替换,选择使用二值信号量可以减少一定的移植工作。
Lw IP中包含有必须完整执行而不可被打断的代码,因此需要使用临界段代码保护的功能。μC/OS-Ⅲ中提供了关闭中断和锁定调度器两种临界段代码保护方法。Lw IP中的临界段代码保护宏可直接定义为μC/OS-Ⅲ关闭中断的对应临界段代码保护宏。
1.1.3 编写源文件sys_arch.c
sys_arch.c文件要求实现操作系统模拟层的接口函数,主要包括对信号量和邮箱等数据结构的操作以及Lw IP线程的操作。
Lw IP的信号量用于进程间的通信,相关操作主要包括以下几个函数:
sys_sem_new() //新建信号量
sys_sem_free() //释放信号量
sys_sem_signal() //发送信号量
sys_arch_sem_wait() //阻塞进程,等待指定信号量
sys_sem_valid() //检查信号量可用性
sys_sem_set_invalid() //设置信号量不可用
Lw IP的邮箱用于缓存和传递数据报文,相关操作主要包括以下几个函数:
sys_mbox_new() //新建邮箱
sys_mbox_free() //删除邮箱
sys_mbox_post() //阻塞进程,投递消息至邮箱
sys_mbox_trypost() //投递消息至邮箱,仅一次操作
sys_arch_mbox_fetch() //阻塞进程,从邮箱中提取消息
sys_arch_mbox_tryfetch() //从邮箱中提取消息,仅一次操作
sys_mbox_valid() //检查邮箱可用性
sys_mbox_set_invalid() //设置邮箱不可用
Lw IP使用了μC/OS-Ⅲ中的信号量OS_SEM和消息队列OS_Q结构,以上函数的实现调用了μC/OS-Ⅲ的操作函数,包括OS?Create()、OS?Del()、OS?Post()和OS?Pend()。在实现sys_?_new()和sys_?_free()函数时,需加入临界段代码保护以确保OS?Create()和OS?Del()在执行时不被打断,可避免出现系统资源管理错误。
Lw IP 1.4.0版本新添加了sys_?_valid()和sys_?_set_invalid(),这两个函数的实现无需调用操作系统内部的函数,可由开发者根据实际需求实现。另外,二值信号量替换了互斥信号量,相关的操作函数也无需在此文件内实现。在Lw IP内核中的sys.h文件给出了详细的宏定义:
Lw IP建立新进程的接口函数sys_thread_new()要求成功建立一个任务并返回任务优先级。μC/OS-Ⅲ中加入了时间片轮转调度功能,使得同一优先级可建立多个任务,避免了优先级重复导致任务建立失败的情况。相比于使用μC/OS-Ⅱ或其他不支持同级任务的操作系统,sys_thread_new()的实现仅调用OSTask Create()即可,省略了一些查找可用优先级的容错操作。
操作系统模拟层的初始化函数sys_init()由开发者根据实际情况进行编写,没有固定的规范要求。该函数可不执行任何操作,但必须在文件内实现。
1.2 硬件驱动层的编写
Lw IP内核文件中给出了驱动文件的参考模板ethernetif.c,开发者可根据其模板的架构结合实际使用的网络控制芯片来编写驱动。
以low_level为前缀的函数均为网络控制芯片相关的接口函数,主要包含初始化、接收、发送等操作。LM3S9B95的以太网控制器模块包含了MAC层和物理层,有别于传统的MCU+PHY芯片的结构。因此,实现驱动函数时可直接对相应的寄存器进行操作,无需再次封装PHY芯片的操作函数。
以ethernetif为前缀的函数要求开发者实现底层硬件与上层协议间的接口函数,包括底层设备描述结构体的相关操作、Lw IP主线程和以太网中断服务函数等。
1.3 Lw IP功能裁剪和定制
Lw IP为开发者提供了一个功能定制的接口文件lwipopt.h,可根据系统实际需求定义宏的值、裁剪功能和配置参数。例如使用TCP和UDP功能,则需添加下列定义:
内核文件opt.h是lwipopt.h的设计模板,包含了所有Lw IP功能配置的宏。opt.h文件对宏定义均采用了#ifndef预编译判断,当开发者在lwipopt.h中没有对某个宏给出定义时,该文件会定义一个默认值。
虽然修改opt.h中的宏定义和在lwipopt.h中编写宏定义均可实现剪裁和定制Lw IP的功能,但由于修改内核文件会破坏协议栈的封装性,为今后的应用程序移植和维护造成隐患,所以开发者不应直接修改opt.h内的宏定义。
开发者在编写lwipopt.h时,由于每个宏的默认值并不能保证Lw IP的正确运行,所以应对opt.h中给出的所有宏进行定义。例如opt.h中对于TCP的一些宏定义如下:
Lw IP默认的TCPIP进程堆栈空间为0,TCPIP使用的邮箱空间为0。若开发者在lwipopt.h中不对这些宏进行定义,当tcpip_init()对Lw IP进行初始化时,就会出现错误致使Lw IP无法正确运行。
2 测试
测试工作使用LM3S9B95嵌入式平台作为TCP客户端,一台PC作为TCP主机端。测试程序中,嵌入式平台的IP地址设为172.21.28.250,主机IP为172.21.28.253,端口为1020。测试程序中创建了两个任务:一个是Lw IP主线程,一个是测试任务。Lw IP主线程处理以太网协议的数据包,测试任务负责接收主机端的数据并回传至主机端。
测试任务首先初始化底层硬件和协议栈,包括使能LM3S9B95以太网硬件模块和中断、调用协议栈内核初始化函数tcpip_init()、初始化网络接口的结构体。
第二步是初始化客户端。首先创建一个网络连接结构体,再将其绑定至端口并连接到指定的服务器。
任务的主循环中调用了Lw IP具有进程阻塞功能的函数netconn_recv()以接收来自主机的数据。若数据接收正确,则将数据发送回主机端的PC;若接收不正确,则删除当前的连接,重新连接到主机。
PC主机端使用了铭心软体工作室的网络调试助手,通过该软件向LM3S9B95客户端发送测试数据,客户端的回传数据也在该软件内显示。测试结果如图2所示。
Lw IP是一款专为嵌入式系统设计的以太网协议栈,具有占用资源小、基本功能完备和便于移植等特点。其拥有很高的通用性,适用于多种嵌入式操作系统和硬件平台[6]。在运行实时操作系统的应用环境中,移植工作要求开发者实现操作系统模拟层和硬件驱动层两个部分。协议栈的主进程可作为实时操作系统的一个任务,完整地执行网络通信功能。μC/OS-Ⅲ是μC/OS系列的最新产品,同样是一款实时操作系统的内核,并不具备网络通信功能。Lw IP移植到μC/OS-Ⅲ中,可使得运行该实时内核的嵌入式终端拥有网络通信功能,符合当今产品发展的趋势,具有更广泛的应用领域和更高的市场价值。
参考文献
[1]LABROSSE J J著.嵌入式实时操作系统μC/OS-Ⅲ[M].邵贝贝,译.北京:北京航空航天大学出版社,2012.
[2]DUNKELS A.Design and implementation of the LwIP TCP/IP Stack[Z].Sweden:Swedish Institute of Computer Science,2001:21-30.
[3]熊海泉.μC/OS II下LwIP协议的移植实现[J].科技广场,2005(2):78-79.
[4]Texas Instruments.Stellaris誖LM3S9B95 microcontroller datasheet[Z].2011.
[5]程明,余中华,苏艳苹,等.μC/OS II下LwIP协议栈的移植和测试[J].微计算机信息,2008(23):79-81.
μIP协议栈 篇2
(1)从应用层上来看,攻击者每次攻击时,与8300端口都有建立最多两、三百个tcp连接,
(2)从防火墙监控来看,攻击的流量非常微小,以至于防火墙的流量报警都未触发。
(3)每次攻击产生时,原先的玩家的tcp连接并未断开(应用程序未抛出TCP连接断开的异常),但服务端的再也接收不到来自客户端的任何消息。服务端进程的CPU飙到100%,而内存使用未发现异常。
(4)而且服务端也从未接收到来自攻击者的tcp连接的任何消息。
(5)我们对tcp半连接进行了监控,排除了基于tcp的半连接攻击。
(6)重启服务端程序后,一切恢复正常。
我们的动作以及思考:
(1)最开始,我们以为是服务端程序出现问题,导致CPU 100%,后来通过详细检查程序代码,并使用文本日志定时记录程序每个线程的状态(每5秒钟一次),排除了这一可能性。也就是说,在攻击的过程中,服务端内的各个线程的运行都是正常的。(后来,我们进一步确认了这一点 -- 我们在游戏服务器前加了一个简单的tcp代理服务器,游戏服务器不再对外暴露,所有客户端都与代理服务器连接,由代理服务器在游戏服务器和客户端之间转发所有的数据,结果代理服务器被攻击,代理服务器的代理程序进程的cpu达到100%(也是重启代理程序即恢复正常),而游戏服务器进程一直正常),
(2)排除程序的问题后,我们开始怀疑攻击者攻击的是TCP/IP协议栈(也许是根据TCP/IP的一些漏洞进行攻击),而导致操作系统在处理底层的TCP/IP数据报时,陷入忙碌的状态,而导致CPU 100%,而当底层陷入忙碌的时候,来自客户端的正常消息就来不及接收或者来不及提交到应用层(即我们的服务端程序)了。
我们还未确定,攻击的方式究竟是什么?以前我们碰到的大多是流量攻击,而针对这种低带宽的攻击或TCP/IP漏洞攻击,没有任何经验。不知哪位大侠碰到过类似的情况,能够指点一二,感激不尽了,呵呵
附:我在网上找到了一些可能与我们的攻击有关系的TCP/IP攻击相关的资料,与大家共享一下:
(1)TCP协议堵塞窗口算法攻击技术 :sec.chinabyte.com/207/8816207.shtml
(2)TCP RST攻击 :baike.baidu.com/view/1044719.htm
(3)低速率拒绝服务攻击原理 :blog.chinaunix.com/u/12592/showart_2058363.html
(4)TCP漏洞可导致致命DoS攻击 :sec.chinabyte.com/279/8339279.shtml
(5)泪滴攻击 :baike.soso.com/v4492311.htm
TCP/IP协议栈的实现方法 篇3
TCP/IP协议, 即传输控制协议/互联网互联协议、网络通信协议, 其主要组成部分是位于传输层的TCP协议和位于网络层的IP协议。TCP/IP协议的体系结构主要有4个层次, 各个层次通过下层的网络来实现自己的需求, 从而将设备连接到互联网中, 并保证数据在TCP/IP通信协议中的传输。
TCP/IP的体系结构包括4层, 即网络接口层、网际层、传输层、应用层。每个层次的需求都有下层所提供的网络来实现, 各个层次相互配合, 来完成整个协议的任务。网络接口层包括多种协议, 各个协议由硬件和软件相配合, 以实现网络之间的数据传输。网际层只有一个协议, 即IP协议, IP协议主要是为不同网络的主机之间提供无连接的网络服务。传输层的协议包括两个, 即TCP协议和UDP协议, TCP协议提供面向连接的可靠的字节流传输, UDP协议提供无连接的不可靠的数据包传输。应用层包括多种应用协议, 如HTTP协议、FTP协议、DNS协议、Telnet协议等。TCP/IP协议中各个层次都是互相独立的, 上层通过与下层的接口来为下层提供服务, 而下层网络的实现过程对于上层是保密的, 以此网络通信的实现是逐层完成的。
2 TCP/IP 协议栈的特点
首先, TCP/IP通信协议对特定网络传输硬件没有依赖性, 用户可以根据自己的需要使用网络中的传输硬件, 如以太网、令牌环网等。
其次, TCP/IP通信协议对特定的计算机硬件、操作系统等也没有依赖性, 同时可以提供开放的协议标准, 因此TCP/IP通信协议可以在多个系统中实现其功能。
最后, 在全世界范围内, 每一个TCP/IP网络有唯一的网络地址, 有了该网络地址, 无论物理用户在哪儿, 都可以对其进行访问。
3 TCP/IP 协议栈的简化
一般来说, TCP/IP协议栈对计算机的内存、处理器等都有很高的要求, 另一方面, 嵌入式系统的资源的限制, 使得嵌入式系统达不到TCP/IP通信协议对系统资源的要求, 因此, 为了使TCP/IP协议与嵌入式系统结合的更贴切, 有必要对TCP/IP协议栈进行监护, 从而减少嵌入式系统的存储开销。
3.1 TCP 协议
在应用TCP协议进行数据传输的过程中, 主要是采用以字节为单位的滑动窗口来实现。为了简化TCP协议, 可以将滑动窗口算法进行优化。在此提出一种停止等待算法, 该算法产生的数据量少, 不对对网络的拥塞产生不利影响, 因此, 该算法可以减少网络中的数据量, 提高网络数据的传输速度。另一方面来说, 停止等待算法的效率与滑动窗口算法的效率相当, 不会降低网络的效率, 反而可以轻松的实现。停止等待算法不设TCP的发送缓存区和接收缓存取, 使得占用网络的存储空间大大降低, 从而可以实现TCP/IP协议栈的简化。
3.2 IP 协议
通过IP协议可以实现不同网络主机间的通信。IP数据报具有固定的格式, 从而确定了IP协议所具有的功能。为了实现数据报传输的效率, 使IP数据报能够正确的找到下一跳的地址, 需要在IP数据报前加上IP协议头。在嵌入式系统中, IP只是一个传输工具, 因此, 对IP进行简化不会影响嵌入式系统的工作效率。在嵌入式系统中, 对于IP数据报, 只对其IP数据报的版本、首部检验和、标志、源地址、目的地址进行确认, 从而对协议类型进行解析, 并将IP数据报传输到下一个层次进行处理。如果不能正确的对协议类型进行解析, 都要丢弃相应的IP数据报。IP数据报的总长度 (首部加数据之和) 为16位, 即数据报的最大程度为216-1=65535字节, 在嵌入式系统中, 受到资源的限制, 没有空间容纳如此长度的数据报, 并且不支持分段传输, 因此, 要对嵌入式系统中接收数据报的方式进行限制, 从而使程序更加简单, 且不会破坏数据报的完整性。
3.3 ARP 协议
ARP为地址解析协议, 主要是根据主机的IP地址来找到对于的物理地址。在嵌入式系统中, 服务器以被动的方式来接受请求, 因此不会主动的发送ARP请求数据帧, 因此, 为了简化ARP协议, 可以只对ARP的应答数据帧进行管理。在将ARP数据帧发送到网络以前, 需要填充数据帧, 使得数据帧达到网络要求的最小长度, 同时将请求数据帧的源IP地址和物理地址添加到应答数据帧的目的IP地址和物理地址里, 从而实现数据帧传输过程中的可靠传输。同时, 高速缓冲区中的IP地址和物理地址在不断的进行更新, 从而减少数据帧传输过程中的错误率, 提高效率。然而在嵌入式系统中, IP地址和物理地址之间的映射关系很少, 且不会经常更新, 因此, 可以对ARP协议进行简化, 以提高数据的传输效率。
4 TCP/IP 协议的实现
4.1 TCP 协议
TCP协议实现数据传输的过程包括建立连接、数据传输、释放连接。一般客户端是发起连接的, 而服务器端是被动接受连接的, 即客户端请求建立连接, 而服务器端答应建立连接的请求, 从而建立双方的连接, 并可以进行下一步的数据传输。如果在TCP的上层实现服务器端的功能, 就可以将通信双方建立连接的过程进行简化, 从而实现TCP/IP通信协议的简化。当释放连接时, 包括主动断开和被动断开, 当主动断开连接时, 需要发送一个fin数据报得到通信双方的确认, 从而断开连接, 而被动断开连接的方式就比较简单。
4.2 IP 协议
IP协议主要是对数据报的首部进行检验, 同时对数据报进行解析, 从而得到下一跳的网络地址, 进行数据的传输。在对IP协议进行简化后, IP只需要对数据报进行判断, 如果正确则根据数据报的类型进行下一步的传输, 否则将数据报丢弃。
4.3 ARP 协议
在网络中进行通信需要针对硬件的物理地址, 因此有必要对硬件的物理地址进行解析, 即完成将硬件的IP地址到物理地址之间的转换。ARP协议中, 网络上有主见与物理地址之间的映射表, 根据映射表可以很快的根据硬件的IP地址找到对应的物理地址, 为TCP/IP通信提供保障。
5 结语
TCP/IP协议对于嵌入式系统互联的实现具有深远的影响, 对TCP/IP协议进行简化, 让TCP/IP协议更好的适应嵌入式系统的特点, 使TCP/IP协议的作用发挥到最大, 对嵌入式系统的发展有很大的促进作用。经过简化后的TCP/IP协议, 能够较好的适应嵌入式系统, 利用较少的代码就可以实现相应的功能, 实现简单、结构合理、操作方便, 同时能够根据需要进行功能的扩充和系统的移植, 具有良好的性能。因此, 将TCP/IP协议引入到嵌入式系统中具有良好的可行性。
摘要:TCP/IP协议是实现网络通信最基本的协议, 对网络数据的可靠性传输有很大的影响。随着网络技术的发展, 将嵌入式系统中引入TCP/IP协议具有明显的现实意义。然而受到嵌入式系统资源的限制, 需要将TCP/IP协议进行简化, 从而实现嵌入式系统中TCP/IP协议的有效利用。本文对TCP/IP协议状况进行概述, 并对TCP/IP协议的特点和TCP/IP协议的简化进行分析, 最后提出TCP/IP协议的实现方法, 旨在简化操作, 提高嵌入式系统的运行效率。
关键词:TCP/IP协议,嵌入式系统,TCP,IP
参考文献
[1]王原丽, 王丽.基于ARM的嵌入式TCP/IP协议栈的实现[J].现代电子技术, 2008, 22:3-6.
μIP协议栈 篇4
关键词:Linux内核,TCP/IP,源代码,教学
1 学习Linux内核中TCP/IP协议栈源代码的先修课程
学生学习Linux内核中TCP/IP协议栈源代码之前,必须修完下述课程:
TCP/IP协议。该课程主要从整体上讲述了TCP/IP协议族的工作原理和电信标准。
C程序设计。在Linux内核TCP/IP协议栈中,绝大部分的源代码都是用标准C语言写的(除了极少数是用汇编语言写的)。TCP/IP协议栈源代码包含了非常多的函数,它们之间的调用关系也极其复杂,而且很多函数都很长。
操作系统。在Linux操作系统中,TCP/IP协议栈本身就是操作系统的一个有机组成部分,TCP/IP协议栈与操作系统的其他部分联系紧密。
微机原理。在TCP/IP协议的最底层是网络接口层,这个层的源代码与具体的网络接口硬件有着千丝万缕的联系,这就涉及到微机原理课程里的很多知识。
TCP/IP socket网络编程。这部分不作为必需课程,但是学生若对socket编程有一个初步的了解或者有一定的编程经验,那么学习TCP/IP协议栈源代码可能会更容易一些。
2 学习TCP/IP协议栈源代码对学生能力的培养
TCP/IP协议栈源代码是一项庞大而复杂的体系,绝非一门课程所能讲授,而且既不可能,也没有必要。我们只需要选择TCP/IP协议栈中一些典型的部分进行学习和探讨,学生可以挑选自己感兴趣的部分。
2.1 理解TCP/IP协议的实现机制
在TCP/IP协议课程中,学生重点学习了TCP/IP协议族中最重要的概念和标准,了解了TCP/IP协议族的基本工作原理,知道怎样去利用TCP/IP协议进行通信和网络互联。但是TCP/IP协议很抽象,学生很难真正理解掌握,即便理解了,也会产生“TCP/IP协议族是如何实现的?TCP/IP协议族为什么要这样实现?”的困惑。
TCP协议在TCP/IP协议族中的地位,非常重要也非常不好掌握。在TCP/IP课程中,重点讲解了TCP连接的建立和关闭、状态图以及流量控制、拥塞控制等。强调了TCP在无连接的网络上实现可靠的面向连接服务。在TCP的源代码中,学生发现TCP有一个结构struct tcpcb邀…妖,即TCP传输控制块TCB,这个结构记录了TCP实例每个连接的各种属性,比如缓存区大小、定时器值、本地与远程的邀IP:PORT妖对等,通过对这个结构的分析,学生对TCP的连接管理、滑动窗口、各种计时器有了更深层次的认识,而且对于远程主机崩溃/重启、网络出现故障对本地TCP带来的信息反馈等没有学过的知识也有了了解。
2.2 对C程序设计能力的培养
Linux内核TCP/IP协议栈源代码是一个真实的、运行在成千上万台Linux服务器、主机上的大型软件。全部采用C语言编写,在学习TCP/IP源代码过程中,不要求学生面面俱到,但是必须对某个方面有所精通。学生必须下功夫搞清楚他所阅读的函数的功能以及每条语句的作用,然后,对其中的一些语句作出修改,指出其作用以及修改前后的函数功能的差异(由于条件所限,修改代码只局限于讨论和书面的解释,并没有实际编译)。
在学习TCP/IP协议栈源代码的过程中,很多学生遇到了以前在《C程序设计》课程中学习过,但是很少实践的C语言技能,由于Linux支持多种网络协议,从中可以深刻体会到C语言实现代码重用的技术。
对某些学生,在学习了ICMP协议的原理和源代码后,启发他们采用socket编程开发出自己的Ping程序和Traceroute程序,这又促进了他们学习TCP/IP源代码。
2.3 加深对操作系统、微机原理等课程的融会贯通
对于操作系统来说,学生都会画转换图,但是却没有见过真正的进程阻塞、唤醒、创建子进程、僵尸进程、父子进程竞争等代码,面的小程序演示了如何创建子进程以及父子进程之间如何竞争的情况[2]。
其结果如下,是不确定的。
(1)coutput from child utput from parent(2)coutput from child utput from parent(3)output from child output form par-ent
学生可学习父进程派生子进程以后两者的竞争关系等知识点。而在TCP/IP协议栈源代码中,这种形式的代码非常多,通过学习可提高学生对操作系统诸多知识点的理解。
在TCP/IP协议栈源代码的网络接口设备部分,有很大一部分是关于如何初始化网卡、网卡收发数据、查找MAC地址等和硬件联系紧密的C代码。特别是网卡接收数据部分,会涉及到硬件中断和软件中断。
3 结束语
通过学习,学生更加深刻地理解了TCP/IP工作原理和实现机制,在C程序设计、软件工程、操作系统和微机原理等取得了可观的效果。
参考文献
[1]Wehrle K,Ritter H,Daniel.Linux网络体系结构[M].北京:清华大学出版社,2006.
μIP协议栈 篇5
一般来说,通用计算机系统拥有足够支持系统在内核中实现复杂标准IP协议的资源,然而对于资源有限的嵌入式系统来说,则没有可能实现复杂的标准IP协议。因此必须根据嵌入式系统的基本特点,充分利用嵌入式TCP/IP协议栈的设计技巧,精简IP协议,使嵌入式设备接入互联网,从而实现物联网技术。
1. 物联网
物联网(Internet of things),是指将射频识别装置、红外感应器、全球定位系统等各种信息传感设备与互联网相结合而形成的一个巨大网络,这种网络不仅能够实现任何时间任何地点与任何人的沟通,更能实现人与物、物与物之间的沟通。物联网的产业链主要包括标识、感知、处理和信息传递四个环节,要想发展物联网技术,需要四个环节的充分配合,而要发挥每个环节的作用,就必须掌握包括射频标签、传感器、嵌入式系统和无线数据传输在内的几大关键技术。
本文重点分析如何实现嵌入式系统TCP/IP协议栈,从而将嵌入式设备联入互联网。
2. 嵌入式系统
2.1 嵌入式系统的概述
嵌入式系统通常是指非PC系统,是一种专用的计算机系统,主要以计算机技术为基础,以应用为中心,软件硬件皆可裁剪,对于那些对功能、可靠性、体积、成本、能耗有严格要求的应用系统来说,尤其适用。嵌入式系统主要由硬件和软件两个部分组成,硬件主要有微处理器、储存器、外设器件、I/O端口等,软件有操作系统、应用程序。应用程序对系统的运行进行控制,而操作系统则对应用程序与硬件之间的交互作用进行控制。
2.2 嵌入式系统的发展现状
早在20世纪90年代,嵌入式技术便开始广泛应用。随着信息化、智能化的迅速发展,嵌入式系统技术在未来十年内将获得前所未有的黄金发展时期,嵌入式系统技术将成为通信和消费类产品的重要发展方向。数字电视广播技术(DVB)、数字音频广播技术(DAB)等开始在全球范围内推广,在通信产业发展领域中各类软件、集成电路和新型元器件的作用日益扩大,而这些技术、产品的应用推广都离不开嵌入式系统技术的支持。
从软件方面来说,国外不少成熟的软件系统,如嵌入式实时操作系统正逐渐进入中国市场,而中国自主研发的嵌入式系统软件产品———嵌入式软件开发平台(Delta System)也开始受到广大厂商、经营商和大型公司的欢迎。
从硬件方面来说,在巨大市场需求的推动下,关于嵌入式系统技术的开发和应用已经相对比较成熟。目前用于开发嵌入式系统技术的硬件,不仅包括各大公司的微处理器芯片,而且还包括供技术人员学习、研发的各种配套开发包。
2.3 嵌入式系统的基本特点
要想正确理解并掌握嵌入式TCP/IP协议栈的设计技巧,必须要充分了解嵌入式系统的基本特点。与通用计算机系统相比,嵌入式系统主要是将计算机系统嵌入到对象系统中去。一般来说,嵌入式系统有以下几个方面的特点:
(1)嵌入式系统是面向特定应用的系统,大多数是为特定用户群设计的,具有低能耗、体积小、集成度高等优点,可以满足不同用户群的需求。
(2)嵌入式系统的硬软件设计精简高效,市场竞争力强。
(3)嵌入式系统的软件一般固化在Flash或ROM当中,不仅能够提高系统的执行速度,还有力地增强了系统的可靠安全性。
(4)嵌入式系统在设计完成后用户无法对程序进行修改,而需要重新开发,因此嵌入式系统不具备二次开发能力。
3. 嵌入式TCP/IP协议栈设计技巧
和通用计算机系统相比,嵌入式系统资源有限,无法实现复杂的标准IP协议,因此必须根据嵌入式系统的基本特点,充分利用嵌入式TCP/IP协议栈的设计技巧,精简IP协议,使嵌入式设备接入互联网,从而实现物联网技术。
3.1 TCP/IP协议栈的工作流程
一般来说,TCP/IP协议栈的工作流程是指:发送端一方通过应用进程将数据包交给协议栈,然后该数据包再由上往下一层层依次被封装,依次封装,即将上层的整个数据包作为下层的数据部分,再添加下层的首部。而接收端一方则经有协议栈将数据包由下往上一层层依次解包,即将下层的首部剥去,并根据其内容将数据部分交付上层的协议处理,最后应用层的数据交由应用进程处理。
3.2 TCP/IP协议栈的设计技巧
3.2.1 零拷贝
为了保证协议栈层与层之间的封装性,TCP/IP协议栈在实现过程中采取层次拷贝的原则,简单来说就是:在封包时,将上层协议的数据包从上层协议拷贝到下层协议的数据空间中,而在解包时,将数据包从下层协议拷贝到上层协议的数据空间中。而对应于嵌入式系统,特别是资源极其有限的单片机系统及SOC片上的系统,若在封装和解封装时层层拷贝数据,复杂且浪费拷贝时间。
因此在封包和解包时,实行零拷贝。在层与层交换信息时,以数据缓存区首指针为函数参数进行传递,封装数据包时,上层协议要充分考虑下一层的封装以便合理分配缓冲空间,帮助下一层协议在不需要拷贝上一层数据包的情况下直接填充该层的首部。在解封装时,可将原始数据包首部地址直接传给上一层协议,以便上层一些获取必要信息。
3.2.2 动态内存管理
内存空间是零拷贝顺利实现的重要保证,由于嵌入式系统内存资源较少,且数据包在接收和发送过程中大小不一,因此要合理控制内存,对内存进行动态管理。具体来说有两种方法可供选择。
(1)每次分配的缓存具有固定的长度,每一个字段都能存储有效数据的长度,并设置该缓存容纳数据包的最大值。这种方法简单方便,但浪费内存资源,不太可取。
(2)以“按需分配”为基本原则,合理配置缓存空间,根据接收数据和发送数据的大小长度分配空间,可以有效节约内存资源。
然而在对内存实行动态管理的同时应当注意“内存泄露”,在实现TCP/IP协议栈的过程中,要严格遵循“谁分配谁释放”的原则管理内存,防止系统因可用内存被耗尽而导致嵌入式设备崩溃现象的发生。
3.2.3 模块化设计
模块化设计思想在嵌入式系统技术的构成模式分析、结构优化、系统分解重组方面具有十分独特的作用,该设计的核心理念就是通过可重用的模块组合开发尽可能多的技术,以少变的系统构思满足多变的需求,以标准化的内部设计满足个性化、多样化的外部需求,不仅有效提高系统设计的可靠性和抗干扰性,而且能够缩短设计周期,降低制造成本,同时能够有效支持嵌入系统设计的创新突破,满足不同用户的需求。
对嵌入式TCP/IP协议栈进行模块化设计,即将协议栈划分成若干个模块文件,从而让每个模块实现一层协议的功能。一般来说,安装功能区别,将系统模块分成三大类:特殊模块、通用模块、借口模块。特殊模块作为独立模块进行设计,用于同类产品的升级换代;通用模块是兼有软、硬件的集成模块;接口模块的主要功能则是以电气接口实现模块间的硬件连接,并通过软件实现相互间的通讯。
例如,可以先定义某个模块对外的接口变量及函数接口声明,而在源文件定义相关的变量和函数。当需要引用该模块的变量或调用其中的函数时,只需调用包含此模块的头文件即可.这样设计之后,不仅使每个模块的分工明确,而且程序清晰,可读性好,便于程序的维护及及时修改。
3.2.4 分层设计
为了保证嵌入式TCP/IP协议栈具备良好的可移植性,适应多种目标平台,可对系统硬件进行分层设计,将硬件系统划分为硬件无关层和硬件依赖层,运用高级语言完成硬件无关层的设计,而运用高级语言的特殊机制完成硬件依赖层的设计,两层之间采用统一的借口交互信息,一旦硬件平台发生改变,无需改变硬件无关层,而只要更改硬件依赖层的驱动程序便可实现。如在硬件无关层中使用C语言以便将其相关代码移植到其他用C语言编程的硬件平台上,在硬件依赖层使用C语言中的#define宏定义重新定义数据类型,尽量消除系统对于具体编译器的依赖。
4. 结束语
总而言之,未来十年是物联网技术发展的繁荣时期,嵌入式系统在产业发展过程中将发挥越来越重要的作用,具有巨大的市场潜力和广阔的应用需求,因此必须充分认识到嵌入式设备联入互联网的重要性,在实现嵌入式TCP/IP协议栈的过程中,把握关键的设计技巧,增强系统开发的可行性,为顺利实现嵌入式TCP/IP协议栈,保证嵌入式设备联入互联网提供坚实的基础。
参考文献
[1]王越.物联网将推动嵌入式设备前景[J].河南:创新科技,20-10,3(10):6-7.
[2]刘波涛,贾菡,冯翠丽等.嵌入式Web服务器中TCP/IP协议栈的裁剪设计[J].西安通讯学院学报,2008,7(4):28-30.
[3]冯翠丽,刘波涛.一种嵌入式TCP/IP协议栈的设计与实现[J].长江大学学报,2008,5(4):331-333.学报,2010,33(3):2-9.
[4]陈立家,焦战立,熊文龙.基于精简TCP/IP协议栈网络服务器的实现[J].武汉理工大学学报,2007,31(3):565-568.
[5]任会平,王平,徐橼.低成本嵌入式Web服务器的研究[J].微计算机信息,2008,24(10):23-25.
相关文章:
担保公司工作总结简短 担保公司工作总结(通用七篇)01-20
担保公司工作总结简短 担保公司工作总结精选(8篇)01-20
担保公司工作总结 担保公司个人工作总结三篇(优质)01-20
担保公司工作总结简短 担保公司工作总结优质(五篇)01-20
外协协议书范文01-20
应用文写作知识点大全01-20
测试驱动01-20
资本驱动01-20
顾客驱动01-20
驱动框架01-20