你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

Lwip 中和 IP 分包相关的参数

[复制链接]
STMCU小助手 发布时间:2022-7-29 15:51
前言 ' b5 B) v' n2 u8 S
前不久接到一个客户的问题。在 H743 上需要通过 UDP 发送大的数据包,涉及到 IP 分包的问题。他们在测试的过程中遇到了只要发送 6KB 的 UDP 数据包就会出现 hardfault 的问题。拿到这个问题的时候,调试得到了和客户一样的现象,程序进入hardfault,并且是由 Lwip 协议栈的 ip_reass_free_complete_datagram 函数触发。后经过一番调试,搞清楚了问题的原因,要说清楚,我们得先来看看 Lwip 中 IP 分包的实现。
% m, k2 o' x  Z% s! h# ^7 v0 h6 @# A7 A/ P% |. I: T" ~1 |: Z' Q8 M

4 f6 [7 u; n, Q* ^; \7 @% MIP 分包
6 O4 @, g- `+ U) g9 I9 o( e因为以太网对一次传输数据的最大长度规定为 1500 字节,所以如果 UDP 的数据包大于这个长度,就会在 IP 层进行分包后,再通过以太网传输。用户数据通过 UDP 发送,数据封装的过程如下图:
5 r. R0 b. @( j0 P! e. E9 ]/ P3 |3 L  T* V2 x

! J! w" r1 z: t. Q! Y& T$ n' P ~$VU{N82A59PX08N1~YV91A.png
9 f, Y, \# w& s  l4 M0 ^9 p0 }- }( p& Q: P4 t! N
IP 首部一般是 20 字节,UDP 首部 8 字节,1500-20-8=1472,所以当发送的用户数据超过 1472 个字节后,IP 层就会分包。0 d8 t* d: a$ X7 @7 Q
分包和重组的工作都是在 IP 层自动完成,对于 UDP 层来说,不用关心这个过程。4 m! @. E  H% @, t3 t
! [: t7 ?! [8 b% i' J- _* O# E

% Z+ E0 o6 D' }' x7 f5 i8 pLwip 中 IP 数据重组的实现 , g& v3 Q7 w0 \" a4 l8 y
Lwip 中通过 ip_reassdata 数据结构来描述一份正在被重组的 IP 数据报,其中的 p 字段指向第一个数据分片。Lwip 中可以同时处理多个 IP 数据报的重组,每个 IP 数据报对应一个 ip_reassdata 数据结构,并且通过结构中的 next 指针构成一个单向的
' ^( M' v* w7 a链表。reassdatagrams,指向 ip_reassdata 结构组成的链表的开头。
4 J% l- c. ~! R* w, R当以太网底层驱动接收到数据后,将数据传递给 Lwip 协议栈,ip_input 函数会根据当前是 IPv4 还是 IPV6 调用对应的处理函数。在 ip4_input 中,通过检查 IP 首部中的标志位和分片偏移量,来判断当前是否是一个 IP 分片包。如果是就调用ip4_reass 进行重组。
! T* X$ |5 p0 ?- d; `在整个 IP 数据报重组完成之前,接收到的 IP 分片包都保存在 buffer 中,如果其中的某个分片丢失,则重组就无法完成,而这些不全的 IP 分包数据不能一直占着 buffer,所以在 Lwip 中定义了 ip_reassdata 的生存时间,每 1 秒执行一次 ip_reass_tmr函数,将生存时间减 1,当减到 0 后就删除对应的 ip_reassdata 数据结构,以及其上挂的所有数据分片 pbuf。/ n" y# ^& s# l5 O& c; e% d, f1 k0 P
; |, G3 }+ t" A" c8 k. R* r1 N
9 X) G6 v* D- V* |
Lwip 中 IP 数据分片的实现
/ _5 P) n/ n+ Y5 `1 B7 p) }发送的过程比接收的过程相对简单,大致就是:UDP 层将要发送的数据组装在一个 pbuf 中,然后调用 ip_output 发送数据,当然在这个过程中,协议栈会添加相应的 IP 首部数据。如果 IP 数据报的长度大于以太网的 MTU 时,Lwip 协议栈的 IP 层就会进行分片,将数据报分成两个或者更多进行发送。IP 分片的工作是在 ip_frag 函数中完成的。代码的实现在这里就不详细展开介绍了。我们这里主要讲的是,我们在应用 Lwip 的时候,哪些配置参数是需要注意的
5 f* T2 j" u  Q; \" N% i
4 W; I) d) u8 [9 y& R: O) ?0 |# |7 F3 n; l1 t$ U* i
) X+ L$ ~: A; @' d
完整版请查看:附件
' E7 F6 d+ m/ R

! {( }0 t2 e, \7 V+ X6 i( F8 t% G6 ^3 r, O
0 Z, i* G9 g& q, y& r$ w& I
4 y4 p! {) `2 n- u

Lwip中和IP分包相关的参数.pdf

下载

346.09 KB, 下载次数: 7

赞 收藏 评论0 发布时间:2022-7-29 15:51

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版