标签:通过 发送 解决 情况 select 传输 ast 范围 超时重传
TCP实现可靠传输的方式之一,是通过序列号与确认应答
在TCP当中,当发送端的数据达到接受主机时,接收端主机会接受一个确认应答,表示已收到消息
TCP针对数据包丢失的情况,会用重传机制解决:
重传机制的其中一个方式,就是在发送数据的时候,设定一个定时器,当超过指定的时间后,没有收到对方的ACK确认应答报文,就会重发该数据,也就是我们常说的超时重传
TCP会在以下两种情况发生超时重传:
超时时间应该设置为多少呢? RTT(Round-Trip Time 往返时延):就是数据从网络一端传送到另一端所需的时间,也就是包的往返时间
超时重传时间是以RTO(Retransmission Timeout 超时重传时间)表示。
超时重传时间RTO的值应该略大于报文往返RTT的值。
实际上【报文往返RTT的值】是经常变化的,因为我们的网络也是时常变化的。也就是因为【报文往返RTT的值】是经常波动的,所以【超时重传时间RTO的值】应该是一个动态变化的值。
估计往返时间,通常需要采样以下两个:
TCP还有l另外一种快速重传(Fast Retransmission)机制,它不以时间为驱动,而是以数据为驱动重传。
快速重传的工作方式是应当收到三个相同的ACK报文时,会在定时器过期之前,重传丢失的报文段。
快速重传机制只解决了一个问题,就是超时时间的问题,但是它依然面临着另外一个问题。就是重传的时候,是重传之前的一个,还是重传所有的报文段的问题。
根据TCP的不同实现,以上两种情况都有可能实现。为了解决不知道该重传哪些TCP报文,于是就有了SACK方法。
还有一种实现重传的机制j叫:SACK(Selective Acknowledgement选择性确认)。
这种方式需要在TCP头部【选项】字段里加一个SACK的东西。它可以将缓存的地图发送给发送方,这样发送方就可以知道哪些数据收到了,哪些数据没收到,知道了这些信息,就可以只重传丢失的数据。
Duplicate SACK,其主要使用了SACK来告诉【发送方】哪些数据被重复接受了
标签:通过 发送 解决 情况 select 传输 ast 范围 超时重传
原文地址:https://www.cnblogs.com/turbosha/p/13196407.html