博客
关于我
TCP 七种定时器
阅读量:735 次
发布时间:2019-03-21

本文共 1163 字,大约阅读时间需要 3 分钟。

TCP中的七种定时器

在TCP协议中,定时器是实现TCP流量控制、错误检测和连接管理的关键机制。以下是TCP中常见的七种定时器及其功能。

1. 建立连接定时器(Connection-establishment timer)

这个定时器用于管理建立TCP连接的过程。TCP连接通常通过三次握手完成,建立连接定时器在发送SYN包时启动,通常设置为3秒。若SYN包丢失,经过3秒后会重新发送SYN包。接收方在接收SYN包后会启动其自己的SYN-ACK定时器。此外,/proc/sys/net/ipv4/tcp_syn_retries可以设置SYN包重传次数。

2. 重传定时器(Retransmission timer)

重传定时器用于处理未确认的数据包。当发送的数据包没有收到 ACK 应答时,重传定时器会触发,重新发送数据包。其工作原则包括:

  • 在发送前置一个数据包启动重传定时器;
  • 若发送队列为空,则停止定时器;
  • 定时器超时后,重新发送数据包最前端的报文段;
  • 若多个报文段累计确认,则批量处理。

3. 延迟应答定时器(Delayed ACK timer)

延迟应答定时器用于在接收数据时,延迟发送 ACK 应答,以便与后续的数据包一起发送,减少数据包的传输次数。这通常设置为200毫秒,以优化网络效率。

4. 坚持定时器(Persist timer)

坚持定时器用于处理发送方无法立即得到窗口更新的情况。当接收方的窗口变为非零时,会发送窗口更新通知。但若该通知丢失,坚持定时器会启动,发送窗口探查包以发现窗口变化。这些探查包称为窗口探查。

5. 保活定时器(Keepalive timer)

保活定时器的作用是检测连接是否仍然活跃。一旦设置,若在明确的时间间隔内没有数据交换(默认为2小时),就会发送探测包以验证对端是否存活。常用于防止长时间空闲的连接被废止,但其超时时间通常较长,建议在需要心跳机制时手动配置。

6. FIN_WAIT_2定时器(FIN_WAIT_2 timer)

在主动关闭连接的一方完成发送FIN包并接收ACK后,进入FIN_WAIT_2状态,等待被动关闭方发送终止连接请求。如果当期内未收到,被动关闭方的FIN丢失,FIN_WAIT_2定时器将触发协议处理,以划分资源或断开连接。此定时器可通过/proc/sys/net/ipv4/tcp_fin_timeout设置。

7. TIME_WAIT定时器(TIME_WAIT timer, 也叫2MSL timer)

TIME_WAIT是连接终止过程中的最后一个状态,确保重发最后的ACK或 FIN 包不会被丢失。它等待的时间为两倍最大段生存时间(2MSL),以保证任何迟到的数据包在新的连接中不会被处理。这个时间内,相同IP地址、端口对的新连接不会被建立。

转载地址:http://ukhgz.baihongyu.com/

你可能感兴趣的文章
Mysql学习总结(58)——深入理解Mysql的四种隔离级别
查看>>
Mysql学习总结(59)——数据库分库分表策略总结
查看>>
Mysql学习总结(5)——MySql常用函数大全讲解
查看>>
Mysql学习总结(60)——并发量大、数据量大的互联网业务数据库设计规范总结
查看>>
Mysql学习总结(61)——MySQL优化之DBA级优化整理汇总
查看>>
Mysql学习总结(62)——MySQL连接com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link问题
查看>>
Mysql学习总结(63)——Mysql数据库架构方案选择与分析
查看>>
Mysql学习总结(64)——Mysql配置文件my.cnf各项参数解读
查看>>
Mysql学习总结(65)——项目实战中常用SQL实践总结
查看>>
Mysql学习总结(66)——设置MYSQL数据库编码为UTF-8
查看>>
Mysql学习总结(67)——MYSQL慢查询日志
查看>>
Mysql学习总结(68)——MYSQL统计每天、每周、每月、每年数据 SQL 总结
查看>>
Mysql学习总结(69)——Mysql EXPLAIN 命令使用总结
查看>>
Mysql学习总结(6)——MySql之ALTER命令用法详细解读
查看>>
Mysql学习总结(70)——MySQL 优化实施方案
查看>>
Mysql学习总结(71)——MySQL 重复记录查询与删除总结
查看>>
Mysql学习总结(71)——数据库介绍(MySQL安装 体系结构、基本管理)再回顾
查看>>
Mysql学习总结(72)——MySQL 开发者开发,设计规范再总结
查看>>
Mysql学习总结(73)——MySQL 查询A表存在B表不存在的数据SQL总结
查看>>
Mysql学习总结(74)——慢SQL!压垮团队的最后一根稻草!
查看>>