TCP如何保证传输可靠?

TCP保证数据传输可靠性的方式主要有:

校验和

计算方式:在数据传输的过程中,将发送的数据段都当作一个16位的整数,将这些整数加起来,并且前面的进位不能丢,补在后面,最后取反,得到校验和。

发送方:在发送数据之前计算校验和,并进行校验和的填充,

接收方:收到数据后,对数据以同样的方式进行计算。如果接收方比对校验和与发送方不一致,那么就一定传输有误,如果一致,数据也不一定会传输成功。

确认应答和序列号

序列号:TCP在传输时对每个字节都进行了编号,这就是序列号。

TCP接收方在每次收到数据的时候都会给发送方进行确认应答,也就是发送ACK确认报文,这个报文中带有确认应答序号,告诉发送方接收到了哪些数据,这样下次传输的时候,从哪里接着发数据。

超时重传

由于确认应答机制和序列号机制,发送方在发送完一部分数据之后,会等待接收方的ACK报文,判断是否发送成功,如果发送方发送完数据之后,迟迟没有收到ACK确认报文,就会引入一个新的机制叫超时重传机制。

当然,没有收到响应的ACK报文有两个原因:

1.数据在传输过程中由于网络原因全体丢包,接收方根本没有接收到数据

2.接收方接收到了响应的数据,但是发送的ACK报文由于网络问题丢包了。

超时重传机制就是如果发送方没有收到接收方的ACK报文,在等一定的时间之后就会对刚才的数据进行重新发送,如果时由于发送的数据没有到达接收方,那么接收方收到这个重发的数据之后,就会进行ACK应答,如果已经存在数据,通过序列号进行判断数据是否存在,那么就直接丢弃,仍旧发送ACK应答。

连接管理

就是指三次握手和四次挥手。

流量控制

流量控制就是让发送速率不要过快,让接收方可以来得及接收,利用滑动窗口机制可以实施流量控制。原理是运用TCP报文段中的窗口大小字段来控制,发送方的发送窗口不可以大于接收方的发回的窗口大小。如果接收方没有足够的缓存使用,就会发送零窗口大小的报文,这时发送方将发送窗口设置为0。停止发送数据,等之后接收方有足够的缓存时,发送非零窗口大小的报文,而此时这个报文在中途丢失,那发送方的发送窗口就一直为零导致死锁。

解决的办法就是,TCP为每一个连接设置一个持续计时器,只要TCP的一方收到对方的零窗口通知,就启动改计时器,周期性的发送一个零窗口探测报文段,对方就在确认这个报文段的时候给出现在的窗口大小。

拥塞控制

包括四部分 慢启动 拥塞避免 快重传 快恢复

发布了27 篇原创文章 · 获赞 8 · 访问量 2129

猜你喜欢

转载自blog.csdn.net/hgxy123/article/details/100638198