tcp状态变迁图

C++调用海康相机SDK采集图像(C++\QT Creator\openCV\线程\接口) C++调用海康相机SDK采集图像(C++\QT Creator\openCV\线程\接口) 之前写了一篇关于C++调用海康相机SDK采集图像的文章,有很多人私下发送消息咨询了一些问题,由于工作繁忙,只答复了一部分问题,今天抽出时间从头梳理了一下大家提出的问题,把我能够回答的问题都解答一次。上一次的程序只是简单的实现了图像的采集,没有使用到线程,今天把程序重新做出调整,把线程和多态加进去。文章最后有项目的下载地址。 我使用的是QT Creator这个IDE,版本信息如下: 我把相机采集的图像转换为openC 阅读详情

TCP三次握手/四次挥手 及 状态变迁图  

2012-03-14 18:09:47|  分类: IT相关 |  标签:tcp  握手  挥手  状态  socket   |字号大中小 订阅

【建立TCP连接】(三次握手)
   由于TCP协议提供可靠的连接服务,于是采用有保障的三次握手方式来创建一个TCP连接。三次握手的具体过程如下:
  1. 客户端发送一个带SYN标志的TCP报文(报文1)到服务器端,表示希望建立一个TCP连接。
  2. 服务器发送一个带ACK标志和SYN标志的TCP报文(报文2)给客户端,ACK用于对报文1的回应,SYN用于询问客户端是否准备好进行数据传输。
  3. 客户端发送一个带ACK标志的TCP报文(报文3),作为报文2的回应。
   至此,一个TCP连接就建立起来了。(详见下图)


【终止TCP连接】(四次挥手)
   由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。原则是主动关闭的一方(如已传输完所有数据等原因)发送一个FIN报文来表示终止这个方向的连接,收到一个FIN意味着这个方向不再有数据流动,但另一个方向仍能继续发送数据,直到另一个方向也发送FIN报文。四次挥手的具体过程如下:
  1. 客户端发送一个FIN报文(报文4)给服务器,表示我将关闭客户端到服务器端这个方向的连接。
  2. 服务器收到报文4后,发送一个ACK报文(报文5)给客户端,序号为报文4的序号加1。
  3. 服务器发送一个FIN报文(报文6)给客户端,表示自己也将关闭服务器端到客户端这个方向的连接。
  4. 客户端收到报文6后,发回一个ACK报文(报文7)给服务器,序号为报文6的序号加1。
   至此,一个TCP连接就关闭了。(4次挥手不是关闭TCP连接的唯一办法,见下文Q3疑问)


