- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
lwip初步描述文档.doc
LwIP协议栈使用的简单介绍
李广旭
LWIP是TCP/IP协议栈的一种实现。LWIP的主要目的是减少存储器利用量和代码尺寸,使LWIP适合应用于小的、资源有限的处理器如嵌入式系统。为了减少处理器和存储器要求,lwIP可以通过不需任何数据拷贝的API进行裁减。
在协议栈中,UDP协议面向无连接通信,网络设备在通信时,UDP数据拥有比TCP数据更高的优先通信权利,这点使得UDP数据在通信上更加的快速,
当需要发送数据报时,只需调用udp_send 函数即可,而udp_send 会适当的逐层逐级的调用接口函数来实现数据报的发送。当收到一个UDP数据报时,IP层调用udp_input 函数。当发现相应的UDP PCB,udp_recv 函数被调用。 由于UDP的简单、快速,使得其成为处理单片机TCP/IP非复杂通讯的首选协议。下面介绍一些使用UDP通讯的必要知识
一.UDP是一个简单的协议,每一个UDP session 的状态都被保留在一个PCB结构中
会用到的结构体成员有:
·UDP PCB结构中包含一个指向全局UDP PCB链表中的下一个PCB的指针。
·UDP会话 session 由IP地址和端口号来定义,并且被存放在local_ip, dest_ip, local_port, dest_port域中。
·当接收到由PCB标明的会话中的数据报 datagram 时,recv所指向的函数被调用。包缓冲器-pbufs。Pbuf在lwIP的内部表示一包,也是为了最小限度的使用栈这一特殊需要而设计。pbuf结构既支持分配动态内存来保存包内容,也支持把包数据存储在静态存储区。对于基本接口来说,多次用到了pbuf结构体,pbuf是lwIP信息包的内部表示,为最小限度协议栈的特殊需求而设计。pbuf有三种类型(宏定义):
PBUF_RAM:为缓存分配了一块很大的空间,并包含协议首部,数据存储在RAM中。
PBUF_ROM:不分配缓存空间,数据部分已经固定在只读存储器中,数据存储在ROM中。
PBUF_REF:不分配缓存空间,做单线程使用,或通过其他方法复制数据,数据区指向RAM。PBUF_POOL:缓冲池可以将pbuf连接成链表,数据来自缓冲池。pbuf结构体如下:struct pbuf struct pbuf *next;//指向下一个结构体,用作链表时使用。void *payload;//指向实际数据区域。u16_t tot_len;//链表内结构体指向的数据总长度。u16_t len;//本结构体指向的数据总长度。u8_t type;//类型:PBUF_RAM、PBUF_ROM、PBUF_REF、PBUF_POOLu8_t flags;//复合用标志位u16_t ref;//被关联数(被其他指针或堆栈或应用程序所指向的数目) ;
主要使用的两个函数介绍struct pbuf * pbuf_alloc pbuf_layer layer, u16_t length, pbuf_type type
说明:按照指定类型分配一个pbuf结构体。参数:layer有四种宏定义PBUF_TRANSPORT、PBUF_IP、PBUF_LINK、PBUF_RAW,可以指定首部大小;length数据部分大小(字节数);type类型,按照上述四种种类型指定。返回:分配好的结构体指针。u8_t pbuf_free struct pbuf *p
说明:减少关联,如果减少到0,则释放其占用资源。参数:pbuf结构体。返回:减少关联的数目。
LwIP协议栈基本函数:void LwIP_Init void
LwIP协议栈自带初始化,包括IP初始化和物理地址初始化,可进入进行相应的修改
UDP接口函数1.udp_new
说明:该函数用于建立一个用于UDP通信的UDP控制块(pcb ,但是这个pcb并没有被激活,除非该pcb已经被绑定到一个本地地址上或者连接到一个固定地址的远程主机。在定义一个udp_pcb控制块后该函数应该首先被调用,以建立该控制块的连接标志。
功能:建立一个用于UDP通信的UDP控制块(pcb
原型:struct udp_pcb *udp_new void
参数:无
返回:udp_pcb:建立的UDP连接的控制块 pcb
2.udp_remove
说明:该函数用于删除一个指定的连接,通常是控制块在建立成功后,即在函数udp_new 调用之后,当不需要该网络连接来通信了,就需要将其删除,以释放该连接 pcb 所占用的资源。
功能:删除并释放掉一个udp_pcb
原型:void udp_remove struct udp_pcb *pcb
参数:pcb:指定要删除的连接 pcb
返回:无
3.udp_bind
说明:
文档评论(0)