美文网首页让前端飞Web前端之路
TCP的连接建立——三报文握手

TCP的连接建立——三报文握手

作者: 淺時咣 | 来源:发表于2020-06-22 15:45 被阅读0次

    三报文握手的理解

    三报文握手(three way handshake)以前都称为三次握手,其实这是一次握手过程中交换中交换了三个报文,而并不是进行了三次握手。handshake使用的是单数并不是复数,表明只是一次握手。

    三报文握手图解

    图片1.png

    部分概念梳理

    1.SYN_SENT
    SYN_SENT表示请求连接,当你要访问其它的计算机的服务时首先要发个同步信号给该端口,此时状态为SYN_SENT,如果连接成功了就变为ESTABLISHED,此时SYN_SENT状态非常短暂。
    2.ACK
    ACK (Acknowledgement)即是确认字符,在数据通信中,接收站发给发送站的一种传输类控制字符。表示发来的数据已确认接收无误。
    3.SYN_RCVD(同步收到)
    4.ESTAB_LISHED(已建立连接)
    5.传输控制模块TCB
    传输控制模块TCB(Transmission Control Block)存储了每一个连接中的一些重要信息。

    三报文握手过程详解

    一开始,B的PCP服务器进程先创建传输控制模块TCB,准备接受客户进程的连接请求。然后服务器进程就处于LISTEN(收听)状态,等待客户的连接请求。
    1.SYN=1,seq=x
    A的TCP客户进程也是首先创建传输控制模块TCB,然后,在打算建立TCP连接时,向B发出请求报文段,这时首部中的同步位SYN=1,同时选择一个初始序号seq=x。即SYN=1,seq=x。TCP规定,SYN报文段(即SYN=1的报文段)不能携带数据,但要消耗一个序号。这时,TCP客户进程进入SYN_SENT(同步已发送)状态。
    2.SYN=1,ACK=1,seq=y,ack=x+1
    B收到连接请求报文段后,如同意建立连接,则向A发送确认。在确认报文段中应把SYN位和ACK位都置1,确认号是ack=x+1,同时也为自己选择一个初始号seq=y。即SYN=1,ACK=1,seq=y,ack=x+1
    请注意:这个报文段也不能携带数据,但同时要消耗一个序号。这时TCP服务器进程进入SYN_RCVD(同步收到)状态。
    3.ACK=1,seq=x+1,ack=y+1
    TCP客户进程收到B的确认后,还要向B给出确认。确认报文段的ACK置1,确认号ack=y+1,而自己的序号seq=x+1。即ACK=1,seq=x+1,ack=y+1TCP的标准规定,ACK报文段可以携带数据。但如果不携带数据则不消耗序号,在这中情况下,下一个数据报文段仍然是seq=x+1。这时。TCP连接已经建立,A进入ESTAB_LISHED(已建立连接)状态。
    4.当B收到A的确认后,也进入ESTAB_LISHED状态。

    相关文章

      网友评论

        本文标题:TCP的连接建立——三报文握手

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