【TCP连接状态】
下面是每一个TCP连接在任意时刻可能处于的状态,在Linux下可以在 netstat命令的最后一列(State列)里看到。
各个状态的含义如下:
  • CLOSED :初始状态,表示TCP连接是“关闭着的”或“未打开的”。
  • LISTEN :表示服务器端的某个SOCKET处于监听状态,可以接受客户端的连接。
  • SYN_RCVD :表示接收到了SYN报文。在正常情况下,这个状态是服务器端的SOCKET在建立TCP连接时的三次握手会话过程中的一个中间状态,很短暂,基本上用netstat很难看到这种状态,除非故意写一个监测程序,将三次TCP握手过程中最后一个ACK报文不予发送。当TCP连接处于此状态时,再收到客户端的ACK报文,它就会进入到ESTABLISHED 状态。
  • SYN_SENT :这个状态与SYN_RCVD 状态相呼应,当客户端SOCKET执行connect()进行连接时,它首先发送SYN报文,然后随即进入到SYN_SENT 状态,并等待服务端的发送三次握手中的第2个报文。SYN_SENT 状态表示客户端已发送SYN报文。
  • ESTABLISHED :表示TCP连接已经成功建立。
  • FIN_WAIT_1 :这个状态得好好解释一下,其实FIN_WAIT_1 和FIN_WAIT_2 两种状态的真正含义都是表示等待对方的FIN报文。而这两种状态的区别是:FIN_WAIT_1状态实际上是当SOCKET在ESTABLISHED状态时,它想主动关闭连接,向对方发送了FIN报文,此时该SOCKET进入到FIN_WAIT_1 状态。而当对方回应ACK报文后,则进入到FIN_WAIT_2 状态。当然在实际的正常情况下,无论对方处于任何种情况下,都应该马上回应ACK报文,所以FIN_WAIT_1 状态一般是比较难见到的,而FIN_WAIT_2 状态有时仍可以用netstat看到。
  • FIN_WAIT_2 :上面已经解释了这种状态的由来,实际上FIN_WAIT_2状态下的SOCKET表示半连接,即有一方调用close()主动要求关闭连接。注意:FIN_WAIT_2 是没有超时的(不像TIME_WAIT 状态),这种状态下如果对方不关闭(不配合完成4次挥手过程),那这个 FIN_WAIT_2 状态将一直保持到系统重启,越来越多的FIN_WAIT_2 状态会导致内核crash。
  • TIME_WAIT :表示收到了对方的FIN报文,并发送出了ACK报文。 TIME_WAIT状态下的TCP连接会等待2*MSL(Max Segment Lifetime,最大分段生存期,指一个TCP报文在Internet上的最长生存时间。每个具体的TCP协议实现都必须选择一个确定的MSL值,RFC 1122建议是2分钟,但BSD传统实现采用了30秒,Linux可以cat /proc/sys/net/ipv4/tcp_fin_timeout看到本机的这个值),然后即可回到CLOSED 可用状态了。如果FIN_WAIT_1状态下,收到了对方同时带FIN标志和ACK标志的报文时,可以直接进入到TIME_WAIT状态,而无须经过FIN_WAIT_2状态。
  • CLOSING :这种状态在实际情况中应该很少见,属于一种比较罕见的例外状态。正常情况下,当一方发送FIN报文后,按理来说是应该先收到(或同时收到)对方的ACK报文,再收到对方的FIN报文。但是CLOSING 状态表示一方发送FIN报文后,并没有收到对方的ACK报文,反而却也收到了对方的FIN报文。什么情况下会出现此种情况呢?那就是当双方几乎在同时close()一个SOCKET的话,就出现了双方同时发送FIN报文的情况,这是就会出现CLOSING 状态,表示双方都正在关闭SOCKET连接。
  • CLOSE_WAIT :表示正在等待关闭。怎么理解呢?当对方close()一个SOCKET后发送FIN报文给自己,你的系统毫无疑问地将会回应一个ACK报文给对方,此时TCP连接则进入到CLOSE_WAIT状态。接下来呢,你需要检查自己是否还有数据要发送给对方,如果没有的话,那你也就可以close()这个SOCKET并发送FIN报文给对方,即关闭自己到对方这个方向的连接。有数据的话则看程序的策略,继续发送或丢弃。简单地说,当你处于CLOSE_WAIT 状态下,需要完成的事情是等待你去关闭连接。
  • LAST_ACK :当被动关闭的一方在发送FIN报文后,等待对方的ACK报文的时候,就处于LAST_ACK 状态。当收到对方的ACK报文后,也就可以进入到CLOSED 可用状态了。


【TCP状态变迁图】
   下面是收集自网上的几张图片,展示TCP连接的各种状态的变迁可能:
TCP三次握手/四次挥手 及 状态变迁图 - panda - pandalove@126.com的博客
 
TCP三次握手/四次挥手 及 状态变迁图 - panda - pandalove@126.com的博客

TCP三次握手/四次挥手 及 状态变迁图 - panda - pandalove@126.com的博客
 
TCP三次握手/四次挥手 及 状态变迁图 - panda - pandalove@126.com的博客
 

 

