• TCP三握四挥手


    三次握手
    • 一次握手:客户端发送带有 SYN(SEQ=x) 标志的数据包 -> 服务端,然后客户端进入 SYN_SEND 状态,等待服务器的确认;
    • 二次握手:服务端发送带有 SYN+ACK(SEQ=y,ACK=x+1) 标志的数据包 –> 客户端,然后服务端进入 SYN_RECV 状态
    • 三次握手:客户端发送带有 ACK(ACK=y+1) 标志的数据包 –> 服务端,然后客户端和服务器端都进入ESTABLISHED 状态,完成 TCP 三次握手。

    为什么三握四挥?

    • Client 什么都不能确认;Server 确认了对方发送正常,自己接收正常
    • Client 确认了:自己发送、接收正常,对方发送、接收正常;Server 确认了:对方发送正常,自己接收正常
    • Client 确认了:自己发送、接收正常,对方发送、接收正常;Server 确认了:自己发送、接收正常,对方发送、接收正常
      三次握手就能确认双方收发功能都正常,缺一不可

    SYN 同步序列编号(Synchronize Sequence Numbers) 是 TCP/IP 建立连接时使用的握手信号

    为什么要四次挥手?

    TCP 是全双工通信,可以双向传输数据。任何一方都可以在数据传送结束后发出连接释放的通知,待对方确认后进入半关闭状态。当另一方也没有数据再发送的时候,则发出连接释放通知,对方确认后就完全关闭了 TCP 连接。

    著作权归JavaGuide(javaguide.cn)所有
    基于MIT协议
    原文链接:https://javaguide.cn/cs-basics/network/tcp-connection-and-disconnection.html

    如果第二次挥手时服务器的ack没有送达客户端,会重新发送fin

    为什么第四次挥手客户端需要等待2*msl时间后才进入closed状态?

    第四次挥手时,客户端发送给服务器的 ACK 有可能丢失,如果服务端因为某些原因而没有收到 ACK 的话,服务端就会重发 FIN,如果客户端在 2*MSL 的时间内收到了 FIN,就会重新发送 ACK 并再次等待 2MSL,防止 Server 没有收到 ACK 而不断重发 FIN。

    著作权归JavaGuide(javaguide.cn)所有
    基于MIT协议
    原文链接:https://javaguide.cn/cs-basics/network/tcp-connection-and-disconnection.html

  • 相关阅读:
    Java中的多线程编程
    Cheat Engine 学习
    使用sealer-构建、交付、运行【kubernetes】-demo
    string类型常用命令与其底层数据结构
    Spring整合RabbitMQ——生产者
    logging的小封装可以参考一下
    计算机毕业设计django基于协同过滤的旅游推荐系统(源码+系统+mysql数据库+Lw文档)
    java计算机毕业设计ssm+vue网络考试信息网站
    Python Pandas PK esProc SPL,谁才是数据预处理王者?
    奇迹1.03H服务端开服架设文件Data文件详解
  • 原文地址:https://blog.csdn.net/yfdddong/article/details/136234494