linux 内核定时器精度_tcp所有定时器

本文详细探讨了TCP协议中的各种定时器,包括建立连接定时器、重传定时器(RTO)、坚持定时器(persist timer)、延迟定时器(Delayed ACK)、保活定时器(Keep Alive)、FIN_WAIT_2定时器和TIME_WAIT定时器。分析了在不同情况下可能出现的超时问题,提供了实验验证和解决方法,强调了超时在TCP连接管理和可靠性中的关键作用。
摘要由CSDN通过智能技术生成

tcp协议中所有定时器。超时一词在软件领域用途非常广泛,是解决的很多问题利器。TCP设计精髓在于他自我管理的状态机,而要想状态机正常运行,超时必不可少,如connect flood攻击。

建立连接定时器

开始

TCP属于可靠连接,需要经历三次握手。

62b83ee7ff1c87abfc022181073969cc.png

如上图所示,主要分为以下过程:

  • 第一步:服务器准备好接受外来的连接。通常通过调用socket、bind和listen三个函数来完成,称之为被动打开(passive open)
  • 第二步:客户端通过connect发起主动连接(active open)。导致客户端TCP发送一个SYN同步分节。一般SYN分节不携带数据,其所在的IP数据报只包含一个IP首部、一个TCP首部以及TCP选项(最为常见的是MSS分节,在这里并没有画出)
  • 第三步:服务器确认客户的SYN,同时自己也发送一个SYN分节。服务器在单个分节中发送SYN和对客户端SYN的ACK确认。此时客户端已经处于ESTABLISHED状态
  • 第四步:客户端必须确认服务端的SYN分节。确认成功,此时服务端也进入ESTABLISHED状态。

思考:在握手过程中如果有一方因为网络抖动或者中间路由丢弃,导致不能及时给对方回复,此时怎么办呢?

下图为正常的tcp三次握手抓包图

e599efd8d4907912064eca58d53ff8ad.png

其中No对应列表的序号.

环境查看

ae776ef8cf751c99eed7aadb8cab5674.png

结果分析

在这里有可能会出现两种情况超时

  1. 第一种:当TCP客户端发出请求没有收到SYN分节响应时,则会返回ETIMEOUT。即,调用connect函数时,内核会发送一个SYN分节,若无响应则等待6s再发送一个,若仍无响应则等待24s再发送一个。若总共等待75s(4.4BSD规定75s)后仍未收到响应则返回本错误。注意,不同系统对时间值的设置不相同。
  2. 第二种:当客户发出的SYN在中间的某个路由器上引发“destination unreachable”(目的地不可达)的ICMP错误时,则认为是一种软错误,不会终止。客户主机内核会保存该消息,并按照上述第一种情况来间接性继续发送SYN。在某个规定的时间(4.4BSD规定75s)后仍未收到响应,则把保存的消息(即ICMP错误)作为EHOSTUNREACH或ENETUNREACH错误返回给进程。

实验验证

  1. 系统:centos6.5
  2. 命令
1
2
3
  1. 实验结果

b2aad71934347bb4b1247c5dea8b7479.png
总时间为63s,这个时间还是难以忍受的,想想如果一个食堂因为你一个人等了1分多钟,估计你会被打shi
  • 抓包: tcpdump -i lo ‘tcp[tcpflags] = tcp-syn’

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值