【TCP相关疑问】
   最后整理几个常见的TCP相关的疑问:
  • Q1 为什么在TCP协议里,建立连接是三次握手,而关闭连接却是四次握手呢?
  • A1 因为当处于LISTEN 状态的服务器端SOCKET当收到SYN报文(客户端希望新建一个TCP连接)后,它可以把ACK(应答作用)和SYN(同步作用)放在同一个报文里来发送给客户端。但在关闭TCP连接时,当收到对方的FIN报文时,对方仅仅表示对方没有数据发送给你了,但未必你的所有数据都已经全部发送给了对方,所以你大可不必马上关闭SOCKET(发送一个FIN报文),等你发送完剩余的数据给对方之后,再发送FIN报文给对方来表示你同意现在关闭连接了,所以通常情况下,这里的ACK报文和FIN报文都是分开发送的。
  • Q2 为什么TIME_WAIT 状态还需要等2*MSL秒之后才能返回到CLOSED 状态呢?
  • A2 因为虽然双方都同意关闭连接了,而且握手的4个报文也都发送完毕,按理可以直接回到CLOSED 状态(就好比从SYN_SENT 状态到ESTABLISH 状态那样),但是我们必须假想网络是不可靠的,你无法保证你最后发送的ACK报文一定会被对方收到,就是说对方处于LAST_ACK 状态下的SOCKET可能会因为超时未收到ACK报文,而重发FIN报文,所以这个TIME_WAIT 状态的作用就是用来重发可能丢失的ACK报文。
  • Q3 关闭TCP连接一定需要4次挥手吗?
  • A3 不一定,4次挥手关闭TCP连接是最安全的做法。但在有些时候,我们不喜欢TIME_WAIT 状态(如当MSL数值设置过大导致服务器端有太多TIME_WAIT状态的TCP连接,减少这些条目数可以更快地关闭连接,为新连接释放更多资源),这时我们可以通过设置SOCKET变量的SO_LINGER标志来避免SOCKET在close()之后进入TIME_WAIT状态,这时将通过发送RST强制终止TCP连接(取代正常的TCP四次握手的终止方式)。但这并不是一个很好的主意,TIME_WAIT 对于我们来说往往是有利的。
【实战指南】Green Hills MULTI-IDE 从零安装到工程创建全流程 本文详细介绍了Green Hills MULTI-IDE从零安装到工程创建的全流程,包括系统要求检查、安装步骤、工程配置及调试技巧。特别适合嵌入式开发新手快速上手这款专业IDE工具,提升开发效率。 阅读详情

相关推荐

PID温控实验平台搭建(二)——PID进阶知识介绍及源码分享

最近,我突发奇想去翻阅了一些我本科期间所做的一些小项目,发现都挺有意思的!希望通过我的讲解文章可以帮助你们少走一些弯路!今天,我要分享的是一个PID温控实验平台的搭建,这是一个系列文章,手把手地教你学习和认识PID算法,了解这种算法在温度控制中的应用。由于我知识有限,如果出现一些错误,希望大家可以帮助我指出来,我们一起学习进步!!!

qq_35953617的博客 8049

三次握手和四次挥手以及TCP状态转移图

1.三次握手与四次挥手 使用tcpdump观察TCP头部信息 我们可以利用tcpdump抓取了一个数据包并分析了其中的IP头部信息,也可以用来分析其中的TCP协议相关的部分。 sudo tcpdump -i eth0 -nt ‘(src 源地址 and dst目的地址) or(src 目的地址 and dst 源地址)’ TCP三次握手过程的状态变迁 CLOSED:起始点,在超时或者连接关闭时候进入此状态,这并不是一个真正的状态,而是这个状态图的假想起点和终点。 LISTEN:服务器端等待连接的状态。

weixin_45730574的博客 449

绿盾注册机 使用手册

在很多涉及工程设计的单位(如建筑、模具、电路、广告等),电子图纸的应用极为普遍,而电子图纸的丢失、被盗对企业利益的影响是显而易见的,如果被竞争对手获取,甚至可能造成致命的打击。因此,对于这类企业,电子图纸的保密显得至关重要。绿盾信息安全管理软件充分考虑了电子图纸的各种可能传播途径,制定了针对性的解决方案,从而保证了电子图纸的安全。 我们总结了电子图纸的各种传播途径以及相应的对策,有如下几点:

