工控网首页
>

新闻中心

>

业界动态

>

宇泰叭叭冷知识--TCP的定时器

宇泰叭叭冷知识--TCP的定时器

TCP提供可靠的端到端数据传输的时候,保证端到端的方法之一就是确认从另一端收到的数据。但是数据和ACK在传输的过程中会有丢失的可能性,因此TCP通过在发送时设置一个定时器来解决这种问题。这期我们就来说说关于TCP的定时器的几种类型以及它们的作用。

image.png

TCP的定时器可以分为七个类别:

  • 建立连接定时器(connection-establishment timer)

  • 重传定时器(retransmission timer)

  • 延迟应答定时器(delayed ACK timer)

  • 坚持定时器(persist timer)

  • 保活定时器(keepalive timer)

  • FIN_WAIT_2定时器(FIN_WAIT_2 timer)

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

建立连接定时器

建立连接定时器:顾名思义,这个定时器是在建立连接的时候使用的。建立连接的过程中,在发送SYN时,会启动一个定时器(默认应该是3秒),如果SYN包丢失了,那么3秒以后会重新发送SYN包的(当然还会启动一个新的定时器,设置成6秒超时),当然也不会一直没完没了的发SYN包,可以自行设置到底要重新发送几次SYN包。

重传定时器

重传定时器在TCP发送数据时设定,在计时器超时后没有收到返回的确认ACK,发送端就会重新发送队列中需要重传的报文段。使用RTO重传计时器一般有如下规则:

1.当TCP发送了位于发送队列最前端的报文段后就启动这个RTO计时器;

如果队列为空则停止计时器,否则重启计时器;当计时器超时后,TCP会重传发送队列最前端的报文段;

2.当一个或者多个报文段被累计确认后,这个或者这些报文段会被清除出队列

重传计时器保证了接收端能够接收到丢失的报文段,继而保证了接收端交付给接收进程的数据始终的有序完整的。因为接收端永远不会把一个失序不完整的报文段交付给接收进程。

延迟应答定时器

延迟应答也被称为捎带ACK,这个定时器是在延迟应答的时候使用的。为什么要延迟应答呢?延迟应答是为了提高网络传输的效率。

举例说明,比如服务端收到客户端的数据后,不是立刻回ACK给客户端,而是等一段时间(一般最大200ms),这样如果服务端要是有数据需要发给客户端,那么这个ACK就和服务端的数据一起发给客户端了,这样比立即回给客户端一个ACK节省了一个数据包。

坚持定时器

我们知道TCP通过让接收方指明希望从发送方接收的数据字节数(即窗口大小)来进行流量控制。如果窗口大小为0会发生什么情况呢?这将有效地阻止发送方传送数据,直到窗口变为非0为止。接收端窗口变为非0后,就会发送一个确认ACK指明需要的报文段序号以及窗口大小。

如果这个确认ACK丢失了,则双方就有可能因为等待对方而使连接终止:接收方等待接收数据(因为它已经向发送方通告了一个非0的窗口),而发送方在等待允许它继续发送数据的窗口更新。为防止这种死锁情况的发生,发送方使用一个坚持定时器 (persist timer)来周期性地向接收方查询,以便发现窗口是否已增大。这些从发送方发出的报文段称为窗口探查 (window probe)。

保活定时器

在TCP连接建立的时候指定了SO_KEEPALIVE,保活定时器才会生效。如果客户端和服务端长时间没有数据交互,那么需要保活定时器来判断是否对端还活着,但是这个其实很不实用,因为默认是2小时没有数据交互才探测,时间实在是太长了。如果你真的要确认对端是否活着, 那么应该自己实现心跳包,而不是依赖于这个保活定时器。

image.png

审核编辑(
柳威
)
投诉建议

提交

查看更多评论
其他资讯

查看更多

宇泰交换机知识锦囊

【重要】向所有人安利“TA”

展会回顾|科技赋能制造业 加速拥抱数字化

【喜报】斩获2023“年度新锐企业”奖项

工业物联网为什么对制造业那么重要