`

TCP状态转移

 
阅读更多

TCP状态转移,一共存在11个状态,请看下图

1.CLOSED:起始点,在超时或者连接关闭时候进入此状态。

 

2.LISTEN:svr端在等待连接过来时候的状态,svr端为此要调用socket, bind,listen函数,就能进入此状态。此称为应用程序被动打开(等待客户端来连接)。

 

3.SYN_SENT:客户端发起连接,发送SYN给服务器端。如果服务器端不能连接,则直接进入CLOSED状态。

 

4.SYN_RCVD:跟3对应,服务器端接受客户端的SYN请求,服务器端由LISTEN状态进入SYN_RCVD状态。同时服务器端要回应一个ACK,同时发送一个SYN给客户端;另外一种情况,客户端在发起SYN的同时接收到服务器端得SYN请求,客户端就会由SYN_SENT到SYN_RCVD状态。

 

5.ESTABLISHED:服务器端和客户端在完成3次握手进入状态,说明已经可以开始传输数据了。

 

以上是建立连接时服务器端和客户端产生的状态转移说明。相对来说比较简单明了,如果你对三次握手比较熟悉,建立连接时的状态转移还是很容易理解。

 

接下来服务器端和客户端就进行数据传输。。。。,当然,里面也大有学问,就此打住,稍后再表。

 

下面,我们来看看连接关闭时候的状态转移说明,关闭需要进行4次双方的交互,还包括要处理一些善后工作(TIME_WAIT状态),注意,这里主动关闭的一方或被动关闭的一方不是指特指服务器端或者客户端,是相对于谁先发起关闭请求来说的:

 

6.FIN_WAIT_1:主动关闭的一方,由状态5进入此状态。具体的动作时发送FIN给对方。

 

7.FIN_WAIT_2:主动关闭的一方,接收到对方的FIN ACK,进入此状态。由此不能再接收对方的数据。但是能够向对方发送数据。

 

8.CLOSE_WAIT:接收到FIN以后,被动关闭的一方进入此状态。具体动作时接收到FIN,同时发送ACK。

 

9.LAST_ACK:被动关闭的一方,发起关闭请求,由状态8进入此状态。具体动作时发送FIN给对方,同时在接收到ACK时进入CLOSED状态。

 

10.CLOSING:两边同时发起关闭请求时,会由FIN_WAIT_1进入此状态。具体动作是,接收到FIN请求,同时响应一个ACK。

 

11.TIME_WAIT:最纠结的状态来了。从状态图上可以看出,有3个状态可以转化成它,我们一一来分析:

 

a.由FIN_WAIT_2进入此状态:在双方不同时发起FIN的情况下,主动关闭的一方在完成自身发起的关闭请求后,接收到被动关闭一方的FIN后进入的状态。

 

b.由CLOSING状态进入:双方同时发起关闭,都做了发起FIN的请求,同时接收到了FIN并做了ACK的情况下,由CLOSING状态进入。

 

c.由FIN_WAIT_1状态进入:同时接受到FIN(对方发起),ACK(本身发起的FIN回应),与b的区别在于本身发起的FIN回应的ACK先于对方的FIN请求到达,而b是FIN先到达。这种情况概率最小。

 

关闭的4次连接最难理解的状态是TIME_WAIT,存在TIME_WAIT的2个理由:

 

1.可靠地实现TCP全双工连接的终止。

 

2.允许老的重复分节在网络中消逝。

  • 大小: 33.5 KB
分享到:
评论

相关推荐

    图解TCP/IP协议

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

    tcp连接状态详解 描述了tcp协议常用的命令

    在建立连接时,客户端和服务器端会经历多个状态转移。首先,服务器端会进入 LISTEN 状态,等待来自客户端的连接请求。客户端发起连接请求,服务器端接受请求后,会响应 ACK 并发送 SYN 给客户端,进入 SYN_RCVD 状态...

    TCP/IP协议说明

    TCP的状态转移详解在“TCP状态转移详解.mp4”中会有详述,从CLOSED到ESTABLISHED,再到FIN_WAIT、CLOSE_WAIT、LAST_ACK等状态,每个状态代表了连接的不同阶段,理解这些状态转换对于排查网络问题和优化TCP连接至关...

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

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

    互联网面试常见问题

    6. **网络基础**:浏览器访问URL的完整过程,包括DNS解析、ARP请求、路由选择等,以及HTTP请求的生命周期和TCP状态转移。 7. **并发编程**:`select`和`epoll`的区别,这两个都是用于处理高并发I/O事件的机制。 ...

    Java网络编程--T/TCP实现:TCP用户请求

    但在T/TCP中,大部分处理被转移到了tcp_connect函数中,仅保留了基本的处理逻辑。当一个进程调用connect函数发起连接时,即使是T/TCP支持的两台主机,也会执行完整的三次握手流程。这是因为connect不能直接传递数据...

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

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

    Vpp tcp层代码解析.pdf

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

    利用TCP卸载技术提升网络处理器的应用性能

    TCP卸载技术,即Transmission Control Protocol Offload Engine (TOE),是一种旨在加速TCP/IP连接处理的技术,其核心在于将原本由主机CPU承担的复杂TCP处理任务转移到专门的TCP加速器上。这一技术有效解决了现代网络...

    TCP IP协议端口大全.txt

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

    tcp connect

    ### TCP Connect:TIME_WAIT状态下的TCP连接与繁忙服务器的影响 #### 概述 本文主要探讨了TCP协议在处理大量连接时遇到的问题,特别是在服务器端如何有效地管理这些连接以避免资源过度消耗的情况。TCP...

    状态机的使用

    每个状态代表系统可能存在的一个特定条件,而转换规则定义了在特定条件下,系统如何从一个状态转移到另一个状态。例如,在TCP连接中,我们可以有以下几种状态:CLOSED、LISTEN、SYN_SENT、SYN_RECEIVED、ESTABLISHED...

    基于FPGA的TCP段乱序重排设计与实现.pdf

    文章提出的TCP/IP硬件协议栈架构分为多个模块,包括链路层处理模块、IP层协议处理模块、TCP层处理模块以及TCP连接状态控制模块。链路层处理模块主要负责物理链路的数据接收和发送,包括万兆以太网媒体访问控制器...

    简易状态机学习成果_fpga_

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

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

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

    状态机 FSM 设计指导

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

    如何使用有限状态机及其应用

    3. **状态转移**:当特定事件发生时,状态机从当前状态转移到另一个状态。状态转移通常由一个条件表达式决定,只有满足这个条件时,状态转移才会发生。 4. **动作**:在状态转移过程中,可能会执行一些关联的操作,...

    haproxy安装 TCP转发

    1. **系统准备**:确保你的Linux系统是最新状态,安装必要的依赖库,例如在Debian/Ubuntu上运行`sudo apt-get update && sudo apt-get install build-essential libssl-dev`,在CentOS/RHEL上使用`yum install -y ...

    FSM有限状态机模拟例程

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

Global site tag (gtag.js) - Google Analytics