1.重传定时器:
A给B发送数据,A没有收到B的确认包(ACK),通常使用在弱网环境中(隧道、偏远地区)
2.坚持定时器
A调用close,发送FIN,而FIN在传输的过程中丢失了,此时,A在等B返回ACK,B在等待A发送数据,双方陷入一个相互等待的状态。
3.保活定时器
保证tcp连接鲜活(keepalive)
setopt可以设置
当然keepalive可以通过两种方式:
- 应用层发送心跳包:可以多次探测,多给几次机会(在弱网环境中是经常会出现丢包)
- tcp协议栈设置,它的缺陷是:一旦心跳包没有响应,就会释放tcp连接,应用层无法控制
4.TIME_WAIT
tcp四次挥手中,A调用close,发送FIN,B被动调用close,发送FIN,当A接收到B发送的的FIN的时候
TIME_WAIT是用来防止最后一次ACK的丢失