OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 9475|回复: 4

LWIP 使用tcp_write()和tcp_output向外发送数据时,不是立即发送?频率不可控?

[复制链接]

5

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
76
金钱
76
注册时间
2014-9-5
在线时间
9 小时
发表于 2018-3-27 15:12:13 | 显示全部楼层 |阅读模式
20金钱
协议栈移植的LWIP 1.4.1 ,TCP Client。在使用过程中发现,不管在应用程序里面以多大的频率来调用tcp_write() 和 tcp_output来实现数据的发送,接收到的数据总是将几帧数据打包在一起发送出来,发送的频率还比较稳定为200ms左右。tcp_write是将数据写入缓存,tcp_output不就将数据直接发送出来了吗?为什么会出现几帧打包在一起再发送的情况呢?请教各位路过的大神,这个是什么原因呢?

最佳答案

查看完整内容[请看2#楼]

这个的问题应该找到了,是LWIP内部的Nagle算法会把一些小帧数据合并成一个大的数据包再往外发送,Nagle算法的周期一般是200ms,我尝试把这个算法关闭后,抓包工具抓到的数据看就正常了。。。。 结贴。。。。。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

5

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
76
金钱
76
注册时间
2014-9-5
在线时间
9 小时
 楼主| 发表于 2018-3-27 15:12:14 | 显示全部楼层
这个的问题应该找到了,是LWIP内部的Nagle算法会把一些小帧数据合并成一个大的数据包再往外发送,Nagle算法的周期一般是200ms,我尝试把这个算法关闭后,抓包工具抓到的数据看就正常了。。。。 结贴。。。。。
回复

使用道具 举报

12

主题

84

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1887
金钱
1887
注册时间
2015-4-21
在线时间
102 小时
发表于 2018-3-27 17:56:19 | 显示全部楼层
缓冲数据达到发送数量才发送出去
回复

使用道具 举报

5

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
76
金钱
76
注册时间
2014-9-5
在线时间
9 小时
 楼主| 发表于 2018-3-28 15:35:08 | 显示全部楼层
weilong1370 发表于 2018-3-27 17:56
缓冲数据达到发送数量才发送出去

应该和发送数量无关。我测试了一下,10hz发送时,会打包两帧200个字节再发送,20hz时,则会打包4帧400字节左右再发送。从现象看,好像就是一个比较固定的时间再发送,猜测会不会和轮训等比较有周期性的进程有关?
回复

使用道具 举报

1

主题

3

帖子

0

精华

新手入门

积分
18
金钱
18
注册时间
2018-6-6
在线时间
3 小时
发表于 2018-11-9 15:24:03 | 显示全部楼层
你好,楼主。这个问题具体怎么解决掉的,能不能回复下
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-24 18:28

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表