今天在调试一个服务器-客户端的架构,经常出现当结束一个程序的时候,出现TIME_WAIT的状态,于是查了下。
首先这个状态是TCP网络保证全双工可靠通信的一个方式,如果没有处理,一般保持一到四分钟就会解除。
然后还有点闲余时间,来复习下TCP:
我们可以通过下面命令来统计我们当前主机的链接状态:
$ netstat -ant|awk '/^tcp/ {++S[$NF]} END {for(a in S) print (a,S[a])}'
# 输出
LISTEN 36
ESTABLISHED 30
SYN_SENT 3
TIME_WAIT 84
TCP有以下状态:
状态 | 描述 |
---|---|
CLOSED | 无连接是活动的或正在进行 |
LISTEN | 服务器在等待进入呼叫 |
SYN_RECV | 一个连接请求已经到达,等待确认 |
SYN_SENT | 应用已经开始,打开一个连接 |
ESTABLISHED | 正常数据传输状态 |
FIN_WAIT1 | 应用说它已经完成 |
FIN_WAIT2 | 另一边已同意释放 |
ITMED_WAIT | 等待所有分组死掉 |
CLOSING | 两边同时尝试关闭 |
TIME_WAIT | 另一边已初始化一个释放 |
LAST_ACK | 等待所有分组死掉 |