• 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的连接数,另一方面就是服务端可能阻塞了。
  • 相关阅读:
    三、Gradle初级教程——Gradle除了签名打包还能配置jar包
    四、Android Studio使用——什么样的Project都能导入Studio
    二、Android Studio使用——导入jar包,运行、debug都不是问题
    android-studio安装过程详解
    一、Android Studio入门——Eclipse快捷键配置
    84、PullToRefresh使用详解
    ViewPagerindicator 源码解析
    83、android的消息处理机制(图+源码分析)——Looper,Handler,Message
    82、文字混动效果
    Bogart BogartPublic.vb
  • 原文地址:https://www.cnblogs.com/littlecharacter/p/12154586.html
Copyright © 2020-2023  润新知