997

TCP的三次握手和四次挥手以及状态转移过程

1、TCP的三次握手即客户端与服务器端建立连接的过程(三次握手一般是由客户端发起的建立连接请求,connect返回连接成功表示三次握手完成)第一次握手:客户端发起建立连接请求,并发送SYN和一个序列号i第二次握手:服务器确认与客户端建立连接,发送SYN和一个自己的序列号j,同时发送ACK以及确认值i+1第三次握手:客户端向服务器发送ACK以及确认值j+12、TCP的四次挥手即客户端与服务器端断开连...

Blllllll_的博客 1488

多个MOS管并联应用场景的四大要点

动态运行时,阈值电压Vgsth最低的MOS管首先打开,最后关闭。这种MOS管一般会占据更多的开关损耗,并且在开关转换过程中,承担了更高的电应力。

VBsemi的博客 3748

Ubuntu docker镜像中下载安装 DPABI(DPARSF)

在Ubuntu服务器的docker镜像中用MATLAB运行DPABI(以及使用DPARSF的功能)。

Pandako's Blog 1722

TCP的三次握手/四次挥手以及状态变迁图

大家对netstat -a命令很熟悉吧,但是,你有没有注意到STATE一栏呢,基本上显示着established,time_wait,close_wait等,这些到底是什么意思呢,在这篇文章,我将会详细的阐述。 大家很明白TCP初始化连接三次握手吧:发SYN包,然后返回SYN/ACK包,再发ACK包,连接正式建立。但是这里有点出入,当请求者收到SYS /ACK包后,就开始建立连接了,而被

lanzao的专栏 1424

深入解析Linux驱动开发中的I2C时序及I2C高频面试题

在 I2C 通信中,主设备和从设备的角色有着明确的定义。主设备是发起通信的设备,它负责控制整个通信过程。主设备可以是微控制器、处理器等具有控制能力的设备。

大模型大数据攻城狮的专栏 2764

TCP三次握手/四次挥手 及 状态变迁图

转自:点击打开链接 【建立TCP连接】(三次握手)    由于TCP协议提供可靠的连接服务,于是采用有保障的三次握手方式来创建一个TCP连接。三次握手的具体过程如下: 客户端发送一个带SYN标志的TCP报文(报文1)到服务器端,表示希望建立一个TCP连接。服务器发送一个带ACK标志和SYN标志的TCP报文(报文2)给客户端,ACK用于对报文1的回应,SYN用于询问

pmt123456的博客 5815

2024年下半年网络规划设计师论文真题

3、深入论述自身参与的工业网络是如何实施的,为实现制造业的智能化,如何实现数据的跨系统互通,促进各种工业数据的充分流动和无缝集成以及数据安全。3、结合自身参与的网络建设,详细叙述针对该网络“去NAT”的规划和设计方案。4、在实施过程中遇到的问题以及如何处理,项目实施后的效果和评价。2、大型园区网络“去NAT”改造和业务融合的整体架构。1、“网络去NAT”对推进ipv6演进和应用的意义。4、改造过程中遇到的问题及解决方案。2、简要叙述自身参与的制造网络建设。1、网络规划在智能制造中的意义。

鹿鸣天涯 2366

把 SAP Activate 六个阶段看透:从项目落地到 SAP BTP 扩展与 AI 运营的一体化实践

摘要: SAP Activate 方法论常被误解为简单的项目阶段划分,实则是一套将业务目标、标准流程、系统配置和持续运营串联的实施控制体系。其六个阶段(Discover至Run)构成价值递进的实施通道,核心交付集中在Prepare到Deploy阶段。Discover阶段通过DDA评估确立项目方向与范围,Prepare阶段聚焦可执行性准备,Explore阶段采用Fit-to-Standard工作坊进行需求分层,Realize阶段基于前期决策进行配置与扩展开发。该方法论强调标准化优先,差异化需求通过SAP BT

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 2332

Tcp三次握手和四次挥手状态图

