TCP怎么保证可靠性

TCP保证可靠性:

(1)序列号、确认应答、 超时重传

数据到达接收方,接收方需要发出一个确认应答,表示已经收到该数据段,并且确认序号会说明它下一次需要接受的数据序列号。
如果发送方迟迟未收到应答,那么可能是发送的数据丢失,也可能是确认应答丢失,这时发送方在等待一定时间后会进行重传,这个时间一般是2*RTT(报文往返时间)+一个偏差值。

(2)窗口控制与告诉重发控制/快速重传(重复确认应答)

TCP会利用窗口控制来提高传输速度,意思是在一个窗口大小内,不用一定要等到应答才能发送下一段数据,窗口大小就是无需等待确认而可以继续发送的数据的最大值。
如果不适用窗口控制,每一个未收到确认应答的数据都要重发。
使用窗口控制,如果数据段1001-2000丢失,后面数据每次传输,确认应答都会不停地发送序号为1001的应答,表示我要接受1001开始的数据,发送端如果收到3次相同应答,就会立刻进行重发。
但还有种情况可能是数据都收到了,但是有的应答丢失了,这种情况不会进行重发,因为发送端知道,如果数据段丢失,接收端不会放过它的,会疯狂向它提醒。

(3)拥塞控制

如果把窗口定的很大,发送端连续发送大量的数据,可能会造成网络的拥堵,甚至造成网络的瘫痪。
TCP为了防止这种情况而进行了拥塞控制。
1.慢启动:定义拥塞窗口,一开始将该窗口的大小设为1,之后每次收到确认应答(经过一个RTT),将拥塞窗口大小*2.
2.拥塞避免:设置慢启动阈值,一般开始都设为65536。拥塞避免是指当拥塞窗口大小达到这个阈值,拥塞窗口的值不再指数上升,而是加法增加(每次确认应答/每个RTT,拥塞窗口大小+1),一次来避免拥塞。
将报文段的超时重传看作拥塞,则一旦发生超时重传,我们需要先将阈值设为当前窗口大小的一般,并且将窗口大小设为初值1,然后重新进入慢启动过程。
3.快速重传:在遇到3次重复确认应答(告诉重发控制)时,代表收到了3个报文段,但是这之前的1个段丢失了,便对它进行立即重传。
然后,先将阈值设为当前窗口大小的一般,然后将拥塞窗口大小设为慢启动阈值+3的大小。


这样可以达到:在TCP通信时,网络吞吐量呈现逐渐的上升,并且随着拥堵来降低吞吐量, 再进入慢慢上升的过程,网络不会轻易的发生瘫痪。

推荐阅读更多精彩内容

  • 1、确认应答(ACK)机制 TCP 将每个字节的数据都进行了编号,即为序列号。确认序号 = 序号 + 1 每个 A...
    杰哥长得帅阅读 680评论 0 0
  • [TOC] 参考 1. TCP可靠性的保证机制总结[https://blog.csdn.net/xuzhangze...
    GOGOYAO阅读 13,938评论 0 11
  • TCP协议传输数据的特点主要是面向字节流、传输可靠、面向连接。保证数据传输可靠性的方式如下: 校验和 序列号 TC...
    杜子龙阅读 409评论 0 1
  • 校验和 计算方式:在数据传输的过程中,将发送的数据段都当做一个16位的整数。将这些整数加起来。并且前面的进位不能丢...
    杨帆玉阅读 74评论 0 0
  • 众所周知,网络层的ip协议是非可靠的(即不保证对方能够收到正确的数据),信息传递的可靠性由传输层中的TCP来保...
    金炎金阅读 161评论 0 0