在TCP的学习中有三个必须要的定时器需进行总结,分别为超时重传定时器、坚持定时器、TIME_WAIT定时器。下文就会介绍着三个定时的作用以及必要性。
超时重传定时器:
在公网里发送端每发一个包都会经过N个路由器才能到达接收端,在这个流程里如果有一个路由器在处理这个包的时候发生故障了或者超过该路由器包数的处理能力的,该包就会丢失。为了保障包能够顺利地到达接收端,发送端如果在发送了包后在指定的超时时间内没有收到对方的ACK就要触发重传的机制。
坚持定时器:
坚持定时器是建立在当接收端的接收缓存从满了到未满所触发的ACK由于某些原因发送不到给发送端,这就会导致死锁(这种情形在公网上还是会出现的),因此当发送端知道了接收端的接收窗口已经为0了,就会维护一个坚持定时器去定时地问接收端是否有空间接收数据,有的话我就发了。
TIME_WAIT定时器:
TIME_WAIT定时器的存在是为了确保连接双方能够正常地关闭连接,这里TIME_WAIT的时间一般定义为2MSL原因是这样子的,发送一个包到对端一般我们定义为1MSL,所以一来一回就是2MSL。由于网络存在不稳定的因素且在后续的关闭操作中也不会有定时器的参与,所以主动关闭端会保守给它一次重传的机会。