zoukankan      html  css  js  c++  java
  • TCP三次握手&四次挥手

    一:学英语

    Client: 客户端

    Server: 服务端

    CLOSED: 关闭,表示主机的连接处于关闭状态。

    LISTEN: 监听,表示主机处于监听状态,等待被连接。

    SYN: Synchronize Sequence Numbers,同步序列编号。是TCP/IP建立连接时使用的握手信号。

    SYN_SEND: Synchronize Sequence Numbers Send,同步序列号已发送。

    SYN_RCVD: Synchronize Sequence Numbers Send Received,同步序列号已接收。

    ACK: Acknowledge character,确认字符,表示发来的数据已确认接收无误。

    ESTABLISHED: 已经建立连接,TCP:连接成功。

    FIN_WAIT: Finish Wait,终止等待,请求关闭连接。是TCP/IP关闭连接时使用的挥手信号。

    CLOSE_WAIT: 关闭等待,会被动关闭连接。

    TIME_WAIT: 时间等待,会主动关闭连接。

    LAST_ACK: Last Acknowledge character,最后的确认,确认后,TCP:连接关闭。

    二:半连接池

    客户端发送请求后,服务端会先将SYN请求放进半连接池。
    如果半连接池只能存放5个SYN请求,那么第6个SYN请求会无法进入。
    在连接池内的SYN请求并不会马上获得响应,而是像队列一样,先进先出,一个一个地获得服务端的回应。

    三:3次握手

    1.纯英文(看不懂)版

    • 一开始:客户端(Client) 和 服务端(Server) 都处于 关闭(Closed)状态,服务端(Server) 处于监听状态(Listen)。

    1.客户端(Client) :我请求连接你(SYN=1),我的身份是Client(seq=J)。

    • 此时,客户端(Client) :关闭状态(Closed) ——> 请求已发送状态(SYN_SEND)

    2.服务端(Server) :我收到你的连接请求了(ACK=1),我确认你的身份了(ack=J+1),你可以连接了;我也要连接你(SYN=1),我的身份是(seq=K)。

    • 此时, 服务端(Server) :监听状态(Listen) ——> 请求已接收状态(SYN_SEND)(半连接状态)

    3.客户端(Client) :我也收到你的连接请求了(ACK=1),我确认你的身份了(ack=K+1),你也可以连接了。

    • 此时, 客户端(Client) : 请求已发送状态(SYN_SEND) ——> 连接已建立状态(ESTABLISHED)

    • 之后, 服务端(Server) :请求已接收状态(SYN_SEND) ——> 连接已建立状态(ESTABLISHED)

    2.中文(看得懂)版

    3.通俗版

    背景:A区和B区之间交通不太好,需要修高速公路(都是单向的)

    ①A区:我是A区,我想要修一条到B区的(单向)高速公路,可以吗?
    ②B区:我知道了,你修吧!我是B区,我也想修一条到A区的(单向)高速公路,可以吗?
    ③A区:我知道了,你修吧!

    四:4次挥手

    1.纯英文(看不懂)版

    • 一开始:客户端(Client) 和 服务端(Server) 都处于 连接已建立状态(ESTABLISHED)。

    1.客户端(Client) :我数据传完了 请求断开连接(FIN=1),我的身份是Client(seq=J)。

    • 此时,客户端(Client) :连接已建立状态(ESTABLISHED) ——> 终止等待状态1(FIN_WAIT_1)

    2.服务端(Server) :我收到你断开的连接请求了(ACK=1),我确认你的身份了(ack=J+1),你可以断开连接了;我数据还没传完(seq=K)。

    • 此时, 服务端(Server) :连接已建立状态(ESTABLISHED) ——> 关闭等待状态1(CLOSE_WAIT)
    • 此时,客户端(Client) :终止等待状态1(FIN_WAIT_1) ——> 终止等待状态2(FIN_WAIT_2)

    3.服务端(Server) :好了 我数据传完了 请求断开连接(FIN=1),我的身份是Server(seq=L)。

    • 此时, 服务端(Server) :关闭等待状态1(CLOSE_WAIT) ——> 最后确认状态(LAST_ACK)

    4.客户端(Client) :我收到你的断开连接请求了(ACK=1),我确认你的身份了(ack=L+1),你可以断开连接了。

    • 此时, 客户端(Client) : 终止等待状态2(FIN_WAIT_2) ——> 时间等待状态(TIME_WAIT) ——等待2MSL—— 连接关闭状态(CLOSED)

    • 之后, 服务端(Server) :最后确认状态(LAST_ACK) ——> 连接关闭状态(CLOSED)

    2.中文(看得懂)版

    3.通俗版

    背景:A区和B区中间要建立开发区了,需要拆除高速公路

    ①A区:我是A区 我高速公路上的车辆都清空了,我要拆高速公路了
    ②B区:好的,你拆吧!我还没清空车辆
    ③B区:我是B区,我高速公路上的车辆也清空了,我要拆高速公路了
    ⑤A区:好的,你拆吧!
  • 相关阅读:
    idea的常识
    开发工具
    常用的正则表达式
    比较器
    索引
    final区别
    GC
    String StringBuffer
    类库
    线程的操作状态
  • 原文地址:https://www.cnblogs.com/xuexianqi/p/13493126.html
Copyright © 2011-2022 走看看