zoukankan      html  css  js  c++  java
  • tcp 3次握手和4次挥手

    TCP标志位

    (参考来源:https://blog.csdn.net/ltstud/article/details/73995933和 https://blog.csdn.net/weixin_30832351/article/details/96823895)

    6个标志位

    SYN:(synchronous同步,建立联机)

    ACK:(acknowledgement 确认)

    PSH:(push传送)

    FIN(finish结束)

    RST(reset重置)

    URG(urgent紧急)

     

    3次握手

    主机A->主机B(第一次握手):  (可以建立连接吗?)           syn=1,seq number=1234567(随机产生);主机B收到  syn=1后知道是a要建立连接;

    主机B->主机A(第二次握手):(可以建立连接。)              ack number=(主机A的seq+1), syn=1, ack=1,seq=7654321(随机产生);

    主机A->主机B(第三次握手):(确认中,开始连接-->连接成功)  (检查ack number?= (第一次握手seq)seq+1,ack?=1),若等于,发送ack number=(主机B(第二次握手)的seq+1),ack=1;主机B收到后确认(检查ack number?= (第二次握手seq)seq+1,ack?=1)后连接建立成功

    四次挥手

    由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。

    但某一方的数据发送任务完后,给另一方发送一个FIN(我这边数据发完的,我要关闭我的发送通道),(收到fin后还是可以继续发,但关闭此次连接的自己的收,不会在收到数据);收到fin后返回确定。(FIN标识是通过发送  最后一块数据时  设置的FIN标识是通过发送最后一块数据时设置的)

     

    a->b:(a: 嘿,我的数据包发完了200。发完告诉我500)  fin:200,ack:500(sign:ACK=1,FIN=1)

    b->a:(b:  额,你发完了呀201。b关闭此连接的收,a关闭此连接的发)  ack:201(ACK=1)

    b->a:(b: 嘿,我的数据包发完了500。)fin:500,ack:201(sign:ACK=1,FIN=1)

    a->b: (a:额,你发完了呀501。a关闭此连接的收,b关闭此连接的发) ack:501(ACK=1)

    从建立连接到断开连接状态变化

    client:

     server:

  • 相关阅读:
    0008_Python变量
    shiro Filter过滤器管理197
    oracle 将一个数据库(A)的表导入到另一个数据库197
    top命令使用197
    SpringBoot下载Excel文件,解决文件损坏问题197
    java元注解197
    Content-Type
    centos7 下修改网络配置
    mint 20 install NVIDIA driver for 3080 via run
    使用numpy rot90操作image后,opencv cv2.rectangle 报错
  • 原文地址:https://www.cnblogs.com/baixinL/p/11967112.html
Copyright © 2011-2022 走看看