(3)TCP重传

作者: hedgehog1112 | 来源:发表于2020-12-08 12:43 被阅读0次

一、TCP重传机制

保证所有的数据包都可以到达

注意:接收端给发送端的Ack只确认最后一个连续包,如发五份数据,收到1,2,于是回ack 3,然后收到4(注意此时3没收到),TCP怎么办?SeqNum和Ack以字节数为单位,ack时候,不能跳着确认,只能确认最大连续收到包,不然,发送端就以为之前都收到

1、超时重传机制

不回ack,死等3,发送方发现收不到3的ack超时后会重传3。接收方收到3后,ack 回 4—意味着3和4都收到

问题,要死等3,导致4和5即便收到,发送方也不知,因为没收到Ack,可能重传4和5

有两种选择:

   1)仅重传timeout的包(3),省带宽,慢

   2)重传timeout后所有(3,4,5),快,可能会有无用功

2、快速重传机制

于是,TCP引入Fast Retransmit 算法,以数据驱动重传,不用等timeout再重传。包没连续到达,ack最后那个可能被丢了的包,发送方连续收3次相同ack,就重传

如:发送方发1,2,3,4,5份数据,1先到送,ack回2,2没收到,3到达,ack还回2,4和5到了,还是ack回2,马上重转2。因为3,4,5都收到了,ack回6

3、SACK 方法(Selective Acknowledgment选择承认)

在TCP头里加SACK,SACK汇报收到的数据碎版,ACK还是Fast Retransmit的ACK

发送端根据回传SACK,知道哪些数据到(优化Fast Retransmit)。Linux通过tcp_sack打开这功能(默认开)

注意1:接收方Reneging(有权把已回发送端SACK里的数据给丢了)。不鼓励,因为复杂化,但要把内存给更重要。所以,发送方不能完全依赖SACK要依赖ACK,并维护Time-Out,如后续ACK没增长,还要SACK东西重传,ps:接收端不能把SACK包标为Ack

注意2SACK消费发送方资源,如攻击者发 发送方一堆SACK选项,发送方重传甚至遍历已经数据,消耗资源

4、Duplicate SACK – 重复收到数据

又称D-SACK,用SACK告诉发送方哪些被重复接收

(1)D-SACK使用了SACK的第一个段来做标志:

如SACK第一段范围,被 ACKSACK第二个段  所覆盖,就是D-SACK

(2)示例一:ACK丢包

丢两个ACK1)发送端重传第一个数据包(3000-3499),接收端发现重复收到,回SACK=3000-3500,2)ACK到4000,意味收到4000前所有数据3)这个SACK就是D-SACK——告诉发送端 收到重复数据,发送端知道,数据包没丢,丢ACK包

(3)示例二:网络延误

1)1000-1499网络延误,发送方没收到ACK2)后面到达三个包触发“Fast Retransmit算法”3)重传时,延误包到了,所以回SACK=1000-1500,ACK已到3000,4)SACK是D-SACK—标识收到重复包。

发送端知道“Fast Retransmit算法”不是因为 发的/回应的ACK包 丢了,因为网络延时

(4)D-SACK好处:

1)让发送方知道,发的包/回来ACK包 丢了

2)是不是自己timeout太小,导致重传

3)先发的包后到(又称reordering

4)网络上是不是复制我的包

知道这些可更好帮TCP了解网络情况,从而做网络流控。Linux的tcp_dsack默认开启这功能

http://www.52im.net/thread-513-1-1.html

相关文章

  • 【tcp】关于tcp 超时重传次数

    TCP重传间隔时间和TCP重传次数 一般TCP报文的重传超时时间 TCP重传时间间隔有着多种不同的算法,最常见的就...

  • (3)TCP重传

    一、TCP重传机制 保证所有的数据包都可以到达 注意:接收端给发送端的Ack只确认最后一个连续包,如发五份数据,收...

  • 网络重传次数

    聊一聊重传次数 听说Linux有两个参数限制超时重传次数 重传超过tcp_retries1会怎样 重传超过tcp_...

  • wireshark学习笔记(五)——TCP重传技术

    TCP重传的原理 在TCP重传的理论中,重传计时器是用于决定是否有必要进行数据包重传的一个主要机制。重传计时器维护...

  • TCP协议灵魂12问(第八问)

    TCP 的超时重传时间是如何计算的? TCP 具有超时重传机制,即间隔一段时间没有等到数据包的回复时,重传这个数据...

  • TCP(II) 超时重传

    查看原文 TCP 提供可靠数据传输服务,为保证传输正确性,TCP 重传其认为已经丢失的包。TCP 有两套重传机制,...

  • 浅谈TCP(2):流量控制与拥塞控制

    上文浅谈TCP(1):状态机与重传机制介绍了TCP的状态机与重传机制。本文介绍流量控制(Flow Control,...

  • TCP的重传

    我们都知道tcp发送的消息,如果没收到ack是会重传的。具体是怎么重传的呢 比如发送1,2,3,4,5 这5个包,...

  • 传输层

    因特网协议集 传输层要求: 拥塞控制 TCP TCP的差错校验和多路复用 快速重传机制:连续收到3个相同的确认AC...

  • 细说TCP重传

    介绍TCP的主要任务是很简单:打包和发送数据。TCP与其他协议的不同之处在于使用滑动窗口来管理基本数据收发过程,同...

网友评论

    本文标题:(3)TCP重传

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