2024年3月9日发(作者:)

一、Linux服务器上11种网络连接状态:

图:TCP的状态机

通常情况下:一个正常的TCP连接,都会有三个阶段:1、TCP三次握手;2、数据传送;3、

TCP四次挥手

注:以下说明最好能结合”图:TCP的状态机”来理解。

SYN: (同步序列编号,Synchronize Sequence Numbers)该标志仅在三次握手建立

TCP连接时有效。表示一个新的TCP连接请求。

ACK: (确认编号,Acknowledgement Number)是对TCP请求的确认标志,同时提示对

端系统已经成功接收所有数据。

FIN: (结束标志,FINish)用来结束一个TCP回话.但对应端口仍处于开放状态,准备接收

后续数据。

1)、LISTEN:首先服务端需要打开一个socket进行监听,状态为LISTEN. /* The socket

is listening for incoming connections. 侦听来自远方TCP端口的连接请求 */

2)、SYN_SENT:客户端通过应用程序调用connect进行active open.于是客户端tcp

发送一个SYN以请求建立一个连接.之后状态置为SYN_SENT. /*The socket is actively

attempting to establish a connection. 在发送连接请求后等待匹配的连接请求 */

3)、SYN_RECV:服务端应发出ACK确认客户端的SYN,同时自己向客户端发送一个

SYN. 之后状态置为SYN_RECV /* A connection request has been received from the

network. 在收到和发送一个连接请求后等待对连接请求的确认 */

4)、ESTABLISHED: 代表一个打开的连接,双方可以进行或已经在数据交互了。/* The

socket has an established connection. 代表一个打开的连接,数据可以传送给用户 */

5)、FIN_WAIT1:主动关闭(active close)端应用程序调用close,于是其TCP发出FIN

请求主动关闭连接,之后进入FIN_WAIT1状态./* The socket is closed, and the

connection is shutting down. 等待远程TCP的连接中断请求,或先前的连接中断请求的

确认 */