上一节讲了数据收发的大概过程,实际上网络的错误检测和补偿机制非常复杂,这一节讲三个关键点。
一、返回ACK号的等待时间
返回ACK号的等待时间叫超时时间。
当网络传输繁忙时ACK号的返回会变慢,这时就要将等待时间设置得长一点,不然可能已经重传了,ACK号才到达。这样的重传是多余的,虽然有序号在并不影响接收方对数据完整性的判断和组合,但因为ACK返回变慢源于网络堵塞,如果此时再出现很多多余的重传,对于网络来说无疑是雪上加霜。
但等待时间也不是越长越好,如果等待时间过长,真正需要重传的情况下就会出现很大的延迟,给人的体验就是网速变慢。
所以,返回ACK号的等待时间不能太长也不能太短。
一个合适的等待时间不能是一个固定的值,因为根据物理服务器的远近,ACK号的返回时间也会产生很大的波动。比如,在小型局域网内,几毫秒就可以返回ACK号,但如果在互联网环境中,返回ACK号可能需要几十毫秒到几百毫秒不等。
因此,TCP采用了动态调整等待时间的方法,这个等待时间是根据ACK号返回所需的时间来判断的。
具体来说,TCP会在发送数据的过程中持续测量ACK号的返回时间,如果慢,就延长;如果快,就缩短。