STM32
登录
直播中
敷衍作笑谈
9年用户
941经验值
擅长:制造/封装 连接器 光电显示 接口/总线/驱动 RF/无线
私信
关注
[问答]
Pbuf是什么?Pbuf的内部结构是怎样的
开启该帖子的消息推送
LwIP
TCP
Pbuf是什么?Pbuf的内部结构是怎样的?
UDP处理的输入输出的流程是怎样的?
回帖
(1)
仇国林
2021-11-3 09:24:09
Lwip学习笔记之UDP
Lwip严格按照协议的分层进行管理,每个层之间传送数据都需要进行上下文交换。lwIP所使用的过程模型是:把所以协议封装到一个单一的过程中,从而与操作系统内核分开。应用程序可能也驻留在lwIP处理过程中,或者在单独的过程中。 TCP/IP栈和应用程序之间的通信可以通过函数调用实现,也可以通过更为抽象的API。
关于邮箱
Lwip的消息传递采用了邮箱的机制,邮箱有两种操作:邮寄和提取,邮寄操作不会阻塞进程;邮寄到邮箱的消息由操作系统模拟层排入队列知道另一个进程来提取他们。
关于缓冲
包缓冲pbufs
Pbuf在Lwip中表示一包,Pbuf能在一张列表中被连接到一起,形成一个pbuf链,Pbuf具备三种类型,Pbuf Ram,Pbuf Rom,Pbuf Pool,一个Pbuf链可以包含多种类型的pbuf。
三种类型不同的使用,pbuf_pool主要被网络设备驱动程序使用,当引用程序发送位于北应用程序管理的存储区的数据时,Pbuf_ROM被使用。在pbuf被移交到TCP/IP栈后,数据不能修改,因此命名为Pbuf_ROM。
Pbuf的内部结构
Pbuf的内部结构如下图所示:
[tr]变量名作用[/tr]
Next
指向下一个Pbuf的指针
Payload
Pbuf数据的起始位置
Len
数据内容的长度
Tot_len
随后所有Pbuf中的len中的值的总和??
Flag
表明pbuf类型
Ref
参考计数
pbuf的操纵
Pbuf_alloc()完成分配一个pbuf的任务。
Pbuf_ref()增加参考计数
Pbuf_free()完成释放分配,他首先减少pbuf的参考计数,如果参考计数达到0则表示pbuf已经被释放。
ip处理
Lwip仅仅实现最基本的IP功能,可以发送、接收和转接包,但不能发送或接收分割的IP包,也不能处理带IP选项的包,不符合条件的包会被丢弃。如果接收的包是主机指定的包,则由protocol域来决定传给哪个高层协议。接收包由ip_input()函数来处理。
发送的包由ip_output()处理,它使用ip_route()寻找适当的网络接口来上传包。当时发送包的网络接口被确定,包被传递到ip_output_if()函数。
ICMP,TCP和UDP都是比IP协议高一层的协议,当IP协议收到包且地址符合后,将会把包传递上层协议进行处理。如果IP协议收到的包与IP地址不一致,则会转发。转发由Ip_forward()完成。
UDP处理
每一个UDP话路(session)的状态都保存在一个PCB结构中,UDP PCBs保存在一个链表中,当UDP datagram到达,则搜索该链表并进行匹配。
UDP的输入输出如图所示:
Lwip学习笔记之UDP
Lwip严格按照协议的分层进行管理,每个层之间传送数据都需要进行上下文交换。lwIP所使用的过程模型是:把所以协议封装到一个单一的过程中,从而与操作系统内核分开。应用程序可能也驻留在lwIP处理过程中,或者在单独的过程中。 TCP/IP栈和应用程序之间的通信可以通过函数调用实现,也可以通过更为抽象的API。
关于邮箱
Lwip的消息传递采用了邮箱的机制,邮箱有两种操作:邮寄和提取,邮寄操作不会阻塞进程;邮寄到邮箱的消息由操作系统模拟层排入队列知道另一个进程来提取他们。
关于缓冲
包缓冲pbufs
Pbuf在Lwip中表示一包,Pbuf能在一张列表中被连接到一起,形成一个pbuf链,Pbuf具备三种类型,Pbuf Ram,Pbuf Rom,Pbuf Pool,一个Pbuf链可以包含多种类型的pbuf。
三种类型不同的使用,pbuf_pool主要被网络设备驱动程序使用,当引用程序发送位于北应用程序管理的存储区的数据时,Pbuf_ROM被使用。在pbuf被移交到TCP/IP栈后,数据不能修改,因此命名为Pbuf_ROM。
Pbuf的内部结构
Pbuf的内部结构如下图所示:
[tr]变量名作用[/tr]
Next
指向下一个Pbuf的指针
Payload
Pbuf数据的起始位置
Len
数据内容的长度
Tot_len
随后所有Pbuf中的len中的值的总和??
Flag
表明pbuf类型
Ref
参考计数
pbuf的操纵
Pbuf_alloc()完成分配一个pbuf的任务。
Pbuf_ref()增加参考计数
Pbuf_free()完成释放分配,他首先减少pbuf的参考计数,如果参考计数达到0则表示pbuf已经被释放。
ip处理
Lwip仅仅实现最基本的IP功能,可以发送、接收和转接包,但不能发送或接收分割的IP包,也不能处理带IP选项的包,不符合条件的包会被丢弃。如果接收的包是主机指定的包,则由protocol域来决定传给哪个高层协议。接收包由ip_input()函数来处理。
发送的包由ip_output()处理,它使用ip_route()寻找适当的网络接口来上传包。当时发送包的网络接口被确定,包被传递到ip_output_if()函数。
ICMP,TCP和UDP都是比IP协议高一层的协议,当IP协议收到包且地址符合后,将会把包传递上层协议进行处理。如果IP协议收到的包与IP地址不一致,则会转发。转发由Ip_forward()完成。
UDP处理
每一个UDP话路(session)的状态都保存在一个PCB结构中,UDP PCBs保存在一个链表中,当UDP datagram到达,则搜索该链表并进行匹配。
UDP的输入输出如图所示:
举报
更多回帖
rotate(-90deg);
回复
相关问答
LwIP
TCP
非门芯片威廉希尔官方网站 的
内部结构
是
怎样
的?符号是什么?
2021-11-04
2504
请问LWIP传输数据时用什么
PBUF
类型好?
2019-10-22
876
51单片机的
内部结构
由哪几部分组成?引脚分配是
怎样
的?
2021-11-08
5757
为什么不将lwip完整数据包封装在一个
pbuf
里面?
2019-10-30
1099
lwip运行久了出现Assertion "
pbuf
_free: p->ref > 0" failed at line 650 in
2020-03-23
7852
IGBT的
内部结构
是
怎样
组成的
2021-10-15
7872
请问这个设备的
内部结构
是什么
2019-01-18
1630
新型数字电容隔离器功能原理有哪些? 其
内部结构
是
怎样
的?
2021-04-13
1941
如何在LWIP移植中把一个1400字节左右的数据使用UDP发送到PC吗?
2019-10-23
1187
学fpga的
内部结构
和各接口实验怎么学
2014-05-10
2468
发帖
登录/注册
20万+
工程师都在用,
免费
PCB检查工具
无需安装、支持浏览器和手机在线查看、实时共享
查看
点击登录
登录更多精彩功能!
英国威廉希尔公司网站
william hill官网 版块
小组
免费开发板试用
ebook
直播
搜索
登录
×
20
完善资料,
赚取积分