TCP状态

TCP连接中包含不同的状态,如何通过状态来判断程序问题尤为重要。

三次握手

图中的connection部分为三次握手。

四次握手

图中的close部分为四次握手。

CLOSE_WAIT

服务器接受到FIN关闭请求后为CLOSE_WAIT状态。
默认情况下,CLOSE_WAIT状态会至少维持2小时的状态。
由于CLOSE_WAIT状态后应该发送ACK请求,状态会变为LAST_ACK,但如果由太多的CLOSE_WAIT状态,则服务器出现错误。

TIME_WAIT

客户端在接受到服务器的FIN关闭请求后为TIME_WAIT状态,最后会自动切换到CLOSE状态。
当服务器主动关闭链接时形成TIME_WAIT状态,会持续2个MSL(Max Segment Lifetime),默认为4分钟。

TIME_WAIT状态下的socket不能被回收使用,具体现象是对于一个处理大量短连接的服务器,如果由于服务器主动关闭客户端的连接,将导致服务器产生大量处于TIME_WAIT状态的socket,严重影响服务器的处理能力。

AWK和NETSTAT命令

# -n表示-net
netstat -n 

# -v用于定义参数
 netstat  -net | awk -v i=0,j=0 '{if ($6=="ESTABLISHED") {i++}; if ($6 == "CLOSE_WAIT") {j++}; print i, j, prit $6}'

# 最佳用法如下:
# 1. 使用正则/xxx/来匹配行
# 2. $NF代表最后一列的数据,命令中定义了一个字典,最后一列数据作为key
# 3. 每次匹配都会让value递增
# 4. END表示结束
# 5. 最后的{}用来打印key,value
netstat -n | awk '/^tcp/ {++S[$NF]} END {for (a in S) print a, S[a]}'

那么,如何对结果进行排序呢?

# 利用管道
netstat -n | awk '/^tcp/ {++S[$NF]} END {for (a in S) print a, S[a] | "sort -r -n -k2"}'

# 其中,sort为外部命令,-r代表从大到小(倒序),-n代表按照数字排序,-k2代表按照第2行排序。

此外,也可以使用asort来实现结果排序。
```


本文 由 cococo点点 创作,采用 知识共享 署名-非商业性使用-相同方式共享 3.0 中国大陆 许可协议进行许可。欢迎转载,请注明出处:
转载自:cococo点点 http://www.cnblogs.com/coder2012

时间: 2024-09-19 09:58:55

TCP状态的相关文章

Linux 网络编程 之 TCP状态转换

                                               Linux 网络编程 之 TCP状态装换                                                                       从上面的图中可以看出,TCP共有11状态.由TCP发送和接收的数据有:ACK, FIN, SYN,RST.对于一个还未调用connect的client和未调用listen的server来说,它们都处于CLOSED状态.ACK

《Linux高性能服务器编程》——3.4 TCP状态转移

3.4 TCP状态转移 TCP连接的任意一端在任一时刻都处于某种状态,当前状态可以通过netstat命令(见第17章)查看.本节我们要讨论的是TCP连接从建立到关闭的整个过程中通信两端状态的变化.图3-8是完整的状态转移图,它描绘了所有的TCP状态以及可能的状态转换. 图3-8中的粗虚线表示典型的服务器端连接的状态转移:粗实线表示典型的客户端连接的状态转移.CLOSED是一个假想的起始点,并不是一个实际的状态. 3.4.1 TCP状态转移总图 我们先讨论服务器的典型状态转移过程,此时我们说的连接

nagios监控tcp状态连接数的脚本

这是用shell开发的nagios插件,根据Nagios Plugin Development Guidelines和Nagios Plugin API编写,在前人的基础上进行补充,支持官方标准的-V.-c -v -t选项.插件主要思路是通过netstat命令获取tcp的各个状态连接,统计每个状态数量,最后按照标准的nagios插件格式输出检测信息和性能信息.监控那种状态,连接数多少警报,都可以通过脚本参数指定. nagios监控服务器,通过nrpe在被监控端执行检测脚本,并把检测脚本运行的状态

Linux中统计TCP状态命令

一行简单的命令就可以,比如我们要80端口的各个TCP链接状态:  代码如下 复制代码 netstat -n | grep `hostname -i`:80 |awk '/^tcp/{++S[$NF]}END{for (key in S) print key,S[key]}'

tcp 三次握手和四次断连深入分析:连接状态和socket API的关系

说到tcp协议,凡是稍微看过的人都能顺口说出三次握手和四次断连,再牛逼的一点的就能够把每个状态(SYNC_SENT.CLOSE_WAIT......等)都能背出来, 而说道socket编程,基本上写过网络编程的人都会熟悉那几个标准的API:socket.connect.listen.accept......等 但是,我敢打赌很少有人明白tcp状态和socket编程API之间的关系.不信? 看看如下几个问题你是否知道吧: 1)什么时候客户端才能够连接上server端, 是server端调用bind

tcp链接的几种状态&tcpdump抓包

linux服务器上的11种tcp状态   说明: 通常情况下:一个正常的TCP连接,都会有三个阶段:1.TCP三次握手;2.数据传送;3.TCP四次挥手 里面的几个概念: SYN: (同步序列编号,Synchronize Sequence Numbers) ACK: (确认编号,Acknowledgement Number) FIN: (结束标志,FINish) TCP三次握手(创建 OPEN) 客户端发起一个和服务创建TCP链接的请求,这里是SYN(J) 服务端接受到客户端的创建请求后,返回两

TCP连接状态详解及TIME_WAIT过多的解决方法

  TIME_WAIT状态原理 ---------------------------- 通信双方建立TCP连接后,主动关闭连接的一方就会进入TIME_WAIT状态. 客户端主动关闭连接时,会发送最后一个ack后,然后会进入TIME_WAIT状态,再停留2个MSL时间(后有MSL的解释),进入CLOSED状态. 下图是以客户端主动关闭连接为例,说明这一过程的.   TIME_WAIT状态存在的理由 ---------------------------- TCP/IP协议就是这样设计的,是不可避

TCP连接状态详解

tcp状态:   LISTEN:侦听来自远方的TCP端口的连接请求 SYN-SENT:再发送连接请求后等待匹配的连接请求 SYN-RECEIVED:再收到和发送一个连接请求后等待对方对连接请求的确认 ESTABLISHED:代表一个打开的连接 FIN-WAIT-1:等待远程TCP连接中断请求,或先前的连接中断请求的确认 FIN-WAIT-2:从远程TCP等待连接中断请求 CLOSE-WAIT:等待从本地用户发来的连接中断请求 CLOSING:等待远程TCP对连接中断的确认 LAST-ACK:等待

查看Apache并发请求数及其TCP连接状态

[文章作者:张宴 本文版本:v1.1 最后修改:2007.07.27 转载请注明出处:http://blog.s135.com] 这两天搭建了一组Apache服务器,每台服务器4G内存,采用的是prefork模式,一开始设置的连接数太少了,需要较长的时间去响应用户的请求,后来修改了一下Apache 2.0.59的配置文件httpd.conf: # prefork MPM# StartServers: number of server processes to start# MinSpareSer