`
edgar108
  • 浏览: 33434 次
  • 性别: 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
分享到:
评论

相关推荐

    图解TCP/IP协议

    TCP状态转移图详细描述了TCP连接从建立到结束的整个过程,包括CLOSED(起始状态)、LISTEN(服务端等待连接状态)、SYN_SENT(客户端发起连接状态)、SYN_RCVD(服务器接收客户端的SYN请求状态)等不同状态及其转移...

    Vpp tcp层代码解析.pdf

    在实际的VPP代码实现中,状态转换逻辑会被编码在TCP协议的处理函数中,每个函数对应于状态机图中的一个状态转移。 #### 4. 小结 VPP是一个高性能的用户空间网络协议栈实现,它实现了完整的TCP层处理,包括三次握手...

    tcp和udp理解(有图有例子)

    5.如果数据没有传送到,则TCP套接口返回一个出错状态条件。 6.TCP通过保持连续并将数据块分成更小的分片来处理大数据块。 缺点: TCP在转移数据时必须创建(并保持)一个连接。这个连接给通信进程增加了开销,...

    图解TCP/IP协议 帮助大家轻松理解三次握手

    TCP状态转移图描述了TCP连接从建立到终止的整个过程,理解这个图对于深入理解TCP协议非常重要。TCP/IP协议的实现和管理对于确保网络通信的稳定性和可靠性至关重要,无论是开发网络应用程序还是管理网络资源,了解TCP...

    简易状态机学习成果_fpga_

    2. 设计状态转移图:状态转移图是描述状态机行为的有效工具,它用图形方式表示各个状态及其之间的转换。每个节点代表一个状态,箭头表示状态间的转移,并附带触发转移的条件。 3. 编码状态:为了在硬件中实现状态机...

    TCP IP协议端口大全.txt

    - **描述**:集群服务提供了高可用性和故障转移功能。 - **用途**:当一台服务器出现故障时,集群中的其他服务器能够接管其任务,确保服务不间断。 - **特点**:集群服务通常涉及多台服务器之间的协调和通信,...

    状态机 FSM 设计指导

    3. 有记忆状态机(Mealy Machine):状态转移依赖于当前状态和输入。 4. Moore Machine:状态转移仅依赖于当前状态,输出取决于当前状态。 二、状态机设计原则 设计状态机时,应遵循以下原则: 1. 明确状态定义:每...

    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超时...

    FSM有限状态机模拟例程

    - 转换(Transitions):当特定事件发生时,系统从一个状态转移到另一个状态的过程,通常关联着一个条件或动作。 3. FSM的设计原则: - 明确性:每个状态和转换都应有明确的定义,避免模糊不清。 - 完备性:所有...

    zhuangtaiji.rar_状态机_状态机PPT

    事件是触发状态转移的条件或输入;转换则是从一个状态到另一个状态的规则,通常与特定事件关联;而动作则是在状态间转换时执行的操作。 1. 状态:状态是系统行为的抽象,可以是有限的或无限的。在状态机中,每个...

    状态机资料

    理解状态和事件的关系是构建状态机的关键,每个事件可能导致系统从一个状态转移到另一个状态。 3. **状态机类型**:主要有三种基本类型: Moore机、Mealy机和混合型状态机。Moore机的状态输出仅取决于当前状态,而...

    基于状态机的嵌入式系统开发

    优化状态机的切换效率,减少不必要的计算,以及确保状态转移的原子性,对于满足系统实时性要求至关重要。 7. **测试与调试**:状态机的测试通常通过模拟不同输入序列和状态转换来完成。有效的测试策略包括覆盖所有...

    FA.rar_有限状态机fa

    它通常用一张状态转移图来表示,图的边代表了输入符号与状态之间的关系。比如,从状态A到状态B,当输入为'a'时。 5. **遍历路径**:实现过程中,可能需要遍历所有可能的路径,以展示FA如何处理不同的输入序列。这...

    fsm状态机设计相关资料

    1. 图形化设计:通过状态图(State Diagram)或状态转换表(State Transition Table)来表示状态机。 2. 硬件描述语言(HDL)设计:如Verilog和VHDL,常用于FPGA和ASIC设计。 3. 面向对象编程:利用类和对象来实现...

    状态机制-软件开发宝典

    状态转换规则是状态机的关键部分,它们定义了在特定条件下如何从一个状态转移到另一个状态。这些规则可以基于条件表达式,也可以是无条件的。例如,当订单金额被确认收到时,订单的状态会从"待支付"变为"已支付"。 ...

    汇川HU5 PLC编程实例

    在HU5 PLC中,通过状态转移图来表达程序的执行流程。 2. 状态和转换:每个状态代表一个特定的操作或功能,而转换条件则决定何时从一个状态转移到另一个状态。 五、HU5 PLC的通信与网络 1. 通讯接口:HU5 PLC通常...

    状态机

    4. UML状态图:用统一建模语言(UML)中的状态图来可视化状态机,便于设计和交流。 四、状态机在实际项目中的应用 1. 网络协议解析:如HTTP、TCP/IP等协议,每个连接都有一系列的状态,如建立连接、传输数据、关闭...

    有限状态机(Finite State Machine, FSM).pdf

    当某个事件发生时,系统会从当前状态转移到另一个状态,这个过程被称为状态转换。状态转换可以是有条件的,也可以是无条件的,具体取决于系统的设计和实际需求。例如,在交通灯系统中,红灯亮起一段时间后,定时器...

Global site tag (gtag.js) - Google Analytics