zoukankan      html  css  js  c++  java
  • TCP/IP的三次握手和四次挥手

    从一个小故事开始:

    三次牵手:
    男:我喜欢你。
    女:我知道了,我也喜欢你。
    男:我知道了,那我们在一起吧。
    四次分手:
    男:我不喜欢你了,我要和你分手。
    女:我知道到了,等我先打完这把王者荣耀再说。
    女:我打完了,我也不喜欢你了,我要和你分手。
    男:我知道了,同意分手。

    序列号与确认号的含义

    ACK=1:确认序号有效;

    SYN=1:发起一个新连接;

    FIN=1:释放一个连接;

    seq = x:本报文段发送的数据的第一个字节的序号

    ACK=1, ack = y:期待收到对方下一个报文段的第一个字节的序号。

    三次握手

     第一次握手

    客户端  ------->>SYN=1,seq=x ---------->>服务器     客户端进入 SYN-SENT 状态(在发送连接请求后等待匹配的连接请求)

    注:客户端向服务器发起一个连接,并发送一个第一个字节的序号为x的报文字段

    第二次握手

    服务器 ------->>SYN=1,ACK=1,seq=y,ack=x+1 ---------->>客户端      服务器端进入 SYN-RCVD 状态  (在收到和发送一个连接请求后等待对连接请求的确认)

    注:服务器向客户端发起一个连接,并发送一个随机产生一个值 seq=y,确定发出的序号有效,并向客户端发送期待下次接受到一个第一个字节的序号为x+1的报文字段

    第三次握手

     客户端  -------->> ACK=1,seq=x+1,ack=y+1----------->>服务器    客户端和服务器端进入 ESTABLISHED 状态   ( 代表一个打开的连接,数据可以传送给用户)

    注:客户端收到确认后,检查 ack 是否为 x+1,ACK 是否为 1,如果正确则将标志位 ACK 置为 1,ack=y+1,并将该数据包发送给服务器端,服务器端检查 ack是否为 y+1,ACK 是否为 1,如果正确则连接建立成功

    四次挥手

    第一次挥手

    客户端 -------->>FIN=1,seq=u ---------->>服务器       客户端进入 FIN-WAIT-1 状态   (等待远程 TCP 的连接中断请求,或先前的连接中断请求的确认)

     注:客户端进程发出连接释放报文,并且停止发送数据。释放数据报文首部,FIN=1,其序列号为 seq=u 等于前面已经传送过来的数据的最后一个字节的序号加 1,并将该数据包发送给服务器端,用来关闭客户端到服务器端的数据传送。

    第二次挥手

    服务器 -------->> ACK=1,seq=v,ack=u+1---------->>客户端      客户端就进入 FIN-WAIT-2 状态     (从远程 TCP 等待连接中断请求)

     注:服务器端收到 FIN=1 后,发出确认报文,ACK=1,ack=u+1,并且带上自己的序列号 seq=v。

    第三次挥手

    服务器 --------->>FIN=1,ACK=1,seq=w,ack=u+1---------->> 客户端      服务器端进入 LAST-ACK 状态     (等待原来发向远程 TCP 的连接中断请求的确认)

    注:当服务器端确定数据已发送完成,就向客户端发送连接释放报文。置 FIN=1,ACK=1,ack=u+1,由于在半关闭状态,服务器很可能又发送了一些数据,假定此时的序列号为 seq=w

    第四次挥手

    客户端 --------->>ACK=1,seq=u+1,ack=w+1 ------------->>服务器     客户端就进入 TIME-WAIT 状态     (等待足够的时间以确保远程 TCP 接收到连接中断请求的确认)  服务器只要收到了客户端发出的确认,立即进入 CLOSED 状态     (没有任何连接状态)

    注:客户端收到服务器端的连接释放报文后,必须发出确认 ACK=1,ack=w+1,而自己的序列号是 seq=u+1,此时,客户端就进入 TIME-WAIT 状态,如果 Server 端没有收到 ACK 则可以重传。注意此时 TCP 连接还没有释放,必须经过 2MSL(最长报文段寿命)的时间后,当客户端撤销相应的 TCB 后,才进入 CLOSED 状态。服务器只要收到了客户端发出的确认,立即进入 CLOSED 状态。同样,撤销 TCB 后,就结束了这次的 TCP 连接。可以看到,服务器结束 TCP 连接的时间要比客户端早一些

  • 相关阅读:
    Spring EL Operators example
    Spring EL method invocation example
    Spring EL hello world example
    Spring @PostConstruct and @PreDestroy example
    Spring init-method and destroy-method example
    Define custom @Required-style annotation in Spring
    Spring dependency checking with @Required Annotation
    Spring properties dependency checking
    UESTC 883 方老师与两个串 --二分搜索+DP
    UESTC 882 冬马党 --状压DP
  • 原文地址:https://www.cnblogs.com/wbf980728/p/14121177.html
Copyright © 2011-2022 走看看