TCP的四种定时器

一、重传计时器

  TCP提供可靠机制,因此对于丢失的报文需要进行重传!

  那么,发送一个数据出去之后,什么时候进行重传呢?用到了重传定时器.

  在发送数据后,便立刻创建一个该报文段的重传定时器.

  如果定时器还没结束,收到了确认报文,则撤销该定时器.

  如果定时器结束,还没收到确认报文,则进行重发.

  定时器时间为动态计算的,常见公式新RTT=旧RTT的90%+当前RTT*10%

二、坚持计时器

  接受方窗口为0,则发送端会停止发送,直至收到接受方窗口不为0的通告.

  但是,如果接受方窗口不为0的通告丢失了,则会产生死锁!!!!

  接受方等发送方发送数据,发送方等接受方发送窗口不为0的通告(窗口不为1的通告报文丢失).......

  因此,需要一个计时器来解决这个问题.

  当接受方窗口为0,发送方激活该计时器,如果计时器结束,还没收到接受方窗口不为0的通告.

  此时,发送方会向接受方发送探测报文.如果接受方窗口依然为0,则计时器的值加倍复位,直到计时器的值达到一个阙值.

  如果接受方窗口不为0,则继续传输数据...

三、保活计时器

  每次服务器收到客户端数据时,重置保活定时器,

  如果保活定时器为0,则发送探测报文段,若发送10个报文段还是没有响应,则终止链接.

四、时间等待计时器

  当断开连接后,主动断开的一方会进入TIME_WAIT状态,防止一些超时、游离报文、重复的FIN报文被丢弃。

时间: 2024-10-12 10:41:33

TCP的四种定时器的相关文章

TCP协议中的四种定时器

TCP四种定时器 重传计时器.坚持计时器.保活计时器.时间等待计时器 重传计时器: 在TCP发送报文时创建,用来确认报文是否成功发送,超过预定时间,则重新发送,设置重传计时器之后,通常有两种情况: 1.在计时器截止时间到达之前收到了对以发送报文的确认信号,则撤销此计数器: 2.计时器时间到达仍未收到确认信号,则重新发送该报文,并将计时器复位. 坚持计时器: 这种计时器通常是和窗口大小有关的. 先考虑这样一种场景:发送端由于发送速度太快,接收端的窗口大小为零,这是接收段就会发送信号告诉发送端,我现

《网络协议》TCP 四种定时器

TCP 是提供可靠的传输层,它使用的方法之一就是确认从另一端收到的数据.但是数据和确认都可能会丢失.TCP 通过在发送时设置一个定时器来解决这个问题.如果当定时器溢出时还没收到确认,它就会重传该数据.关键在于超时和重传策略,即怎样决定超时的时间间隔和如何确定重传的频率. 对于每个连接,TCP 管理着四个不同的定时器:重传定时器.坚持定时器.保活定时器 以及  2MSL 定时器. 重传定时器 为了防止丢失数据报文段或确认报文段,当 TCP 发送报文段时,启动了特定报文段的重传计时器,若在计时器超时

Node.js-提供了四种形式的定时器

1 Node.js提供了四种形式的定时器 2 global.setTimeout(); //一次性定时器 3 global.setInterval(); //周期性定时器 4 global.nextTick(); //本次事件循环结束时立即执行的定时器 5 global.setImmediate(); //下次事件循环立即执行的定时器 6 7 var i=1; 8 setTimeout(()=>{ 9 console.log(i); 10 },1000); 11 12 //1秒之后,打印出0,1

java中定时器的四种方法

1 package com.lid; 2 3 import java.util.Calendar; 4 import java.util.Date; 5 import java.util.Timer; 6 import java.util.TimerTask; 7 8 public class Test { 9 public static void main(String[] args) { 10 //timer1(); 11 timer2(); 12 //timer3(); 13 //time

TCP/IP之坚持定时器、报活定时器

TCP中的四个定时器: 1.超时定时器(最复杂的一个) 2.坚持定时器 3.保活定时器 4.2MSL定时器 坚持定时器用于防止通告窗口为0以后c/s双方相互等待死锁的情况:而保活定时器则用于处理半开发连接: 一. 坚持定时器 坚持定时器的原理是简单的,当TCP服务器收到了客户端的0滑动窗口报文的时候,就启动一个定时器来计时,并在定时器溢出的时候向向客户端查询窗口是否已经增大,如果得到非零的窗口就重新开始发送数据,如果得到0窗口就再开一个新的定时器准备下一次查询.通过观察可以得知,TCP的坚持定时

iOS开发--四种多线程技术方案

iOS 多线程的四种技术方案 image pthread 实现多线程操作 代码实现: void * run(void *param) { for (NSInteger i = 0; i < 1000; i++) { NSLog(@"---buttonclick---%zd---%@", i, [NSThread currentThread]); } return NULL; } @implementation ViewController - (IBAction)clickBut

[docker]docker的四种网络方式

声明: 本博客欢迎转发,但请保留原作者信息! 博客地址:http://blog.csdn.net/halcyonbaby 内容系本人学习.研究和总结,如有雷同,实属荣幸! bridge方式(默认) Host IP为186.100.8.117, 容器网络为172.17.0.0/16下边我们看下docker所提供的四种网络:创建容器:(由于是默认设置,这里没指定网络--net="bridge".另外可以看到容器内创建了eth0) [[email protected] ~]# docker

【网络协议】TCP中的四大定时器

前言 对于每个TCP连接,TCP一般要管理4个不同的定时器:重传定时器.坚持定时器.保活定时器.2MSL定时器. 重传定时器 非常明显重传定时器是用来计算TCP报文段的超时重传时间的(至于超时重传时间的确定,这里涉及到一大堆的算法,书上有说,我这里不细谈了).每发送一个报文段就会启动重传定时器,假设在定时器时间到后还没收到对该报文段的确认,就重传该报文段,并将重传定时器复位,又一次计算:假设在规定时间内收到了对该报文段的确认,则撤销该报文段的重传定时器. 坚持定时器 上篇文章中已经提到了,主要是

robot framework接口测试之二-四种常见的POST提交数据方式

写接口测试用例时,遇到以json格式提交数据时,报错,Request如下图: Response如下图: 改成form格式提交,可以正常运行,如下图: 代码如下: ------------------------------------------------------------------------------------------------ POST一般用来向服务端提交数据,有四种提交数据的格式,分别是: 1.application/x-www-form-urlencoded 2.a