zoukankan      html  css  js  c++  java
  • TCP/IP协议三次握手与四次挥手

    一.标志位和序号

    seq序号 :发送方随机生成的

    ack确认序号:ack=seq+1 标志位ACK=1时确认序号有效

    SYN标志位:发起一个新连接

    ACK标志位:确认序号有效

    FIN标志位:断开连接

    二.三次握手

    三次握手是客户端与服务端建立一个TCP连接时,需要客户端和服务端发送三个包建立连接的过程

    (1)第一次握手

      客户端将SYN置为1,随机产生一个seq序号=J,将该数据包发送给服务端,客户端此时状态为SYN_SEND

    (2)第二次握手

      服务端收到客户端发送的数据包由SYN=1知道客户端要建立连接,客户端将SYN和ACK都置为1,同时发送确认序号ack=J+1

      随机产生一个服务端序号seq=K,将此数据包发送给客户端。服务端此时的状态为SYN_REVD

    (3)第三次握手

      客户端收到服务端的数据包,由ACK=1,ack=J+1无误,客户端将ACK置为1,ack=K+1发给服务端

      服务端收到ACK=1,ack=K+1连接建立成功。客户端和服务端此时的状态为ESTABLISHED

      

    三.四次挥手

    四次挥手是断开TCP连接的时候,需要客户端和服务端发送四次包确认连接的断开,断开连接可由服务端或客户端任意一方触发

    (1)第一次挥手

      假设客户端主动关闭。客户端发送关闭连接标志位FIN=1,序号seq=m。客户端此时状态为FIN_WAIT_1

    (2)第二次挥手

      服务端收到标志位FIN=1,知道客户端要关闭连接,客户端发送标志位ACK=1,确认序号ack=m+1,seq=n。

        服务端并没有发送FIN标志位,因为服务端可能还有数据要发送 。此时服务端处于CLOSE_WAIT状态,客户端处于FIN_WAIT_2状态

    (3)第三次挥手

      服务端发送标志位FIN=1,seq=u 。此时服务端处于LAST_ACK状态

    (4)第四次挥手

      客户端收到FIN,发送ACK=1,确认序号ack=u+1给服务端。客户端进入TIME_WAIT状态。释放连接完成

  • 相关阅读:
    对技术的研究就是对世界的理解
    程序员的方向
    程序员的分类
    设置tomcat的catalina_home引发的问题
    关于用osgModeling批量生成管道
    Cocos2d-X学习之Ref类
    ApiDemos示例学习(2)——App->Activity->Animation
    ApiDemos示例学习(1)——ApiDemos示例的导入
    eclipse中调出android sdk manager和android virtual device manager图标
    Mono For Android中AlarmManager的使用
  • 原文地址:https://www.cnblogs.com/suni/p/8674872.html
Copyright © 2011-2022 走看看