- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第二章 uIP协议栈分析V1.00
第二章 uIP 协议栈分析
2 .1 uIP 特性
uIP 由瑞典计算机科学学院( 网络嵌入式系统小组) 的Adam Dunkels 开发。其
源代码由 C 语言编写,并完全公开,所有代码和相关说明文档可以到
/adam/uip/下载。最新版本是 uIP1.0 版本,本书移植和使用的版
本正是此版本。
uIP 协议栈去掉了完整的 TCP/IP 中不常用的功能,简化了通讯流程,但保
留了网络通信必须使用的协议,设计重点放在了IP/TCP/ICMP/UDP/ARP 这些网
络层和传输层协议上,保证了其代码的通用性和结构的稳定性。
由于uIP 协议栈专门为嵌入式系统而设计,因此还具有如下优越功能:
(1) 代码非常少,其协议栈代码不到6K,很方便阅读和移植。
(2 ) 占用的内存数非常少,RAM 占用仅几百字节。
(3 ) 其硬件处理层、协议栈层和应用层共用一个全局缓存区,不存在数据
的拷贝,且发送和接收都是依靠这个缓存区,极大的节省空间和时间。
(4 ) 支持多个主动连接和被动连接并发。
(5 ) 其源代码中提供一套实例程序:web 服务器,web 客户端,电子邮件
发送程序(SMTP 客户端) ,Telnet 服务器, DNS 主机名解析程序等。
通用性强,移植起来基本不用修改就可以通过。
(6 ) 对数据的处理采用轮循机制,不需要操作系统的支持。
由于uIP 对资源的需求少和移植容易,大部分的 8 位微控制器都使用过 uIP
协议栈, 而且很多的著名的嵌入式产品和项目(如卫星,Cisco 路由器,无线传感
器网络) 中都在使用uIP 协议栈。
2 .2 uIP 架构
uIP相当于一个代码库,通过一系列的函数实现与底层硬件和高层应用程序
的通讯,对于整个系统来说它内部的协议组是透明的,从而增加了协议的通用性。
uIP协议栈与系统底层和高层应用之间的关系如图2 -1所示。
图2 -1 uIP在系统中的位置
从上图可以看出,uIP 协议栈主要提供了三个函数供系统底层调用。即
uip_init(), uip_input() 和 uip_periodic() 。 其 与 应 用 程 序 的 主 要 接 口 是
UIP_APPCALL( ) 。
uip_init()是系统初始化时调用的,主要初始化协议栈的侦听端口和默认所有
连接是关闭的。
当网卡驱动收到一个输入包时,将放入全局缓冲区uip_buf 中,包的大小由
全局变量 uip_len 约束。同时将调用 uip_input() 函数,这个函数将会根据包首部
的协议处理这个包和需要时调用应用程序。当uip_input()返回时,一个输出包同
样放在全局缓冲区 uip_buf 里,大小赋给 uip_len 。如果 uip_len 是 0,则说明没
有包要发送。否则调用底层系统的发包函数将包发送到网络上。
uIP 周期计时是用于驱动所有的 uIP 内部时钟事件。当周期计时激发,每一
个TCP 连接都会调用uIP 函数uip_periodic() 。类似于uip_input() 函数。uip_periodic()
函数返回时,输出的 IP 包要放到 uip_buf 中,供底层系统查询uip_len 的大小发
送。
由于使用 TCP/IP 的应用场景很多,因此应用程序作为单独的模块由用户实
现。uIP 协议栈提供一系列接口函数供用户程序调用,其中大部分函数是作为 C
的宏命令实现的,主要是为了速度、代码大小、效率和堆栈的使用。用户需要将
应用层入口程序作为接口提供给 uIP 协议栈,并将这个函数定义为宏
UIP_APPCALL() 。这样,uIP 在接受到底层传来的数据包后,在需要送到上层应
用程序处理的地方,调用 UIP_APPCALL( ) 。在不用修改协议栈的情况下可以适
配不同的应用程序。
2 .3 uIP 在 MCS-51 单片机上的移植
1.为此项目建立一个 keil C 工程,建立 src 目录存放源文件。
2 .通过阅读 uip-1.0\unix\main
文档评论(0)