`
edgar108
  • 浏览: 32476 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

TCP状态转移图

 
阅读更多

服务端:

      通过listen系统调用,进入LISTEN状态,被动等待客户端连接,因此执行的是所谓的被动打开,服务器一旦监听到某个连接请求(收到同步报文段),就会将该连接放入内核等待队列中,冰箱客户端发送带SYN标志的的确认报文段。此时该连接处于SYN_RCVD状态。如果服务器成功的收到客户端发送回的确认报文段,则该连接转移到ESTABLISHED状态。ESTABLISHED状态时连接双方能够进行双向数据传输的状态。

      当客户端主动关闭连接时(通过close或shutdown系统调用向服务器发送结束报文段),服务器通过返回确认报文段是连接进入CLOSE_WAIT状态。这个状态的含义很明确:等待服务器应用程序关闭连接。通常,服务器检测到客户端关闭连接后 ,也会立即给客户端发送一个结束报文段来关闭连接。这将使连接转移到LAST_ACK状态,以等待客户端对结束报文段的最后一次确认。一旦确认完成,连接就彻底关闭了。

 

客户端:

       客户端通过connect系统调用主动与服务器建立连接。connect系统调用首先给服务器发送一个同步报文段,使连接转移到SYN_SENT状态,然后connect系统调用肯能因为如下2个原因失败返回:

1 如果connect连接的目标端口不存在(未被任何进程监听),或者该端口仍被处于TIME_WAIT状态的连接所占用,则服务器给客户端发送 一个复位报文段,connect调用失败。

2 如果目标端口存在,但connect在超时时间内未收到服务器的确认报文段,则connect系统调用失败。

       connect调用失败将连接立即返回初始的CLOSED状态,如果客户端成功收到服务器的同步报文段和确认,则connect调用成功返回,连接转移至ESTABLISHED状态。

当客户端主动关闭时,它将向服务器发送一个结束报文段,同时连接进入FIN_WAIT_1状态,若此客户端客户端收到服务器专门用于确认目的的确认报文段,则连接转移至FIN_WAIT_2状态。当客户端处于FIN_WAIT_2状态时,服务器处于CLOSE_WAIT状态,这一对状态是可能发生半关闭的状态。此时如果服务器也关闭连接(发送结束报文段),则客户端给予确认并进入TIME_WAIT状态。客户端也能直接从FIN_WAIT_1进入TIME_WAIT状态。

      处于FIN_WAIT_2状态的客户端需要等待服务器发送结束报文段,才能转移至TIME_WAIT状态,否则它将一直停留在这个状态。连接停留在FIN_WAIT_2状态可能发生在:客户端执行半关闭后,未等服务器关闭连接就强行退出了。此时客户端连接由内核接管,可称之为孤儿连接。linux为了防止连接长时间存留在内核中,定义了2个变量:/proc/sys/net/ipv4/tcp_max_orphans 和 /proc/sys/net/ipv4//tcp_fin_timeout. 前者指定内黑能接管的孤儿连接数目,后者指定孤儿连接在内核中生存的时间。

 

TIME_WAIT:

客户端在收到服务器的结束报文段后,并没有直接进入CLOSED状态,而是转移到TIME_WAIT状态,在这个状态,客户端连接要等待一段长为2MSL(Maximum Segment Life 报文段最大生存时间),才能完全关闭。

MSL 标准文档RFC 1122的建议值是2 min。

TIME_WAIT存在的原因有2点:

1 可靠的终止TCP连接

2 保证让迟来的TCP报文段有足够的时间被识别并丢弃。

 

第一点,假设TCP连接关闭的 6,7报文段丢失,那么服务器会重发结束报文段。因此客户端需要停留在某个状态以处理重复收到的结束报文段(即向服务器发送第7个确认报文段)。否则,客户端将以复位报文段来回应服务器,服务器则认为这是一个错误,因为它期望的是一个像TCP报文段7那样的确认报文段。

 

2在linux系统上,一个TCP端口不能被同时打开多次(两次及以上),当一个TCP连接处于TIME_WAIT状态时,我们无法立即使用该连接占用着的端口来建立一个新连接。反过来思考,如果不存在TIME_WAIT状态,则应用程序能立即建立一个和刚关闭的连接相似的连接(即相同的IP地址和端口号)。这个新的,和原来相似的连接称为原来的连接的化身(incarnation)。新的化身肯恶搞收到属于原来的连接的,携带应用程序数据的TCP报文段(迟到的报文段),这显然是不应该发生的。这就是TIME_WAIT状态存在的第二个原因。

      另外,因为TCP报文段的最大生存时间是MSL,所以坚持2MSL时间的TIME_WAIT状态能够确保网络上连个传输方向上尚未被接受到的,迟到TCP报文段都已消失(被中转路由器丢弃)。因此一个连接新的化身可以在2MSL时间后安全的建立,而绝对不会收到属于原来应用程序的数据,这就是TIME_WAI状态要持续2MSL时间的原因。

 

  • 大小: 12.4 KB
  • 大小: 15.2 KB
分享到:
评论

相关推荐

    Linux高性能服务器编程清晰PDF+源码

    3.4.1 TCP状态转移总图 3.4.2 TIME_WAIT状态 3.5 复位报文段 3.5.1 访问不存在的端口 3.5.2 异常终止连接 3.5.3 处理半打开连接 3.6 TCP交互数据流 3.7 TCP成块数据流 3.8 带外数据 3.9 TCP超时...

    车载通信网中基于跨层的TCP拥塞控制机制 (2011年)

    本文针对车载通信网的特点,首先分析传统TCP在VANET环境下存在的问题,给出四状态转移图,在此基础上提出一种新的基于跨层设计的TCP拥塞控制机制:VC-TCP。通过向传输层提供有用的路由信息及车辆运动信息,预测分组...

    基于状态相关字段识别的未知二进制协议状态机逆向方法* (2015年)

    针对截获的未知二进制协议的通信数据,提出了一种二进制协议状态机逆向方法,该方法能够根据通信数据逆构协议状态转移图。在该方法中,设计了针对通信数据帧的基于多序列比对的对应字段对齐算法以及基于字段统计量...

    Linux高性能服务器编程

    3.2.3 使用tcpdump观察TCP头部信息 3.3 TCP连接的建立和关闭 3.3.1 使用tcpdump观察TCP连接的建立和关闭 3.3.2 半关闭状态 3.3.3 连接超时 3.4 TCP状态转移 3.4.1 TCP状态转移总图 3.4.2 TIME_WAIT状态 3.5...

    GroupData:使用JGroup实现分布式数据结构(堆栈和集合)

    这些复制的数据结构将使用状态转移来处理新成员加入的情况,并使用消息传递功能来广播最近执行的操作。 建筑学 下图描述了在我们的复制数据结构生命周期中执行的活动。 解释: 首先,刚创建的数据结构连接到其...

    introductionToAlgorithms

    最短路径,深度搜索(完成一题),光度搜索(进行中))动态规划(需要多尝试一些场景,遇见更多的转移方程)贪心算法并查集 lru,lfu网路http基本握手讲解(完成) https讲解http2 网络套接字tcp / udp(tcp / ip...

    下一代防火墙设计方案V2.doc

    SoftEther等软件更可以将 所有TCP/IP通讯封装成HTTPS数据包发送,使用传统的状态检测防火墙简直防不胜 防。 SoftEther可以很轻易的穿越传统防火墙 PC上感染的木马程序可以从防火墙的可信任网络发起攻击。由于会话的...

    ROSEHA双机方案

    当捕捉到这种变化后RoseHA就会控制系统进行主机切换,即备份机启动和工作主机一样的应用程序接管工作主机的工作(包括提供TCP/IP网络服务、存储系统的存取等服务)并进行报警,提示管理人员对故障主机进行维修。...

    citrix 中文管理操作手册

    为服务器配置 ICA“保持活动状态”设置 96 了解会话基础知识 96 管理和监视 XenApp 会话 97 监视会话状态 97 显示会话的相关信息 97 显示与活动会话有关的信息 97 显示会话状态 98 显示会话属性 98 刷新用户数据 98 ...

    (重要)AIX command 使用总结.txt

    S State ->列出指定状态的设备,3种状态可选,(1)已定义->defined,d,D,0;(2)可用->available,a,A,1;(3)停止->stopped,s,S,2; s Subclass ->指定设备的子类名称,subclass包括什么类型可用参数P显示; t Type ->指定...

    Ghost 8.3 系统备份软件

    安装后,运行 3Com Boot Image Editor,出现主界面图。选择“创建TCP/IP或PXE映像文件(Create a TCP/IP or PXE image file)”,出现对话窗口。为即将建立的映像文件命名,例如:pxeghost.img,其他采用默认选项,...

    Ghost 8.3 Enterprise

    安装后,运行 3Com Boot Image Editor,出现主界面图。选择“创建TCP/IP或PXE映像文件(Create a TCP/IP or PXE image file)”,出现对话窗口。为即将建立的映像文件命名,例如:pxeghost.img,其他采用默认选项,...

    SQL Server 2008管理员必备指南(超高清PDF)Part1

    3.2.2 管理服务的状态和启动模式 3.2.3 设置启动的服务帐户 3.2.4 配置文件流 3.2.5 配置服务转储目录、错误报告和客户反馈报告 3.3 管理网络和SQL本地客户端配置 3.3.1 管理连接配置 3.3.2 配置Shared Memory网络...

    SQL Server 2008管理员必备指南(超高清PDF)Part3

    3.2.2 管理服务的状态和启动模式 3.2.3 设置启动的服务帐户 3.2.4 配置文件流 3.2.5 配置服务转储目录、错误报告和客户反馈报告 3.3 管理网络和SQL本地客户端配置 3.3.1 管理连接配置 3.3.2 配置Shared Memory网络...

    SQL Server 2008管理员必备指南(超高清PDF)Part2

    3.2.2 管理服务的状态和启动模式 3.2.3 设置启动的服务帐户 3.2.4 配置文件流 3.2.5 配置服务转储目录、错误报告和客户反馈报告 3.3 管理网络和SQL本地客户端配置 3.3.1 管理连接配置 3.3.2 配置Shared Memory网络...

    SQL.Server.2008管理员必备指南.part2.rar(2/4)

     3.2.2 管理服务的状态和启动模式 53  3.2.3 设置启动的服务帐户 54  3.2.4 配置文件流 56  3.2.5 配置服务转储目录、错误报告和客户反馈报告 58  3.3 管理网络和SQL本地客户端配置 59  3.3.1 管理连接配置 60...

    SQL.Server.2008管理员必备指南.part1.rar(1/4)

     3.2.2 管理服务的状态和启动模式 53  3.2.3 设置启动的服务帐户 54  3.2.4 配置文件流 56  3.2.5 配置服务转储目录、错误报告和客户反馈报告 58  3.3 管理网络和SQL本地客户端配置 59  3.3.1 管理连接配置 60...

    SQL.Server.2008管理员必备指南.part3.rar(3/4)

     3.2.2 管理服务的状态和启动模式 53  3.2.3 设置启动的服务帐户 54  3.2.4 配置文件流 56  3.2.5 配置服务转储目录、错误报告和客户反馈报告 58  3.3 管理网络和SQL本地客户端配置 59  3.3.1 管理连接配置 60...

    SQL.Server.2008管理员必备指南.part4.rar(4/4)

     3.2.2 管理服务的状态和启动模式 53  3.2.3 设置启动的服务帐户 54  3.2.4 配置文件流 56  3.2.5 配置服务转储目录、错误报告和客户反馈报告 58  3.3 管理网络和SQL本地客户端配置 59  3.3.1 管理连接配置 60...

    网管教程 从入门到精通软件篇.txt

    DWG:AutoCAD工程图文件;AutoCAD或Generic CADD老版本的绘图格式 DXR:Macromedia Director受保护(不可编辑)电影文件 E EDA:Ensoniq ASR磁盘映像 EDD:元素定义文档(FrameMaker+SGML文档) EDE:Ensoniq ...

Global site tag (gtag.js) - Google Analytics