1. Client、Server建⽴立连接1.1 客户端
1.2 服务端
1.3 序列列图
2.Client 、Server 数据传输
序列列图
3.Client、Server
4.1 客户 端TIME_WAIT 增多4.2 服务端 CLOSE_WAIT 增多
4.2.1 基本概念
4.2.2 ⽣生命周期:不不关闭socket描述符的⼀一⽅方, 情况1:应⽤用A与mysql之间,mysql主动关闭连接,
参考: 《Unix⽹网络编程卷1:套接字联⽹网API(第3版).pdf 2.6 tcp连接的建⽴和终止》
$man netstat
1. Client、Server建⽴立连接
1.1 客户端
ClOSED ->SYN_SENT ->ClOSED (connect超时或应⽤用关闭时)
ClOSED ->SYN_SENT ->ESTABLISHED ->FIN_WAIT_1->FIN_WAIT_2->TIME_WAIT---->2msl超时
ClOSED
1.2 服务端
LISTEN->ESTABLISHED ->CLOSE_WAIT->LAST_ACK-->CLOSED
1.3 序列列图

2.Client 、Server 数据传输
2.1 序列列图

3.Client、Server 断开连接
Client
Server
4 特殊情况
4.1 客户 端TIME_WAIT 增多
4.2 服务端 CLOSE_WAIT 增多4.2.1 基本概念
某个应⽤用程序在ESTABLISHED状态期间接受到⼀一个FIN(被动关闭),状态转为CLOSED_WAIT⻓长时间CLOSE_WAIT,接收被动关闭FIN的应⽤用⽅方没有关闭socket描述符。
netstat命令⾏行行
Recv-Q 此列列的值通常应该为0,也可以短暂的不不为0,如果这个数值过⼤大,说明接收队列列有数据堆 积。 如果常时间不不为0有可能遭受到了了denial-of-service(拒绝服务)攻击,也就是我们常说的DoS攻 击。简单的讲就是把你带宽或者资源消耗完,⽆无法正常为真正需要服务的⽤用户提供服务直到崩溃。Send-Q表示⽹网络发送队列列 a) 此列列的值也通常应该为0,也可以短暂的不不为0,如果这个数值过⼤大,发 明发送队列列有数据堆积。如果常时间不不为0有可能是向外发送数据过快,或者对⽅方接收太慢,导致发 出去的数据还停留留在本地缓冲区
## Recv-Q ⼤大于零
$netstat -anp |grep ..
Proto Recv-Q Send-Q Local Address State PID/Program name
tcp 1 0 XXX.XXX.XXX.110:41064 CLOSE_WAIT 18553/Server
Foreign AddressXXX.XXX.XXX.135:3306
4.2.2 ⽣生命周期:不不关闭socket描述符的⼀一⽅方,接收FIN的应⽤用,处于CLOSE_WAIT,如果不不关闭socket描述符,在进程未结束前,会⼀一直存在,
情况1:应⽤用A与mysql之间,mysql主动关闭连接,
应⽤用A与mysql之间建⽴立连接con,状态 双⽅方ESTABLISHED,mysql会话超时后主动关闭连接
应⽤用A接收⼀一个FIN(被动关闭),应⽤用A没有执⾏行行关闭数据库连接,会导致应⽤用A⼀一致处于CLOSE_WAIT状态。





