概述
SylixOS网络协议栈使用目前非常流行的嵌入式TCP/IP协议栈lwip。lwip是瑞典计算机科学院(SICS)的AdamDunkels 开发的一个小型开源的TCP/IP协议栈。lwip特点是对RAM与ROM的占用非常少,只需十几KB的RAM和40K左右的ROM就可以运行,非常适合嵌入式系统使用。
pbuf结构
pbuf是lwip中用来表示数据包的结构体,数据包在协议栈各层的流动也是通过pbuf来实现的,基本结构如下:
/** Main packet buffer struct */
struct pbuf {
struct pbuf *next; /* 下一个pbuf结构 */
void *payload; /* 实际数据起始地址 */
u16_t tot_len; /* pbuf链总长度 */
u16_t len; /* 当前pbuf长度 */
u8_t type_internal; /* pbuf类型 */
u8_t flags;
LWIP_PBUF_REF_T ref; /* 初始化为1,pbuf->next指向自己时ref加1 */
u8_t if_idx;
void *if_out;
};
pbuf的字段type_internal表示pbuf类型,lwip中有四种类型PBUF_RAM、PBUF_ROM、PBUF_REF和PBUF_POOL:
(1)PBUF_RAM类型的pbuf结构是一块很大的内存空间,内存首部是pbuf结构,实际数据接在后面,发送数据时常使用这种类型。如图:
pbuf的字段type_internal表示pbuf类型,lwip中有四种类型PBUF_RAM、PBUF_ROM、PBUF_REF和PBUF_POOL:
(1)PBUF_RAM类型的pbuf结构是一块很大的内存空间,内存首部是pbuf结构,实际数据接在后面,发送数据时常使用这种类型。如图:
(2)PBUF_POOL类型是由多个pbuf结构组合而成,使用next字段将这些pbuf结构连接起来。其中tot_len表示此节点和next之后所有节点的长度和,len表示当前节点的数据长度。接收数据时常使用这类型的pbuf结构。如图:
(3)PBUF_REF与PBUF_ROM类似,pbuf结构是单独的一块内存空间,而data是另一块内存,二者并不相连,如图:
Lwip协议栈使用pbuf结构在各层之间传递数据包,通过移动payload指针的方式在数据中添加报文头和剔除报文头,从而实现“零拷贝”机制,提高报文处理效率。
最后
以上就是坚定夕阳为你收集整理的SylixOS 网络协议栈lwip介绍1-----pbuf结构的全部内容,希望文章能够帮你解决SylixOS 网络协议栈lwip介绍1-----pbuf结构所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复