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

    TCP三次握手流程图

    第一次握手

    客户端主动发送 SYN=1,随机产生seq number = x 的数据包到服务器(服务器由SYN=1知道客户端要求建立连接)

    第二次握手

    服务器收到请求后要确认联机信息,向客户端发送SYN=1,ACK=1,随机产生seq number= y ,
    ack number = 客户端的seq number +1 (x+1)

    第三次握手

    客户端收到后检查ack number 是否正确,即第一次发送的seq number +1 ,以及位码ACK 是否为1,
    若正确客户端会再次发送 ack number = y+1 (服务端seq number +1) ,
    seq number =服务端ack number (即x+1,也是第一次seq number +1),服务端收到后确认seq number 值与ACK=1,则连接建立成功。

    TCP三次握手实例:

    第一次: IP 192.168.1.116.3337 > 192.168.1.123.7788: S 3626544836:3626544836
    第二次: IP 192.168.1.123.7788 > 192.168.1.116.3337: S 1739326486:1739326486 ack 3626544837
    第三次: IP 192.168.1.116.3337 > 192.168.1.123.7788: ack 1739326487,ack 1

    第一次握手:192.168.1.116发送位码syn=1,随机产生seq number=3626544836的数据包到192.168.1.123,192.168.1.123由SYN=1知道192.168.1.116要求建立联机;

    第二次握手:192.168.1.123收到请求后要确认联机信息,向192.168.1.116发送ack number=3626544837,syn=1,ack=1,随机产生seq=1739326486的包;

    第三次握手:192.168.1.116收到后检查ack number是否正确,即第一次发送的seq number+1,以及位码ack是否为1,若正确,192.168.1.116会再发送ack number=1739326487,ack=1,192.168.1.123收到后确认seq=seq+1,ack=1则连接建立成功。

    总结:

    一个完整的三次握手也就是 请求---应答---再次确认

    解释如下:
    第一次握手:Client将标志位SYN置为1,随机产生一个值seq=x,并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认。

    第二次握手:Server收到数据包后由标志位SYN=1知道Client请求建立连接,Server将标志位SYN和ACK都置为1,ack (number )=x+1,随机产生一个值seq=y,并将该数据包发送给Client以确认连接请求,Server进入SYN_RCVD状态。

    第三次握手:Client收到确认后,检查ack是否为x+1,标志位ACK是否为1,如果正确则将标志位ACK置为1,ack=y+1,并将该数据包发送给Server,Server检查ack是否为y+1,ACK是否为1,如果正确则连接建立成功,Client和Server进入ESTABLISHED状态,完成三次握手,随后Client与Server之间可以开始传输数据了。

  • 相关阅读:
    利用Java API通过路径过滤上传多文件至HDFS
    docker-compose部署haproxy
    PM2 常用命令
    shell脚本循环访问url直到状态码返回200跳出循环
    CentOS 7.6安装配置Chrony同步系统时钟
    PostgreSQL9.5数据库锁表问题分析与解决
    linux系统netstat命令详解(netstat常用运维命令)
    linux目录备份脚本
    PostgreSQL 锁等待监控 珍藏级SQL
    docker部署pgadmin4并通过nginx反向代理
  • 原文地址:https://www.cnblogs.com/Paul-watermelon/p/11141420.html
Copyright © 2011-2022 走看看