美文网首页
TCP 快速重传为什么是三次冗余 ACK ?

TCP 快速重传为什么是三次冗余 ACK ?

作者: 杰哥长得帅 | 来源:发表于2019-02-03 19:32 被阅读38次

    两次 duplicated ACK 肯定是乱序造成的
    丢包肯定会造成三次 duplicated ACK

    假定通信双方如下,A 发送 4 个 TCP Segment 给 B,其中 N - 1 成功到达,其它按照到达顺序,分别收到 ACK(N) 的数目:

    A 发送顺序 N - 1, N, N + 1, N + 2

    B 方到达顺序

    N - 1, N, N + 1, N + 2
    A 收到 1 个 ACK(N)

    N - 1, N, N + 2, N + 1
    A 收到 1 个 ACK(N)

    N - 1, N + 1, N, N + 2
    A 收到 2 个 ACK(N)

    N - 1, N + 1, N + 2, N
    A 收到 3 个 ACK(N)

    N - 1, N + 2, N, N + 1
    A 收到 2 个 ACK(N)

    N - 1, N + 2, N + 1, N
    A 收到 3 个 ACK(N)

    如果 N 丢了,没有到达 B

    N - 1,N + 1,N + 2
    A 收到 3 个 ACK (N)

    N - 1,N + 2,N + 1
    A 收到 3 个 ACK (N)

    TCP segment 乱序有2/5 = 40%的概率会造成A收到三次 duplicated ACK(N);

    而如果 N 丢了,则 A 有100%概率会收到三次duplicated ACK(N);

    基于以上的统计,当 A 接收到三次 duplicated ACK(N)启动 Fast Retransmit 算法是合理的,即立马 retransmit N,可以起到 Fast Recovery 的功效,快速修复一个丢包对 TCP 管道的恶劣影响

    而如果 A 接收到二次 duplicated ACK(N),则一定说明是乱序造成的,即然是乱序,说明数据都到达了 B,B 的 TCP 负责重新排序而已,没有必要 A 再来启动 Fast Retransmit 算法

    相关文章

      网友评论

          本文标题:TCP 快速重传为什么是三次冗余 ACK ?

          本文链接:https://www.haomeiwen.com/subject/jdqusqtx.html