TCP协议探究(四):定时器
1 概述
- 重传定时器:使用于当希望收到另一端的确认。
- 坚持(persist)定时器:使窗口大小信息保持不断流动,即使另一端关闭了其接收窗口
- 保活(keepalive)定时器:用于检测一个空闲连接的另一端何时崩溃或重启。
- 2MSL定时器:测量一个连接处于TIME_WAIT状态的时间。
2 重传定时器
- 目的:提高TCP可靠性,确保对方收到,并返回ACK。
- 作用:重新发送丢失的包
- 重传时机:超时时间(RTO)
- RTO值:RTO不能是固定值,需要参考往返时间(RTT)
- 计算算法:经典算法(SRTT算法)、 Karn / Partridge 算法(SRTT优化算法)、Jacobson / Karels 算法(SRTT改良算法)
3 坚持定时器
- 目的:滑动窗口为0时,Sender将停止发送数据给Receiver。但是Sender需要知道Receiver何时才可以接受新的消息(窗口探测技术)。
- 作用:Sender轮询问Receiver的滑动窗口大小(零窗口通知),从而决定发送消息或关闭连接。
- 补充:Receiver可以不回复Sender自己的滑动窗口大小,这样Sender就会重传该报文。
4 保活定时器
- 目的:在两个TCP连接间出现长时间的没有传输数据的情况,判断对方是否还活着
- 作用:一般为每2个小时去询问对方是否还活着
- 情况:
- 客户主机正常运行且可达:保活定时器复位。
- 客户主机崩溃:保活探测没有响应,75秒后超时重试,一般重试10次,最后都没有响应则关闭连接。
- 客户主机崩溃并重新启动:这时服务器将收到一个对其保活探查的响应,但是这个响应是一个复位,使得服务器终止这个连接。
- 客户主机正常运行但不可达:同第二种情况
5 2MSL定时器
- 目的:确保对端有足够的时间收到ACK,并把TCP状态从TIME_WAIT => CLOSED
- 作用:主动关闭连接时,需要发送完ACK,并对端收到ACK时,才算结束。但是可能网络原因导致,对方没有收到ACK,所以对方需要重新发送FIN报文,这边则发送ACK报文。2 * MSL是为了保证对端能够有足够时间发送两个FIN报文。
- MSL值(TCP段的最大存活时间):需要参考TTL时间(IP数据报的存活时间),大于等于TTL即可。
6 补充
- RTT(往返时间):采样值,一般实时计算,比较严格
- TTL(IP报文存活时间):固定值
- MSL(TCP段的最大存活时间):固定值,MSL >= TTL
7 参考资料
- 《TCP/IP协议卷一》
- https://www.cnblogs.com/Rex7/p/4752573.html
- https://blog.csdn.net/hyman_yx/article/details/52086389
- https://www.cnblogs.com/mfrbuaa/p/3861493.html
- https://www.cnblogs.com/yjf512/p/5659316.html
TCP协议探究(四):定时器的更多相关文章
- TCP协议探究(一):报文格式与连接建立终止
一 TCP:传输控制协议报文格式 1 TCP服务 提供面向连接.可靠的字节流服务 面向连接意味着两方通信,不支持多播和广播 可靠性的支持: 应用数据被分割成TCP认为最适合发送的数据块.由TCP传递给 ...
- TCP协议探究(二):超时与重试
1 概述 TCP提供可靠的运输层. 可靠性保证之一:确认从另一端收到的数据. 但数据和确认都有可能会丢失.TCP通过在发送时设置一个定时器来解决这种问题. 如果当定时器溢出时还没有收到确认,它就重传该 ...
- TCP协议探究(三):RTT、滑动窗口和阻塞处理
1 RTT算法 1.1 概述 上一节说了重传机制需要设置一个重传超时值(RTO,Retransmission TimeOut),RTO设长了,重发太慢:设短了,可能导致包没有丢,就重发了,可能导致雪崩 ...
- TCP协议详解7层和4层解析(美团,阿里) 尤其是三次握手,四次挥手 具体发送的报文和状态都要掌握
如果想了解HTTP的协议结构,原理,post,get的区别(阿里面试题目),请参考:HTTP协议 结构,get post 区别(阿里面试) 这里有个大白话的解说,可以参考:TCP/IP协议三次握手和四 ...
- TCP协议的三次握手和四次挥手过程
TCP是一种面向连接(连接导向)的.可靠的基于字节流的传输层通信协议.TCP将用户数据打包成报文段,它发送后启动一个定时器,另一端收到的数据进行确认.对失序的数据重新排序.丢弃重复数据. 1.TCP/ ...
- 具体解释TCP协议的服务特点以及连接建立与终止的过程(俗称三次握手四次挥手)
转载请附本文的链接地址:http://blog.csdn.net/sahadev_/article/details/50780825 ,谢谢. tcp/ip技术经常会在我们面试的时候出现,非常多公司也 ...
- TCP协议--TCP三次握手和四次挥手
TCP三次握手和四次挥手 TCP有6种标示:SYN(建立联机) ACK(确认) PSH(传送) FIN(结束) RST(重置) URG(紧急) 一.TCP三次握手 第一次握手 客户端向服务器发出连 ...
- TCP协议的三次握手和四次挥手
暂时需要的信息有: ACK : TCP协议规定,只有ACK=1时有效,也规定连接建立后所有发送的报文的ACK必须为1 SYN(SYNchronization) : 在连接建立时用来同步序号.当SYN= ...
- TCP协议三次握手和四次挥手
http://www.cnblogs.com/rootq/articles/1377355.html TCP(Transmission Control Protocol) 传输控制协议 TCP是主机对 ...
随机推荐
- sql语句 基本
1.sql不区分大小写,一般结尾要加分号: 2.select 列,列,列 from 表 3.distinct ,返回列中不同的值.需要哪个列不同,关键词哪个列 4.where子句,select 列 f ...
- Airbnb架构要点分享——阅读心得
目前,Airbnb已经使用了大约5000个AWS EC2实例,其中大约1500个实例用于部署其应用程序中面向Web的部分,其余的3500个实例用于各种分析和机器学习算法.而且,随着Airbnb的发展, ...
- 关于springboot访问html页面讨论
一.springboot项目无法直接访问static和templates文件夹html Spring Boot 默认将 /** 所有访问映射到以下目录: classpath:/static class ...
- Linux命令:hexdump
hexdump是Linux下的一个二进制文件查看工具,它可以将二进制文件转换为ASCII.八进制.十进制.十六进制格式进行查看. 指令所在路径:/usr/bin/hexdump 命令语法: hexdu ...
- 进程 | 线程 | 当Linux多线程遭遇Linux多进程
背景 本文并不是介绍Linux多进程多线程编程的科普文,如果希望系统学习Linux编程,可以看[<Unix环境高级编程>第3版] 本文是描述多进程多线程编程中遇到过的一个坑,并从内核角度分 ...
- The problem is now the wait_for_fds() example function: it will call something like select(), poll() or the more modern epoll() and kqueue().
小结: 1.线程与惊群效应 Serializing accept(), AKA Thundering Herd, AKA the Zeeg Problem — uWSGI 2.0 documentat ...
- linux rtc中废弃的接口和新的接口
1. 废弃的接口 rtc_tm_to_time 2. 替换废弃接口的新接口 rtc_tm_sub
- RabbitMQ简单Java示例——生产者和消费者
添加Maven依赖: 使用rabbitmq-client的最新Maven坐标: <!-- https://mvnrepository.com/artifact/com.rabbitmq/amqp ...
- Course1_Week1_ProgrammingHomeWork
Exercise 1: Pascal's Triangle The following pattern of numbers is called Pascal's triangle. 1 1 1 1 ...
- 一个老程序员PHP程序员说的话(用来提醒自己)
我,一个老程序员,也是一个学生,把玩过甚多语言,大多不精.我既非名牌学校,也不是高学历,仅代表一部分比较蛋疼的人.接触PHP也是很早了,从04年的OFSTAR开始的,到现在六年了,期间也接触过不少的语 ...