通常情况下:一个正常的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的连接中断请求,或先前的连接中断请求的确认 */
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,而必须再等2倍 的MSL(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/8和firefox都默认用的是http 1.1版本了(如何查看当前浏览器用的是哪个版本,这里不再赘述)。Apache,java
一个应用至于到底是该使用短连接还是长连接,应该视具体情况而定。一般的应用应该使用长连接。
1、Linux的相关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.
2、F5负载均衡上的相关参数说明
a、Keep 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.
b、Time 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.
c、Idle 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.
3、Apache的相关参数说明
以下是Apache/2.0.61版本的默认参数和说明
a、KeepAlive:
default On.Whether or not to allow persistent connections (more than
one request per connection). Set to “Off” to deactivate.
b、MaxKeepAliveRequests:
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.
c、KeepAliveTimeout:
default 15. Number of seconds to wait for the next request from the
same client on the same connection.
转载请注明出处。http://www.vimer.cn
相关推荐
以下是Linux服务器上11种网络连接状态以及TCP的三次握手和四次挥手的详解: 1. **LISTEN**:这是服务端启动监听的状态,服务器创建一个socket并将其置于监听模式,等待来自客户端的连接请求。 2. **SYN_SENT**:当...
"netstat 命令在 Linux 服务器网络连接状态查看中的应用" Netstat 命令是一个功能强大且广泛使用的网络命令行工具,能够显示网络连接、路由表和网络接口信息。通过使用 Netstat 命令,系统管理员可以实时查看 Linux...
通过上述步骤,可以实现在Windows 7客户端远程连接Linux服务器上的Oracle 10g数据库。这不仅涉及到网络配置、监听器配置,还需要正确配置客户端和服务端的相关文件,以确保连接的顺利进行。此外,了解如何通过Java...
A:请检查网络连接和服务器状态,确保网络连接正常和服务器状态良好。 Q:如何解决文件传输速度慢的问题? A:请检查网络带宽和服务器负载,确保网络带宽足够和服务器负载合理。 Q:如何解决登录失败的问题? A:...
Linux服务器巡检报告是针对Linux系统进行定期检查...综上所述,Linux服务器巡检是一个综合性的过程,涉及硬件状态、操作系统运行情况和系统性能等多个层面,通过定期巡检可以有效预防故障,保证服务器的高效稳定运行。
这款服务器程序使得Linux系统能够作为Modbus网络中的服务节点,接收和发送Modbus协议的数据。 在描述中提到,这个程序是"可以直接运行"的,意味着它可能包含一个可执行文件,用户无需编译即可在支持Linux的设备上...
### Linux TCP服务器连接时发不出数据问题分析 #### 背景概述 本文主要探讨了在Linux环境下,当TCP服务器与客户端建立连接后,服务器在某些情况下无法向客户端正常发送数据的问题。具体场景为:服务器与两个客户端...
1. **Ansible**:Ansible是一款流行的自动化工具,不仅限于服务器连接,还能进行配置管理、应用部署等。它使用YAML语言编写playbooks,实现自动化任务的定义,无需在目标主机上安装任何代理。 2. **Fabric**:...
Linux服务器巡检报告是IT运维中的重要环节,其目的是确保服务器稳定、高效地运行,防止潜在问题引发的服务中断。这份报告通常包括多个方面,如硬件检查、操作系统状态、性能监控、安全评估和网络状况等。 首先,...
SSH(Secure Shell)是一种网络协议,用于在不安全的网络上提供安全的远程登录和其他服务。它是Linux系统管理员和IT专业人员与远程Linux服务器进行通信的常用工具。SSH通过加密所有传输的数据,确保了敏感信息的安全...
在Linux环境下,构建一个最小的RTSP(Real Time Streaming Protocol)服务器是一项有趣且实用的实践,对于想要深入了解网络流媒体协议以及系统编程的初学者来说尤其有价值。RTSP是一种应用层协议,主要用于控制实时...
### Linux服务器巡检手册知识点详解 #### 一、巡检目的 Linux服务器巡检是确保服务器稳定、高效运行的关键步骤之一。通过对服务器进行定期检查,可以及时发现并解决潜在问题,预防故障的发生,保证业务的连续性和...
### AX100系列 安装Linux服务器连接存储系统 #### AX100技术支持网站 AX100技术支持网站提供了大量的资源和支持材料,包括但不限于发行说明、最新的文档以及交互式的故障排除工具。为了确保顺利安装AX100系列光纤...
下面将详细介绍这两个工具的功能、使用方法以及它们在Linux服务器连接中的作用。 Xshell5是一款强大的终端模拟器,它支持多种协议,如SSH1、SSH2、Telnet、Rlogin和Serial。通过Xshell5,用户可以在Windows环境下...
本实例"实例101 Linux下编程实现服务器与客户端的连接"主要涵盖了网络编程的基础知识,以及如何在Linux系统中应用这些知识来创建服务端和客户端程序。下面我们将深入探讨相关知识点。 首先,我们要了解的是TCP/IP...
通过命令可以查看网络服务的状态,例如网络接口状态、网络连接状态、网络带宽使用率等信息。 安全检查 安全检查是 Linux 服务器巡检的重要组成部分。通过命令可以查看系统的安全状态,例如系统的防火墙状态、系统...
总的来说,实现Linux服务器客户端1对1聊天程序涉及了网络编程的基础知识,包括Socket的创建、连接、数据交换以及错误处理等。通过阅读和理解`server1.c`和`client1.c`的源代码,我们可以深入学习这些概念,并且可以...
- `netstat`展示网络连接状态,`ss`提供更现代的网络连接信息。 - 配置文件如`/etc/network/interfaces`或`/etc/sysconfig/network-scripts/`下的配置文件,用于检查网络配置。 5. **磁盘和存储问题**: - `df`...
- 在中国石油大学的计算机网络课程中,实验二的示例代码展示了如何实现一个简单的Linux服务器程序,它能接收来自客户端的连接并发送欢迎消息。 理解这些基本概念和函数的使用是开发Linux服务器和客户机程序的基础...
Linux服务器搭建是一个涵盖广泛的主题,涉及系统安装、网络配置、安全设置、服务管理等多个环节。以下是一些关于Linux服务器搭建的重要知识点,旨在帮助你构建一个稳定、高效且安全的服务器环境。 1. **系统选择与...