xiaoo125 发表于 2018-1-30 17:25 发送数据,没收到应答,就得重发。 而接收端,如果收到数据不符合预期,就得丢弃。 |
| 今天已验证确实是客户端没有给出ack。因为使用的网络环境比较复杂,导致客户端认为自己没有收到,从而没有给出ack。时间长了,底层服务器端的发送buf被写满。unack的链表也没有空的。最终发送的时候发不出去,假死在这里,我调试了一下中断啥都能响应,由于网络优先级高,所以其他任务根本就不执行。现在我需要实现如果长时间收不到ack就要扔掉这一包。该如何实现 |
| 因为在unacked里不为空,也就说明了,有包没有收到回应,因此未收到 ack 的链表一直不为空,所以一直在等待,win窗口一直减小我感觉是因为一直在接收或者发送数据,但是一直没有收到回应,因此能够接收数据的滑动窗口的大小就一直在减小,导致一定程度以后,无法接收数据,我感觉是这样,欢迎讨论! |
| 这里仅仅讨论一下,首先是关于unacked的一直卡死在循环里的问题,因为TCP 有确认的连接,而且和win窗口有关的,就是那个滑动窗口,这个滑动窗口大小应该是不为1,否则就是顺序接收了。 |
| 帮顶 |
/1
|手机版|OpenEdv-开源电子网
( 粤ICP备12000418号-1 )
GMT+8, 2026-11-4 06:06
Powered by OpenEdv-开源电子网
© 2001-2030 OpenEdv-开源电子网