TCP定时器

Posted Luella_G

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TCP定时器相关的知识,希望对你有一定的参考价值。

TCP定时器

TCP 通过在发送时设置一个定时器来解决数据传输问题。如果当定时器溢出时还没收到确认,它就会重传该数据。关键在于超时和重传策略,即怎样决定超时的时间间隔和如何确定重传的频率。
在TCP中,常见的定时器有四种:重传定时器、坚持定时器、保活定时器、2MSL定时器。这四个定时器都有各自的具体作用。
重传定时器
TCP是可靠的,因此,它对于发出去的信息,没有得到正常ACK反馈的,都会启动一个重传机制。这个重传机制使用一个重传定时器,当发现在规定时间内,没有收到ACK,那么,重新发送消息,如果还没有收到ACK,继续重新发送消息...当然,这每次继续重新发送消息的时间间隔是不一样的。一般默认,第一次重传是发现超时后1s,第二次重传是第一次重传后3s,第三次是6s...
坚持定时器
坚持定时器是使用在一方滑动窗口为0之后,另外一方停止传输数据,进入坚持定时器的轮询,直到滑动窗口不再为0了。
保活定时器
这个就是我们经常说的tcp的keepalive了。实际使用场景是在应用层没有数据进行传输的时候,一定时间(tcp_keepalive_time,默认每2个小时)发送一次保持心跳的包,如果发送成功,则继续保持端口活跃,如果没有正常返回,则在指定次数内(tcp_keepalive_probes,默认是9次),指定间隔(tcp_keepalive_intvl,默认是17s)发送心跳包。如果最后都没有获得正常的ACK,那么才算连接失败。
当然,tcp是否需要提供keepalive机制,是有争议的,我们可以为每个tcp连接设置是否启用keepalive和启用keepalive的各个指标设置。
2MSL定时器
这个定时器用在TCP四次挥手之后,主动发起TCP断开的一方需要保持2MSL的TIME_WAIT的状态。这个保持的一方就会开启2MSL定时器来计算TIME_WAIT的状态保持时间。

以上是关于TCP定时器的主要内容,如果未能解决你的问题,请参考以下文章

TCP 的保活定时器

TCP的几个知识点

网络协议及tcp协议详解(超清楚的大图,难得还解释了会话层和表示层。服务端有一个保活计时器,时间通常是设置为2小时。发送一个探测报文段,以后每隔75秒钟发送一次,一连发送10个探测报文)

JAVA 定时器时间格式

定时任务之cron

定时任务框架-quartz 时间配置