三次握手四次挥手 正常情况下 同时挥手 SYN攻击:在三次握手过程中,Server发送SYN-ACK之后,收到Client的ACK之前的TCP连接称为半连接(half-open connect),此时Server处于SYN_RCVD状态,当收到ACK后,Server转入ESTABLISHED状态。SYN攻击就是Client在短时间内伪造大量不存在的IP地址,并向Server不断地发送SYN包,Ser

voidreturn的博客 3253

DeerFlow 系列教程 第二十篇 | 前端定制与二次开发指南

支持的语言定义在locale.tsLocale 检测采用三级降级策略Cookie 优先:检查localeCookie浏览器语言默认值en-US.value;if (locale!DeerFlow 使用管理主题切换,在根布局中通过主题相关的 CSS 变量定义在中(约 10KB)。: boolean;// 是否支持深度思考。

weixin_43674738的博客 223

速读原著-TCP/IP(TCP的状态变迁图)

第18章 TCP连接的建立与终止 18.6 TCP的状态变迁图 我们已经介绍了许多有关发起和终止 T C P连接的规则。这些规则都能从图 1 8 - 1 2所示的状态变迁图中得出。 在这个图中要注意的第一点是一个状态变迁的子集是“典型的”。我们用粗的实线箭头表示正常的客户端状态变迁,用粗的虚线箭头表示正常的服务器状态变迁。 第二点是两个导致进入E S TA B L I S H -E D状态的变迁...

逍遥云恋 684

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

tcp状态变迁图

Jack_Fun的专栏 795

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

TCP状态变迁图及状态说明

转自(http://www.2cto.com/net/201305/207464.html) 图1 TCP状态变迁图         咋一看这图,让人头大。下面会详细分析图中的所有状态,这些状态跟TCP三次握手与四次挥手有着非常密切的联系,关于这个可以参看前面拙文。         CLOSED:表示初始状态。对服务端和C客户端双方都一样。         LI

不积跬步无以成千里 515

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

TCP 状态变迁图说明 【转】

TCP 是一个面向连接的协议,无论哪一方向另一方发送数据之前,都必须先在双方之间建立一条连接。本节将详细讨论一个TCP 连接是如何建立的以及通信结束后是如何终止的。建立一个 TCP 连接  TCP使用三次握手 ( three-way handshake ) 协议来建立连接,图 3-10 描述了三次握手的报文序列。这三次握手为:请求端(通常称为客户)发送一个

zbychhaozeng的专栏 4645

tcp的状态变迁图

tcp的状态变迁图状态转换图中状态的描述: CLOSED:无连接是活动的或正在进行 LISTEN:服务器在等待进入呼叫 SYN_RECV:一个连接请求已经接受,等待确认 SYN_SENT:已发出请求SYN。 ESTABLISHED:正常数据传输状态 FIN_WAIT1:主动关闭,等待应答ACK FIN_WAIT2:已接受关闭应答ACK ITMED_WAIT:等待所有分组死掉 CLOSING:两边同时

yushui的笔记本 802

TCP状态变迁图,转自tcpip详解卷一协议

xxfxxfxxfxxf003的博客 155

TCP状态变迁图

<br />TCP状态变迁图: <br /><br /><br />状态:描述 <br />CLOSED:无连接是活动的或正在进行 <br />LISTEN:服务器在等待进入呼叫 <br />SYN_RECV:一个连接请求已经到达,等待确认 <br />SYN_SENT:应用已经开始,打开一个连接 <br />ESTABLISHED:正常数据传输状态 <br />FIN_WAIT1:应用说它已经完成 <br />FIN_WAIT2:另一边已同意释放 <br />ITMED_WAIT:等待所有分组死掉 <br

cybertan的专栏 758

TCP-IP详解:TCP的状态变迁图

TCP的状态变迁图 一个连接从开始建立到断开,经历了一连串的状态变化,这次主要分析下它的状态变迁图,首先上经典的状态变迁图

深邃 精致 内涵 坚持 1万+
上一篇: 键、索引、约束及其区别
下一篇: 二维码保存本地及上传实现
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值