我的TCP窗口怎么了

愤怒的呆鱼 2018-01-12 09:14:34


如图,各位。我的两台设备间就是做一个简单的发包与回包的过程,192.168.100.77主机发包,192.168.100.24主机回包。在前两个包。TCP的窗口都在正常的滑动,窗口8192.但是后续的包在交互过程中,192.168.100.24的窗口居然在不断的减小,在某一时刻窗口报0 ,导致两端无法再继续发包。

现在我纳闷了,这两台设备仅有这条TCP链路,没有其他了。我的包也是正常收正常发,但是为什么窗口却在急剧减小呢?应用层可是正常的收发包的呢?有大神可以解释下么?如果要避免这个情况该怎么做?
...全文
695 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
愤怒的呆鱼 2018-01-18
  • 打赏
  • 举报
回复
如果有朋友刚好知道如何解决,求赐教
愤怒的呆鱼 2018-01-18
  • 打赏
  • 举报
回复
引用 9 楼 draculamx 的回复:
1.接收端设置缓冲 2.做好线程同步,把多线程中要用到的“共享资源”锁住
目前如此设计,但问题还是没有解决。抓狂
draculamx 2018-01-17
  • 打赏
  • 举报
回复
1.接收端设置缓冲 2.做好线程同步,把多线程中要用到的“共享资源”锁住
  • 打赏
  • 举报
回复
如果不是接收缓冲区满,为什么你的接收程序的滑动窗口尺寸一直变小直到0,显然是你的发送端的发送速度快于接收端的处理速度造成的。
愤怒的呆鱼 2018-01-15
  • 打赏
  • 举报
回复
引用 7 楼 DelphiGuy 的回复:
如果不是接收缓冲区满,为什么你的接收程序的滑动窗口尺寸一直变小直到0,显然是你的发送端的发送速度快于接收端的处理速度造成的。
恩、理论上这么说是没错。窗口持续减小要么发的包的长度确实有8192,要么应用层没取走数据。但是现在一发送端并没有发送这么多的数据,二应用层也正常取走数据。所以才头大。
愤怒的呆鱼 2018-01-12
  • 打赏
  • 举报
回复
引用 1 楼 u010165006 的回复:
什么操作系统亚?
192.168.100.77主机是windows,192.168.100.24是嵌入式系统ucos
ooolinux 2018-01-12
  • 打赏
  • 举报
回复
什么操作系统亚?
愤怒的呆鱼 2018-01-12
  • 打赏
  • 举报
回复
引用 5 楼 cgqzly123 的回复:
[quote=引用 3 楼 DelphiGuy 的回复:] 应该是你的接收设备读数据比较慢,接收缓冲区满了,窗口就变成了。
一,接收缓冲应该不是满了,因为可以确定我的发送端每个包就是8字节长度,没有其他包了。 二,我看了网上的资料,基本上都说这是窗口收缩的事件,一般很难出现,但是现在出现有应用层有没有办法知道?有没有办法主动更新window呢?[/quote] 而且192.168.100.77主机发包是串行的,在192.168.100.24回包前不会发下一个包
愤怒的呆鱼 2018-01-12
  • 打赏
  • 举报
回复
引用 3 楼 DelphiGuy 的回复:
应该是你的接收设备读数据比较慢,接收缓冲区满了,窗口就变成了。
一,接收缓冲应该不是满了,因为可以确定我的发送端每个包就是8字节长度,没有其他包了。 二,我看了网上的资料,基本上都说这是窗口收缩的事件,一般很难出现,但是现在出现有应用层有没有办法知道?有没有办法主动更新window呢?
  • 打赏
  • 举报
回复
这其实也是TCP流量控制的体现。
  • 打赏
  • 举报
回复
应该是你的接收设备读数据比较慢,接收缓冲区满了,窗口就变成了。

1,316

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