美文网首页
TCP状态图

TCP状态图

作者: smallmuou | 来源:发表于2017-05-05 17:33 被阅读209次

    在使用netstat发现有个State字段,于是脑补了下,发现水还是蛮深的,以前只了解三次握手、四次握手,并没有了解其中的状态,现在有幸能够接触,大家可以直接Google搜索TCP状态图,会出现经典的状态图,如下:

    image

    我这里将对其进行整理,方便大家理解,看图前,先看下后面用到的术语:

    • S - 表示发送
    • R - 表示接收

    连接建立阶段(三次握手)

    CLOSED                                 ESTABLISH
      |                                        |
      |---------------- CLIENT ----------------|
      |                                        |
      |           SYN_SEND                     |
      |              |                         |
      |              |       R: SYN ACK        |
      |------------->|------------------------>|
      |    S: SYN    |          S: ACK         |
      |              |                         |
      |                                        |
      |                                        |
      |                                        |
      |---------------- SERVER ----------------|
      |                                        |
      |           LISTEN        SYN_RECV       |
      |              |              |          |
      |     OPEN     |    R: SYN    |  R: ACK  |
      |------------->|------------->|--------->|
      |              |  S: SYN ACK  |          |
      |              |              |          |
      |              |    R: RST    |          |
      |              |<-------------|          |
      |              |              |          |
    
    
    • CLIENT - 客户端
    • SERVER - 服务端
    • CLOSED - 关闭态
    • ESTABLISH - 连接态
    • LISTEN - 监听态(被动打开)
    • SYN_SEND - SYN发送态(已发送SYN)
    • SYN_RECV - SYN接收态(已接收SYN,并发送ACK)
    • 三次握手: 客户端发送SYN -> 服务端接收SYN,并发送SYN、ACK --> 客户端接收SYN、ACK,并发送ACK
    • RST - 复位指令,SYN_RECV在接收到RST可以回到LISTEN,主要用于处理异常连接,至于什么情况会出现RST,可以点击此传送门

    连接释放阶段(四次握手)

    ESTABLISH                                        CLOSED
      |                                                 |
      |--------------------- ACTIVE --------------------|
      |                                                 |
      |         FIN_WAIT_1   FIN_WAIT_2  TIME_WAIT      |
      |              |            |          |          |
      |              |   R: ACK   |  R: FIN  |   2MSL   |
      |------------->|----------->|--------->|--------->|
      |    S: FIN    |            |  S: ACK  |          |
      |              |            |          |          |
      |              |            |          |          |
      |              |     R: FIN ACK        |          |
      |              |---------------------->|          |
      |              |       S: ACK          |          |
      |              |                       |          |
      |              |                       |          |
      |              |         CLOSING       |          |
      |              |   R: FIN   |  R:ACK   |          |
      |              |----------->|--------->|          |
      |              |   S: ACK   |          |          |
      |                                                 |
      |                                                 |
      |-------------------- PASSIVE --------------------|
      |                                                 |
      |          CLOSE_WAIT     LAST_ACK                |
      |              |              |                   |
      |    R: FIN    |              |      R: ACK       |
      |------------->|------------->|------------------>|
      |    S: ACK    |    S: FIN    |                   |
      |              |              |                   |
    
    
    • ACTIVE - 主动方
    • PASSIVE - 被动方
    • CLOSED - 关闭态
    • ESTABLISH - 连接态
    • FIN_WAIT_1 - 主动发送FIN
    • CLOSE_WAIT - 收到FIN,并发送ACK
    • FIN_WAIT_2 - 主动发送FIN后,并接收到ACK
    • LAST_ACK - 被动方进入CLOSE_WAIT后,再次发送FIN
    • CLOSING - 当发出FIN的时候同时收到FIN,则进入CLOSING态(同时关闭)
    • TIME_WAIT - 等待结束态
    • 2MSL - 2倍报文最大生存时间,为什么需要2倍,因为当被动方发现收不到ACK,则会重发FIN,因此需要等待2倍MSL来预留需要再次发送ACK的时间
    • 四次握手:主动方发送FIN -> 被动方接收FIN,并发送ACK -> 被动方发送FIN -> 主动方接收FIN,并发送ACK

    其他

    另外,分享一篇文章《TCP 那些事

    相关文章

      网友评论

          本文标题:TCP状态图

          本文链接:https://www.haomeiwen.com/subject/jbjstxtx.html