TCP怎样保证可靠传输

TCP的可靠性保证

TCP主要提供了检验和,序列号/确认应答,超时重传,最大消息长度,滑动窗口控制等方法实现了可靠性传输。

检验和

通过检验和的方式,接收端可以检测出来数据是否有差错和异常,假如有差错就会直接丢弃TCP段,重新发送。TCP在计算检验和时,会在TCP首部加上一个12字节的伪首部。检验和总共计算3部分:TCP首部,TCP数据和TCP伪首部。

序列号/确认应答

发送端发送信息给接收端,接收端会回应一个确认应答包。上述过程中,只要发送端有一个包传输,接收端没有回应确认包(ACK),都会重发。或接收端的应答包,发送端没有收到也会重发数据。这样就保证了数据的完整性。

超时重传

  • 超时重传的时间指发送出去的数据包到接收确认包之间的时间,若超过了这个时间会被认为丢包,需要重传。如何确定这个时间值的大小呢?

  • 我们知道一来一回称为一个RTT,然后可能由于网络等问题,时间会有偏差,这个偏差称为抖动(方差)。超时重传的时间大概就是比RTT+抖动值稍大的时间。

  • 在重发的过程中,假如一个数据包经过多次重发也没有收到对端的确认包,就会认为接收端异常,强制关闭连接。并且通知应用通信异常终止。

最大消息长度

在建立TCP连接时,双方约定一个最大的长度(MSS)作为发送的单位,重传时也是按照这个单位来进行。理想的情况下该长度刚好不被网络层分块。

滑动窗口控制

  • 超时重传存在效率低下,滑动窗口机制窗口的大小即是无需等待确认包情况下,发送端还能发送的最大数据量。此机制的实现利用了大量缓冲区,通过对多个段进行确认应答的功能。通过下一次的确认包即可判断接收端是否已经接收到数据,若已经接收从缓冲区删除数据。

  • 如图,若接收端没有收到自己所期望的序列号数据之前,会对之前的数据进行重复确认;这时发送端如果在收到某个ack应答包后又连续三次收到同样的应答包,此时就会判断数据已经丢失,需要重发。

拥塞控制

  • 窗口控制解决了两台主机因传送速率不同引起的丢包。但若网络非常拥堵,此时再发数据可能导致发送的数据段超过最大生存时间,导致未到达接收方。为此TCP引入慢启动,先发出少量数据探路,再决定。
  • 慢启动:在启动初期以指数增长;设置一个慢启动阈值,以指数增长达到阈值开始按照线性增长至拥塞窗口;达到网络拥塞时立刻把拥塞窗口置为1,进行新一轮慢启动,同时新一轮的阈值为达到网络拥塞时拥塞窗口的一半。

posted @ 2023-03-01 16:31  yytarget  阅读(57)  评论(0编辑  收藏  举报