kcp icon indicating copy to clipboard operation
kcp copied to clipboard

TCP丢包时会全部重传从丢的那个包开始以后的数据吗?

Open lic721 opened this issue 2 years ago • 3 comments

image 我的理解, TCP是SR和GBN的混合体, 丢包时, 会根据SACK只重传相应的分组, "TCP丢包时会全部重传从丢的那个包开始以后的数据", 请教下这句话是咋理解的?

lic721 avatar Aug 28 '22 08:08 lic721

我也有这个疑问

SarahSmitho avatar Sep 15 '22 03:09 SarahSmitho

我也有这个疑问, 希望有人解答

thiscallaname avatar Sep 24 '22 13:09 thiscallaname

原文中的理解应该是有误的,与链路层ARQ的Go-back-N混淆了。

首先,如果TCP开启了SACK(Selective ACK),则就是选择性重传。关于SACK,这篇文章图文并茂,解释得很清楚: https://www.geeksforgeeks.org/selective-acknowledgments-sack-in-tcp/

其次,即使TCP没有开启SACK,它也并不会重传丢失的包(称为队头分组)以后的全部数据。丢包发生后,一方面,TCP发送端仍然是依据具体拥塞控制算法,根据收到的ACK分组数调整拥塞窗口CWND;另一方面,当连续收到3个重复ACK时,Fast Retransmit机制会触发对队头分组的重传。在完成队头分组的重传后:1)如果CWND允许(即大于在外分组数),会继续发送新的分组;2)停滞发送等待新的ACK到来;3)长时间未收到对队头分组的确认将触发RTO到时。

所以TCP没有SACK时,只是包的恢复会延后,并不会盲目重发队头分组后面那些未被确认的分组。

On Sat, Sep 24, 2022 at 9:03 PM thiscallaname @.***> wrote:

我也有这个疑问, 希望有人解答

— Reply to this email directly, view it on GitHub https://github.com/skywind3000/kcp/issues/369#issuecomment-1256963867, or unsubscribe https://github.com/notifications/unsubscribe-auth/ABWP2F3SB5UM6S4CN57SDHLV7333ZANCNFSM572VPSNA . You are receiving this because you are subscribed to this thread.Message ID: @.***>

-- LI, Ye School of Information Science and Technology Nantong University Nantong 226019, Jiangsu Province, China GitHub: https://github.com/yeliqseu https://github.com/yeliqseu

yeliqseu avatar Sep 24 '22 14:09 yeliqseu