【网络】TCP的可靠机制!!
TCP的可靠机制
-
确认应答ACK
TCP将每一个要发送的数据进行编号,每一份发送的数据接收方就会应答确认序号。回应的序号用于告诉接收者已经接收到的数据。 -
超时重传
如果在发送数据的时候发生丢包现象,那么发送方就不会收到接收方的ACK应答,那么在TCP里面就会在隔一定的时间就会重新发送数据。
存在的问题- 一担发生发送方无法接收到ACK应答的时候,在接收方就会出现很多重复的数据,TCP需要能够识别出来重复的数据并且将重复的数据进行丢弃(TCP将数据进行编号,这样就可以将相同编号的数据只保留一份)
- 如果重传时间太长就会影响整体的传输效率
- 如果重传时间太短那么就会频繁发送相同的数据
-
滑动窗口
如果在发送数据的时候一次发送一次应答,那么就会使效率很低,尤其是网络状态不佳的时候。
滑动窗口是指发送数据发送数据条数不需要确认的最大值。这样可以在连续的时间内连续发送数据,以此提高效率。
如果滑动窗口发生丢包
1. 数据到达接收端,但是丢失部分ACK应答
这种情况下丢失部分ACK不要紧,因为在后面的应答可以确定前面的数据报已经到达接收端
2. 如果数据报没有到达接收端,而是直接在发送的过程中直接丢失
在部分数据发生丢包的时候,在接收端发送确认应答的时候就会连续发送回来没有接收到的数据的序号。如果在整个滑动窗口的大小范围内连续发送的是同一个数据的序号,那么下一次发送的就是相应的数据的序号。
流量控制
在传送数据的双方,发送方和接收方的数据接收能力是有限的,TCP协议通过使用首部里面的窗口大小来确定接收端的接受能力。
- 窗口大小用来反映接收端的缓冲区的可用大小
- 在接收端对发送端应答的时候将自己的窗口大小通过应答报文里面的数值反馈给发送方,以此来控制发送方的发送速度
- 窗口大小字段越大,说明网络吞吐量越大
- 实际窗口大小=窗口字段的值向左移动M位得到的数值(M为选项里面的窗口扩展字段)
拥塞控制
TCP引入慢启动机制来控制网络的阻塞状态
延迟应答
当接收端的数据处理能力很快的时候,那么应答返回的窗口大小就会小于实际的窗口大小,这样就会造成一种接收端的资源浪费。
TCP使用延迟应答的方式,隔一定的时间进行应答一次,同时每隔一定的包应答一次。
- 数量限制:每隔N个包应答一次
- 时间限制:超过最大的时间限制进行应答一次
捎带应答
在客户端和服务器端发送和接受数据都是“一发一收”的形式,那么在客户端发送给服务器时,服务器需要向客户端回应,那么这个时候就可以从ACK回应报文里面发送数据。
这要就可以捎带的将服务器需要向客户端发送的数据一并发送给客户端。