包的大小一般由mtu进行控制,如果超出mtu的大小lwip会拆包发送。
如果想要修改这个大小,在lwip里的ethernetif结构体用来抽象描述网卡,它包含了mtu属性,一般mtu大小也需要与网卡进行确认,1500字节一般是所有网卡都支持的大小,所以lwip一般mtu设置为1500,首先找到ethernetif_init函数, 它内部会调用low_level_init做低级初始化,这部分会初始化网卡硬件描述,在里面可以看到它会设置mtu:

将这个值修改你要发送的包的大小就可以了。
修改之后接收端也需要去配置对应的接收大小,否则会接收失败,比如上位机采用windows进行接收,需要配置对应网卡的接收端大小:
- 在windows cmd里输入
netsh interface ipv4 show subinterfaces

可以看到每个网卡的mtu大小,使用netsh interface ipv4 set subinterface "连接名" mtu=mtu值 store=persistent命令将网卡的MTU设置为你要接收的大小就可以了。
6885

被折叠的 条评论
为什么被折叠?



