4-5:TCP协议之确认应答(ACK)机制和超时重传机制
Posted 快乐江湖
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了4-5:TCP协议之确认应答(ACK)机制和超时重传机制相关的知识,希望对你有一定的参考价值。
一:TCP的确认应答(ACK)机制
在TCP中,当发送端的数据达到接收主机时,接收端主机会返回一个已收到消息的通知,这个消息叫做ACK(确认应答, P o s i t i v e A c k n o w l e g e m e n t Positive Acknowlegement PositiveAcknowlegement)
通常,两个人对话时,在谈话的停顿处可以点头或询问以确认谈话内容。如果对方迟迟没有回应,说话的一方还可以重复一遍以保证对方确实可以听到。因此,对方是否理解了此次对话的内容以及是否听到了对话的内容都要靠对方的反应来判断。
网络中的确认应答就类似于上面的例子。当对方听懂对话内容时会说:“嗯”,这就相当于返回了一个确认应答( A C K ACK ACK)。而当对方没有理解对话内容或没有听清时往往会问一句“啊?”
TCP通过肯定的ACK实现可靠的数据传输。当发送端将数据发出之后会等待对端的确认应答,如果有确认应答,说明数据已经成功到达,如果没有,那么数据有可能丢失了
如下图所示,在一定时间内没有等到确认应答,发送端就可以认为数据已经丢失,就会进行重发
未收到确认应答也并不意味着数据一定丢失,有时也有可能是因为数据收到,但是ACK却在传输的途中丢了。因此这种情况也会导致发送端因没有及时收到ACK,而认为数据没有到达目的地,从而进行重传
此外,还有一种情况对于接收方来说会比较难受。就是确认应答延时到达,在等待的过程中发送端会误认为数据丢失,所以会反复触发重传,因此对于接受主机来说,它会反复接收到相同的数据,而为了对上层应用提供可靠的传输,就必须得放弃重复的数据包。为此就必须要引入一种机制,使其能够识别是否已经接受数据,又能判断是否需要接受
序列号是按照顺序给发送数据的每一个字节都标上号码的编号。接收端查询接收数据TCP首部中的序列号和数据的长度,将自己下一步应该接受的序号作为确认应答返送回去。就这样,通过序列号和确认应答号,TCP可以实现可靠传输
发送的数据
序列号和确认应答号
二:超时重传机制
超时重传的超时是指在重发数据之前,等待确认应答到来的那个特定时间间隔。如果超过了这个时间仍然为收到确认应答,发送端将会重发数据。那么这个数据是如何确定的呢?
最理想就是找到一个最小时间,它能保证确认应答一定能在这个时间内返回。但是这个时间长短随着数据包途径的网络环境的不同会有所变化。
TCP要求不论处在何种网络环境下都要提供高性能通信,而且无论网络拥堵的情况发生如何改变,都必须保持这一特性。为此,它在每次发包时都会计算往返时间及其偏差,将这个往返时间和偏差相加重发超时的时间,就是比这个综合要稍微大一点的值。
在BSD的Unix及Windows系统中,超时都以0.5s为单位进行控制,因此重发超时都是0.5s的整数倍。不过由于最初的数据包还不知道往返时间,所以其重发超时一般设置为6s左右
数据被重发以后若还是收不到应答,就会进行再次发送,此时,等待确认应答的时间将会以2倍,4倍的指数函数延长
不过,数据也不会无限,反复的重发。当达到一定的重发次数之后,如果仍然没有任何确认应答返回,就会判断为网络或对端主机发生异常,强制关闭连接。
以上是关于4-5:TCP协议之确认应答(ACK)机制和超时重传机制的主要内容,如果未能解决你的问题,请参考以下文章