`
liujianguangaaa
  • 浏览: 235205 次
  • 性别: Icon_minigender_1
  • 来自: 湖南
社区版块
存档分类
最新评论

tcp 连接的11种状态–转载

阅读更多

 

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

:TCP的状态机

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

:以下说明最好能结合: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的连接中断请求,或先前的连接中断请求的确认 */

6)
CLOSE_WAIT:被动关闭(passive close)TCP接到FIN后,就发出ACK以回应FIN请求(它的接收也作为文件结束符传递给上层应用程序),并进入CLOSE_WAIT. /* The remote end has shut down, waiting for the socket to close. 等待从本地用户发来的连接中断请求 */


7)
FIN_WAIT2:主动关闭端接到ACK后,就进入了FIN-WAIT-2 ./* Connection is closed, and the socket is waiting for a shutdown from the remote end. 从远程TCP等待连接中断请求 */


8) 
LAST_ACK:被动关闭端一段时间后,接收到文件结束符的应用程序将调用CLOSE关闭连接。这导致它的TCP也发送一个 FIN,等待对方的ACK.就进入了LAST-ACK . /* The remote end has shut down, and the socket is closed. Waiting for acknowledgement. 等待原来发向远程TCP的连接中断请求的确认 */

9)
TIME_WAIT:在主动关闭端接收到FIN后,TCP就发送ACK包,并进入TIME-WAIT状态。/* The socket is waiting after close to handle packets still in the network.等待足够的时间以确保远程TCP接收到连接中断请求的确认 */

10)CLOSING: 比较少见./* Both sockets are shut down but we still don’t have all our data sent. 等待远程TCP对连接中断的确认 */


11)
CLOSED: 被动关闭端在接受到ACK包后,就进入了closed的状态。连接结束./* The socket is not being used. 没有任何连接状态 */

TIME_WAIT状态的形成只发生在主动关闭连接的一方。

主动关闭方在接收到被动关闭方的FIN请求后,发送成功给对方一个ACK,将自己的状态由FIN_WAIT2修改为TIME_WAIT,而必须再等2MSL(Maximum Segment Lifetime,MSL是一个数据报在internetwork中能存在的时间)时间之后双方才能把状态 都改为CLOSED以关闭连接。目前RHEL里保持TIME_WAIT状态的时间为60秒。

当然上述很多TCP状态在系统里都有对应的解释或设置,可见man tcp

二、关于长连接和短连接:

通俗点讲:短连接就是一次TCP请求得到结果后,连接马上结束.而长连接并不马上断开,而一直保持着,直到长连接TIMEOUT(具体程序都有相关参数说明).长连接可以避免不断的进行TCP三次握手和四次挥手.

长连接(keepalive)是需要靠双方不断的发送探测包来维持的,keepalive期间服务端和客户端的TCP连接状态是ESTABLISHED.目前http 1.1版本里默认都是keepalive(1.0版本默认是不keepalive)ie6/7/8firefox都默认用的是http 1.1版本了(如何查看当前浏览器用的是哪个版本,这里不再赘述)Apache,java

一个应用至于到底是该使用短连接还是长连接,应该视具体情况而定。一般的应用应该使用长连接。

1Linux的相关keepalive参数

a tcp_keepalive_time – INTEGER
How often TCP sends out keepalive messages when keepalive is enabled.
Default: 2hours.

b tcp_keepalive_probes – INTEGER
How many keepalive probes TCP sends out, until it decides that the
connection is broken. Default value: 9.

c tcp_keepalive_intvl – INTEGER
How frequently the probes are send out. Multiplied by
tcp_keepalive_probes it is time to kill not responding connection,
after probes started. Default value: 75sec i.e. connection
will be aborted after ~11 minutes of retries.

2F5负载均衡上的相关参数说明

aKeep Alive Interval

Specifies, when enabled, how frequently the system sends data over an idle TCP connection, to determine whether the connection is still valid.

Specify: Specifies the interval at which the system sends data over an idle connection, to determine whether the connection is still valid. The default is 1800 milliseconds.

bTime Wait

Specifies the length of time that a TCP connection remains in the TIME-WAIT state before entering the CLOSED state.

Specify: Specifies the number of milliseconds that a TCP connection can remain in the TIME-WAIT state. The default is 2000.

cIdle Timeout

Specifies the length of time that a connection is idle (has no traffic) before the connection is eligible for deletion.

Specify: Specifies a number of seconds that the TCP connection can remain idle before the system deletes it. The default is 300 seconds.

3Apache的相关参数说明

以下是Apache/2.0.61版本的默认参数和说明

aKeepAlive:

default On.Whether or not to allow persistent connections (more than

one request per connection). Set to “Off” to deactivate.

bMaxKeepAliveRequests:

default 100.The maximum number of requests to allow

during a persistent connection. Set to 0 to allow an unlimited amount.

We recommend you leave this number high, for maximum performance.

cKeepAliveTimeout:

default 15. Number of seconds to wait for the next request from the

same client on the same connection.

4JAVA1.6的相关参数说明:

ahttp.keepAlive=<boolean>
default: true

Indicates if keep alive (persistent) connections should be supported.

bhttp.maxConnections=<int>
default: 5

Indicates the maximum number of connections per destination to be kept alive at any given time

 

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

相关推荐

    labview tcp 检查连接状态.png

    labview tcp 检查连接状态.png labview tcp 检查连接状态.png

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

    TCP 连接状态详解 TCP 连接状态是指在 TCP 协议中,连接的不同阶段所对应的状态。这些状态包括 LISTEN、SYN-SENT、SYN-RECEIVED、ESTABLISHED、FIN-WAIT-1、FIN-WAIT-2、CLOSE-WAIT、CLOSING、LAST-ACK、TIME-WAIT...

    Window下杀掉TCP连接

    2. **命令提示符**:使用`netstat`命令可以查看当前的TCP连接状态。输入`netstat -ano`可以看到所有活动连接,包括PID(进程ID)。找到目标连接,然后使用`taskkill`命令结束对应进程,如`taskkill /F /PID 进程ID`...

    tcp 连接数设置,以及查看电脑的连接数

    TCP(Transmission Control Protocol)是一种广泛使用的传输层协议,它在互联网通信中扮演着至关重要的角色。TCP连接数指的是同一时间一个计算机系统通过TCP协议能够建立的并发连接的数量。这个值通常受到操作系统、...

    C#连接ModbusTCP连接示例

    在IT行业中,ModbusTCP是一种广泛使用的通信协议,主要用于工业自动化设备之间的数据交换,例如PLC(可编程逻辑控制器)。本示例将介绍如何在C#编程环境下,利用WinForm和WPF这两种用户界面技术来实现与PLC设备的...

    WindowsTCP 连接数 修改

    TCP连接数修改TCP连接数修改TCP连接数修改TCP连接数修改

    设计模式:状态模式TCPConnection案例

    在TCP连接中,状态模式的应用尤为常见,因为TCP连接在不同的阶段会有不同的行为,比如建立连接、数据传输、断开连接等。下面我们将详细探讨这个模式以及如何在TCP连接的案例中应用。 首先,我们来理解状态模式的...

    TCP/UDP连接状态查看

    TCP是一种面向连接的、可靠的协议,而UDP则是一种无连接的、不可靠的协议。了解并能够查看TCP/UDP连接状态对于网络管理和故障排查至关重要。 标题“TCP/UDP连接状态查看”指向的是一个功能,允许我们监控本地系统上...

    Linux 下tcp 连接迁移技术

    Linux 下 TCP 连接迁移技术是一种基于 TCP 连接迁移的负载均衡方法,它可以将一个 TCP 连接的一个端点迁移到另一个节点,而整个迁移过程对于连接的另一端点来说是透明的。这种技术可以大大减轻前端服务器的负担,...

    查看系统的TCP连接情况

    1. TCP连接的原理:TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议。在TCP连接建立之前,需要经过三次握手来确保双方都能正常通信。在连接过程中,每个TCP连接都有一个唯一的标识,即源IP地址、源端口号...

    易语言监控TCP连接

    易语言监控TCP连接源码,监控TCP连接,GetPort,GetAscIP,API_GetTcpTable,API_LocalSize,API_CopyMemory,API_inet_ntoa,API_lstrlen,API_ntohs

    TCP长短连接简单Demo

    TCP连接分为长连接和短连接,这两种连接方式各有其特点和适用场景。本Demo是用C++语言在VS2017环境下编写的,旨在帮助开发者理解TCP长连接和短连接的实现。 首先,我们要理解TCP连接的基本概念。TCP是一种面向连接...

    通过T-DIAG指令对S7或TCP通信进行连接状态诊断的具体方法.docx

    总的来说,T-DIAG指令是诊断和维护S7和TCP通信的关键工具,它提供了一种直观且有效的方法来监控PLC通信连接的状态。通过熟练掌握T-DIAG的使用,工程师可以在出现通信问题时迅速定位和解决,保证自动化系统的正常运行...

    tcp关闭连接tcp关闭连接

    tcp关闭连接tcp关闭连接tcp关闭连接tcp关闭连接tcp关闭连接tcp关闭连接tcp关闭连接tcp关闭连接tcp关闭连接tcp关闭连接tcp关闭连接tcp关闭连接tcp关闭连接tcp关闭连接tcp关闭连接tcp关闭连接tcp关闭连接tcp关闭连接...

    TCP连接状态检查指令

    服务器网站故障分析常用的命令,包括很多种情况下的使用命令,如cat access.log |awk ‘{sum+=$10} END {print sum/1024/1024/1024}’

    TCPView查看TCP连接

    1. **查看连接状态**:TCPView会列出所有活动的TCP连接,包括本地IP地址、远程IP地址、本地端口、远程端口以及连接状态(如ESTABLISHED、LISTENING等)。这对于识别占用大量带宽或者异常的连接非常有帮助。 2. **...

    查看TCP连接数

    查看TCP连接数 1)统计80端口连接数 netstat -nat|grep -i "80"|wc -l 2)统计httpd协议连接数 ps -ef|grep httpd|wc -l 3)、统计已连接上的,状态为“established netstat -na|grep ESTABLISHED|wc -l

    tcp连接出现close_wait状态?_tcp_close_

    TCP(Transmission Control Protocol)是一种面向连接的、可靠的传输层协议,它在互联网通信中起着至关重要的作用。当TCP连接出现“Close_Wait”状态时,通常意味着客户端已经关闭了发送方向服务器的数据传输,但...

    TCP中长连接短连接

    本文将详细探讨TCP中的长连接和短连接,这两种连接方式在实际应用中的差异和选择。 长连接,也称为持久连接,指的是客户端(Client)与服务器端(Server)在完成连接建立后,保持连接状态不立即断开,以便于进行多...

Global site tag (gtag.js) - Google Analytics