TCP丢包时会全部重传从丢的那个包开始以后的数据吗?
lic721 opened this issue · comments
lic721 commented
SarahSmitho commented
我也有这个疑问
Kurt commented
我也有这个疑问, 希望有人解答
Ye Li commented
原文中的理解应该是有误的,与链路层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
<#369 (comment)>,
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>