TCP状态图,展示的是TCP从连接建立到连接关闭的整个生命周期,TCP的状态转换以及处理流程。TCP面向的是端口,Linux里面可以通过netstat -a
命令查看连接状态。笔者遇到Tomcat生成大CLOSE_WAIT状态的连接问题,故想了解一下TCP的连接机制。
TCP状态图纵览
TCP连接本质是点对点的,理论上无所谓服务器,客户端。不过总得有一个进程等待在那里,对外提供连接的服务,就称之为服务器。
下图是来源于Wikipedia的状态图,蓝线表示服务器的运行线路,棕色描述客户端。
总的来说,状态共4个。连接中、已连接、断开连接中、已断开。由于客户端,服务器角色,以及连接和断开的多步过程,使得状态图有点复杂。下面尝试拆开来看看。
TCP建立连接过程
TCP连接,三步握手,大家应该都很熟悉。
- 客户端发出SYN连接请求, Sequence设置为一个随机数A。
- 服务端回应SYN-ACK,ACK内容设置为A+1,Sequence设置为一个随机数B。
- 客户端回应ACK,ACK内容设置为B+1,Sequence设置为A+1。
TCP关闭连接过程
TCP关闭连接,4步握手。<