TCP状态

简介:

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

三次握手

452899-20160218211655941-98656049.png

图中的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


相关文章
|
网络协议
TCP协议的状态
TCP协议的状态
96 0
|
网络协议 Linux
TCP状态转换图文解说
TCP状态转换图文解说
227 0
TCP状态转换图文解说
|
监控 网络协议 网络安全
zabbix自定义TCP 11种状态监控模板(十四)
zabbix自定义TCP 11种状态监控模板 如果一直对多个主机同时增加监控项那么会非常麻烦,在实际生产中有很多时候我们都需要对一批机器同时增加多个相同的监控项,如果一个一个手动添加将会非常麻烦,因此就有了模板的诞生,我们只需要创建一个模板,让需要监控的主机链接模板即可
235 0
zabbix自定义TCP 11种状态监控模板(十四)
|
网络协议 安全 Linux
查看http的并发请求数与其TCP连接状态
查看http的并发请求数与其TCP连接状态
309 0
|
编解码 网络协议 网络架构
计算机网络基础 和 tcp 三次握手四次挥手,tcpdump抓包分析 协议过滤 分析,连接状态,标志位详解
wireshark 软件过滤及转码使用 ,TCP tcpdump 连接状态,标志位详解
239 1
|
网络协议
分析几种TCP状态转换中的非正常转换
  1、服务器从listen状态变成close状态的原因:   服务器在监听端口的时候,此时有些资源加载的有问题导致服务没开启,此时服务器会从listen状态变成closed状态。
944 0
|
网络协议 Linux PHP
TCP TIME_WAIT状态解析及问题解决
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhaobryant/article/details/80557158 一、TCP四次挥手过程 TCP在建立连接时需要握手,同理,在关闭连接的时候也需要握手。
2512 0
|
网络协议
《UNP》学习之TCP状态转换
CLOSED:TCP起始状态 LISTEN:绑定端口后进入listen状态,一般是服务端 SYN_SENT:发送SYN连接请求,主动打开连接的一方进入SYN_SENT SYN_RCVD:接收到SYN连接请求后进入SYN_RCVD,同时发送SYN,ACK。
1043 0