s6-9 TCP 定时器】的更多相关文章

TCP 定时器管理  重传定时器(retransmission timer,Positive ackn. with retransmit) 最重要的定时器 TCP 定时器管理  持续定时器(persistence timer),用来避免如下的死锁( deadlock )发生 接收方发送了一个窗口数为零的确认(窗口更新),告诉发送方等待. 稍后,接收方空出了缓冲,发送更新窗口的数据段,但是,很不幸,该分组丢失啦! 现在,收发双方都在等待对方发送数据段过来,但永远等不到! 死锁产生. 怎样防止死…
http://network.51cto.com/art/201412/459352.htm TCP 是提供可靠的传输层,它使用的方法之一就是确认从另一端收到的数据.但是数据和确认都可能会丢失.TCP 通过在发送时设置一个定时器来解决这个问题.如果当定时器溢出时还没收到确认,它就会重传该数据.关键在于超时和重传策略,即怎样决定超时的时间间隔和如何确定重传的频率. 对于每个连接,TCP 管理着四个不同的定时器:重传定时器.坚持定时器.保活定时器 以及 2MSL 定时器. 重传定时器(2*RT) 为…
前言 在有关TCP的章节中,介绍了四种定时器,它们体现了TCP的可靠性,其中最重要的 就是重传定时器了,剩下的定时器都是为了解决TCP的理解上的一些问题而设置的. 四种定时器: 2MSL定时器,出现在 TCP连接的建立与终止. 重传定时器,出现在 TCP的超时与重传. 坚持定时器. 保活定时器. 相关随笔: TCP连接的建立与终止 TCP的超时与重传 TCP的坚持定时器 TCP的保活定时器 2MSL定时器 出现:TCP连接的建立与终止 教材P183 四次挥手客户端一共有三次状态:应用程序关闭,发…
当TCP主动关闭一端调用了close()来执行连接的完全关闭时会执行以下流程,本端发送FIN给对端,对端回复ACK,本端进入FIN_WAIT_2状态,此时只有对端发送了FIN,本端才会进入TIME_WAIT状态,为了防止对端不发送关闭连接的FIN包给本端,将会在进入FIN_WAIT_2状态时,设置一个FIN_WAIT_2定时器,如果该连接超过一定时限,则进入CLOSE状态: 注意:上述是针对close调用完全关闭连接的情况,shutdown执行半关闭不会启动FIN_WAIT_2定时器: 启动定时…
在用户进程启用了保活定时器的情况下,如果连接超过空闲时间没有数据交互,则保活定时器超时,向对端发送保活探测包,若(1)收到回复则说明对端工作正常,重置定时器等下下次达到空闲时间:(2) 收到其他回复,则确定对端已重启,关闭连接:(3) 超过探测次数仍未得到回复,则认为对端主机已经崩溃,关闭连接: 启动定时器: 用户进程可以通过socket的SO_KEEPALIVE选项来开启或关闭保活定时器探测,TCP最终会调用tcp_set_keepalive来实现保活定期的开启与关闭: int sock_se…
坚持定时器在接收方通告接收窗口为0,阻止发送端继续发送数据时设定. 由于连接接收端的发送窗口通告不可靠(只有数据才会确认,ACK不会确认),如果一个确认丢失了,双方就有可能因为等待对方而使连接终止:接收放等待接收数据(因为它已经向发送方通过了一个非0窗口),而发送方在等待允许它继续发送数据的窗口更新. 为了防止上面的情况,发送方在接收到0窗口通告后,启动一个坚持定时器来周期的发送1字节的数据,以便发现接收方窗口是否已经增大.这些从发送方发出的报文段称为窗口探测: 下面来分析坚持定时器的实现代码:…
TCP在收到数据段但是无需马上确认时设定,如果在超时时间之内有数据要发送到对端,则确认会随着数据一起发送,即捎带ACK,如果达到超时时间则执行定时器回调立即发送ack: 启动定时器: 延迟确认定时器调用inet_csk_reset_xmit_timer(sk, ICSK_TIME_DACK, xx, xxx)函数进行启动,启动时间点包含以下三个: 1. 建立连接时,客户端的第三次握手可能会被延迟确认,如果有数据要输出.设置了TCP_DEFER_ACCEPT选项或者不在快速确认模式下,则启动延迟确…
注:这部分还没有完全分析透彻,先在此记录,后面回顾的时候再进行补充: 启动定时器: (1) 之前发送的数据段已经得到确认,新发出一个数据段之后设定: (2) 新建连接发送syn之后设定: (3) PMTU探测失败之后设定: (4) 接收方丢弃SACK部分接收的段时设定: 定时器回调函数: 重传定时器超时回调,根据连接控制块中不同的事件类型来分别调用不同的函数进行处理,这里我们只关心ICSK_TIME_RETRANS类型(重传类型),重传细节会继续调用函数tcp_retransmit_timer进…
创建socket时会创建传输控制块,之后调用初始化函数对控制块进行初始化,其中包括对定时器的初始化,tcp会调用tcp_init_xmit_timers函数来初始化这些定时器,本文将详细分析tcp_init_xmit_timers函数: 下面为这种情况的函数调用关系: /** * inet_create * |-->sk->sk_prot->init * |-->tcp_v4_init_sock * |-->tcp_init_sock * |-->tcp_init_xm…
概述 在FIN_WAIT_2收到对端发来的FIN,并回复ACK之后,会进入TIME_WAIT状态,此时添加定时器,定时器超时会将tw控制块从ehash和bhash中删除,并且释放tw控制块: 启动定时器 TIME_WAIT定时器主要通过inet_twsk_schedule函数进行启动: tcp_rcv_state_process函数中,在FIN_WAIT_2状态下,收到对端发来的FIN,并且向对端回复了ACK之后,会调用tcp_time_wait函数进入真正的TIME_WAIT状态,此时会创建T…
当服务器收到新的syn请求,会回复syn+ack给请求端,若某时间内未收到请求端回复的ack,新建连接定时器超时执行回调,重传syn+ack,当超时超过固定次数时,该连接中止:本文主要分析其初始化流程,具体的建立连接和超时重传流程在后续的文章中进行详细讨论: request_sock结构中的rsk_timer成员为新建连接计时器: /* struct request_sock - mini sock to represent a connection request */ struct requ…
上一篇中介绍了TCP数据传输中涉及的一些基本知识点.本文让我们看看TCP中的4种定时器. TCP定时器 对于每个TCP连接,TCP管理4个不同的定时器,下面看看对4种定时器的简单介绍. 重传定时器使用于当希望收到另一端的确认. 该定时器是用来决定超时和重传的. 由于网络环境的易变性,该定时器时间长度肯定不是固定值:该定时器时间长度的设置依据是RTT(Round Trip Time),根据网络环境的变化,TCP会根据这些变化并相应地改变超时时间. 坚持定时器(persist)使窗口大小信息保持不断…
主要内容:TCP定时器概述,超时重传定时器.ER延迟定时器.PTO定时器的实现. 内核版本:3.15.2 我的博客:http://blog.csdn.net/zhangskd Q:一条TCP连接会使用多少个定时器呢? A:目前的答案是9个: 超时重传定时器,持续定时器,ER延迟定时器,PTO定时器,ACK延迟定时器, SYNACK定时器,保活定时器,FIN_WAIT2定时器,TIME_WAIT定时器. 数据结构 几种定时器的标识: #define ICSK_TIME_RETRANS 1 /* R…
转自 http://blog.csdn.net/sjin_1314/article/details/18178329 原文:Characterization and Measurement of TCP Traversal through NATs and Firewalls 原作者:Saikat Guha Paul Francis [摘要]     近些年,标准化社区已经开发出一些UDP穿透NAT/防火墙的技术(也就是,在NAT之后的主机之间建立UDP流).然而,由于TCP连接建立的不对称特点…
1 IP协议简单介绍 就个人而言,网络中,抛开网络安全加密这些,就只单单讨论协议本身,比较难的有三个地方: IP分片与重组 TCP滑动窗口与TCP状态的改变 TCP定时器 其实协议本身根据<TCP/IP详解卷1>理解起来并不难,但是实现起来就很难:数据的操作,标志位的设置,网络状态的变换,中断多线程通讯等等: 在下图的七层网络协议参考模型中,IP层属于网络层,网络层最主要的作用就是:将指定IP的数据报传输到对应的主机. 下图是以太帧封装格式(RFC 894),RFC 894封装格式也是我们最常…
LWIP协议支持用户配置,可以通过用户裁剪实现最优化配置,LWIP默认包含opts.h作为系统默认配置,不过通过添加lwipopts.h文件并包含在opts.h头文件之前就可以对lwip进行用户裁剪,这里给出相关参数的含义,不过具体项目还应该根据实际情况裁剪. #ifndef LWIPOPTS_H #define LWIPOPTS_H //***************************************************************************** /…
标题 s6-1 传输层概述(2019-04-06 21:19) s6-2 UDP(2019-04-07 08:39) s6-3 通信模型(2019-04-07 08:47) s6-4 TCP 数据段(2019-04-07 10:18) s6-6 TCP 连接释放(2019-04-07 14:20) s6-8 TCP 拥塞控制(2019-04-07 14:55) s6-9 TCP 定时器(2019-04-07 17:16)…
在TCP进行数据传输时,可以分为成块数据流和交互数据流两种,如果按字节计算,成块数据与交互数据的比例约为90%和10%,TCP需要同时处理这两类数据,且处理的算法不同. 书籍本章中以Rlogin应用为例观察交互数据的传输过程.提示经受时延的确认是如何工作以及Nagle算法怎样减少了通过广域网络传输的小分组的数目. 交互式输入 经受时延的确认上图第二,三个报文段可以合并---按键确认和按键回显一起发送.这种技术叫做经受时延的确认.通常TCP在接收到数据时并不立即发送ACK,相反,它推迟发送,以便将…
本文转载至 http://blog.chinaunix.net/uid-16979052-id-3350958.html 分类:  原文地址:TCP协议和socket API 学习笔记 作者:gilbertjuly  • TCP包头 ACK为1时,确认序号有效,表示期望收到的下一个序号,是上次成功收到的字节序加1. SYN, FIN都占用一个序号. • TCP连接的建立 client通过connect()来建立TCP连接,connect()会发送SYN报文: server通过bind().lis…
在TCP进行传输数据时.能够分为成块数据流和交互数据流两种.假设按字节计算.成块数据与交互数据的比例约为90%和10%,TCP须要同一时候处理这两类数据,且处理的算法不同. 书籍本章中以Rlogin应用为例观察交互数据的传输过程.提示经受时延的确认是如何工作以及Nagle算法如何降低了通过广域网络传输的小分组的数目. 交互式输入上图为没有优化的字符输入回显的传输数据过程.一共须要四个报文段. 经受时延的确认上图第二,三个报文段能够合并---按键确认和按键回显一起发送.这样的技术叫做经受时延的确认…
TCP协议在能够发送数据之前就建立起了"连接".要实现这个连接,启动TCP连接的那一方首先将发送一个SYN数据包.这只是一个不包含数据的数据包, 然后,打开SYN标记.如果另一方同时在它收到SYN标记的端口通话,它将发回一个SYN+ACK:SYN和ACK标志位都被打开,并将ACK(确认)编 号字段设定为刚收到的那个数据包的顺序号字段的值.接下来,连接发起方为了表示收到了这个SYN+ACK信息,会向发送方发送一个最终的确认信息(ACK 包).这种SYN.SYN+ACK.ACK的步骤被称为…
原文链接: http://blog.csdn.net/pinghegood/article/details/7841281  1.背景 最近在项目中,由于使用TD网络传输数据,数据掉包严重,软件组老大叫我来处理掉包问题.于是我就想起了在计算机网络中讲数据链路层协议时的“选择重传ARQ”协议(见<计算机网络>第四版 AndrewS.Tanenbaum的p187)来解决丢包问题.我不是一个好学生,所以具体细节忘了一些,遂找出那本书,把那一小节迅速浏览了一遍便想起了其具体工作流程.但是这个协议还不能…
1.前言 最近有一些讨论关于lwIP如何在单机的环境(比如,没有一个多线程的操作系统)使用. 本文的目的就是描述lwIP如何在无多线程操作系统或有多线程操作系统环境中运行 2.lwIP单线程内核 2.1 lwIP内核包含的组件 lwIP的内核包括了IP,ICMP,UDP协议的实现,还包括了对缓存和内存的管理. 当lwIP在一个单线程(不是操作系统)环境中运行只有内核组件是必须的. 你可以加入并运行DHCP.DNS,但它们并不是必须的.你编译代码可以只支持UDP或TCP. 2.2 lwIP内核接口…
http://www.cnblogs.com/wickedboy237/archive/2013/05/12/3074362.html 1:tcp和udp的区别2:流量控制和拥塞控制的实现机制3:滑动窗口的实现机制4:多线程如何同步.5:进程间通讯的方式有哪些,各有什么优缺点6:tcp连接建立的时候3次握手的具体过程,以及其中的每一步是为什么7:tcp断开连接的具体过程,其中每一步是为什么那么做8:tcp建立连接和断开连接的各种过程中的状态转换细节9:epool与select的区别10:epoo…
Linux网络管理命令 ifconfig 用于配置网卡ip地址信息等网络参数或显示网络接口状态,类似于windows的ipconfig命令. 可以用这个工具来临时性的配置网卡的IP地址.掩码.广播地址.网关等. 注意只能用root使用此命令,且系统如果没有此命令,需要单独安装 yum install net-tools -y 语 法: ifconfig [网络设备][down up -allmulti -arp -promisc][add<地址>][del<地址>][<hw&…
TCP的定时器 在TCP协议中有的时候需要定期或者按照某个算法对某个事件进行触发,那么这个时候,TCP协议是使用定时器进行实现的.在TCP中,会有四种定时器: 重传定时器 坚持定时器 保活定时器 2MSL定时器 这四个定时器都有各自的具体作用. 重传定时器 TCP是可靠的,因此,它对于发出去的信息,没有得到正常ACK反馈的,都会启动一个重传机制.这个重传机制使用一个重传定时器,当发现在规定时间内,没有收到ACK,那么,重新发送消息,如果还没有收到ACK,继续重新发送消息...当然,这每次继续重新…
TCP一共有四个主要的定时器,前面已经讲到了一个--超时定时器--是TCP里面最复杂的一个,另外的三个是: 坚持定时器 保活定时器 2MSL定时器 其中坚持定时器用于防止通告窗口为0以后双方互相等待死锁的情况:而保活定时器则用于处理半开放连接 1.坚持定时器 坚持定时器的原理是简单的,当TCP服务器收到了客户端的0滑动窗口报文的时候,就启动一个定时器来计时,并在定时器溢出的时候向向客户端查询窗口是否已经增大,如果得到非零的窗口就重新开始发送数据,如果得到0窗口就再开一个新的定时器准备下一次查询.…
TCP使用四种定时器: 重传定时器(Retransmission Timer).坚持定时器(Persistent Timer).保活定时器(Keeplive Timer).时间等待定时器(Time_Wait Timer). 重传定时器:为了控制丢失的报文段或丢弃的报文段,也就是对报文段确认的等待时间.当TCP发送报文段时,就创建重传计时器,若在计时器超时之前收到对报文段的确认,撤销计时器:若在计时器超时之后收到,则重传报文,复位计时器. 坚持定时器:ACK的传输不可靠,TCP不对ACK报文段进行…
前言 对于每个TCP连接,TCP一般要管理4个不同的定时器:重传定时器.坚持定时器.保活定时器.2MSL定时器. 重传定时器 非常明显重传定时器是用来计算TCP报文段的超时重传时间的(至于超时重传时间的确定,这里涉及到一大堆的算法,书上有说,我这里不细谈了).每发送一个报文段就会启动重传定时器,假设在定时器时间到后还没收到对该报文段的确认,就重传该报文段,并将重传定时器复位,又一次计算:假设在规定时间内收到了对该报文段的确认,则撤销该报文段的重传定时器. 坚持定时器 上篇文章中已经提到了,主要是…
TCP中的四个定时器: 1.超时定时器(最复杂的一个) 2.坚持定时器 3.保活定时器 4.2MSL定时器 坚持定时器用于防止通告窗口为0以后c/s双方相互等待死锁的情况:而保活定时器则用于处理半开发连接: 一. 坚持定时器 坚持定时器的原理是简单的,当TCP服务器收到了客户端的0滑动窗口报文的时候,就启动一个定时器来计时,并在定时器溢出的时候向向客户端查询窗口是否已经增大,如果得到非零的窗口就重新开始发送数据,如果得到0窗口就再开一个新的定时器准备下一次查询.通过观察可以得知,TCP的坚持定时…