Java网络编程系列之TCP连接状态

1、TCP连接状态

  1. LISTEN:Server端打开一个socket进行监听,状态置为LISTEN
  2. SYN_SENT:Client端发送SYN请求给Server端,状态由CLOSED变为SYN_SENT
  3. SYN_RECV:Server端接收Client端发送的SYN请求,并回应ACK给Client端,同时发送SYN请求给Client端,状态由LISTEN变为SYN_RECV
  4. ESTABLISHED:Client端(接收Server端的ACK,状态由SYN_SENT变为ESTABLISHED)和Server端(接收Client端的ACk,状态由SYN_RECV变为ESTABLISHED)完成三次握手,状态置为ESTABLISHED,连接建立
  5. FIN_WAIT1:主动关闭端发出FIN请求主动关闭连接,状态由ESTABLISHED变为FIN_WAIT1
  6. CLOSE_WAIT:被动关闭端接收FIN请求,并回应ACK给主动关闭端,同时将FIN作为文件结束符发送给上层应用程序,状态由ESTABLISHED变为CLOSE_WAIT
  7. FIN_WAIT2:主动关闭端接收到ACK,状态由FIN_WAIT1变为FIN_WAIT2
  8. LAST_ACK:被动关闭端一段时间后,接收到文件结束符的上层应用程序,调用CLOSE关闭连接,此时被动关闭端会发送FIN请求给主动关闭端,状态由CLOSE_WAIT变为LAST_ACK
  9. TIME_WAIT:在主动关闭端接收到FIN请求,并回应ACK给被动关闭端,状态由FIN_WAIT2变为TIME_WAIT
  10. CLOSING:两端同时发起关闭请求时,会由FIN_WAIT1变为CLOSING
  11. CLOSED:1)被动关闭端收到主动关闭端的ACK,状态由LAST_ACK变为CLOSED;2)TIME_WAIT状态一段时间后,状态自动置为CLOSED
  12. UNKNOWN:未知的Socket状态,不正常
  • SYN:(同步序列编号,SynchronizeSequence Numbers)该标志仅在三次握手建立TCP连接时有效,表示一个新的TCP连接请求
  • ACK:(确认编号,AcknowledgementNumber)是对TCP请求的确认标志,同时提示对端系统已经成功接收所有数据
  • FIN:(结束标志,FINish)用来结束一个TCP回话.但对应端口仍处于开放状态,准备接收后续数据

2、TCP连接建立(三次握手)

3、TCP连接断开(四次挥手)

4、TCP连接状态分析

  1. 若服务器出现了大量TIME_WAIT状态的连接,说明该服务器经常主动发起连接关闭操作,并且连接还未及时关闭;这一方面会产生大量的无用连接,无故增加tcp的连接数,另一方面就是服务端主动关闭连接也不正常。
  2. 若一个系统频繁出现CLOSE_WAIT状态的连接,说明该系统并未立即处理连接关闭请求;这一方面会产生大量的无用连接,无故增加tcp的连接数,另一方面就是服务端可能阻塞了。
posted @ 2020-01-09 14:17  尜尜人物  阅读(1126)  评论(0编辑  收藏  举报