-
Notifications
You must be signed in to change notification settings - Fork 2.6k
Closed
Description
A B通讯,丢包率A:50%,B:75%
用脚本连续1000次请求发送一定数据
然后 kcp.snd_queue开始堆积
经过调试,发现是kcp.snd_buf队列中,segment.resendts延迟几乎每次都在100s后左右,导致snd_buf队列中的包一直很难发出,致使snd_una几乎不再更新
然后 _itimediff(kcp.snd_nxt, kcp.snd_una + cwnd) >= 0 这个条件基本上一直为true,最后snd_queue也开始堆积了。我用的版本是从c版本直接翻译成golang的,理论上行为全部一致,另外我看另外一个强制snd_buf发包的条件是包头的fastack大于0,但是这个也是依赖A发送B,B再回复ACK才会更新的,所以这个情况下基本上就是没有快速重试的途径,最后只能断开连接
我目前暂时的解决方案,snd_buff的第一个元素(影响snd_una更新的包)当xmit>2时强制重发,不知道有没有更合适的方法可以解决上面的问题?
Metadata
Metadata
Assignees
Labels
No labels