Day13_java变量_TCP

Java

public class Demo07 {
    // 属性:变量

    // 1.类变量  static
    static double salary = 2500;

    // 2.实例变量:从属于对象; 如果不自行初始化,这个类型的默认值 0 0.0
    // 布尔值:默认false
    // 除了基本类型,其余的默认值都是NULL
    String name;
    int age;

    // main方法
    public static void main(String[] args) {

        // 3.局部变量;必须声明和初始化值
        int i = 10;
        System.out.println(i);

        // 变量类型 变量名字 = new Demo07
        Demo07 demo07 = new Demo07();
        System.out.println(demo07.name);
        System.out.println(demo07.age);

        // 类变量 static
        System.out.println(salary);
    }

    // 其他方法
    public void add(){

    }
}

命名规则

每日一题:TCP的四次挥手

TCP 的 四次挥手(Four-Way Handshake) 是用于可靠终止双向连接的过程。由于 TCP 是全双工通信(双方可同时收发数据),关闭连接需要双方各自独立关闭自己的数据通道。以下是详细流程和原理:


一、四次挥手流程

假设客户端主动发起关闭,服务器被动关闭:

  1. 第一次挥手(FIN)
    • 主动关闭方(客户端) 发送 FIN=1 的报文(携带序列号 seq=u),表示不再发送数据,进入 FIN_WAIT_1 状态。
    • 关键点:客户端已无数据发送,但仍可接收数据。
  2. 第二次挥手(ACK)
    • 被动关闭方(服务器) 收到 FIN 后,回复 ACK=1 的确认报文(ack=u+1),进入 CLOSE_WAIT 状态。
    • 关键点
      • 客户端收到 ACK 后进入 FIN_WAIT_2 状态,此时客户端到服务器的连接已关闭
      • 服务器可能仍有未发送完的数据,需继续处理。
  3. 第三次挥手(FIN)
    • 被动关闭方(服务器) 处理完剩余数据后,发送自己的 FIN=1 报文(seq=w),进入 LAST_ACK 状态。
    • 关键点:服务器表示自己也不再发送数据。
  4. 第四次挥手(ACK)
    • 主动关闭方(客户端) 收到 FIN 后,回复 ACK=1 的确认报文(ack=w+1),进入 TIME_WAIT 状态。
    • 关键点
      • 服务器收到 ACK 后立即关闭连接,进入 CLOSED 状态。
      • 客户端在 TIME_WAIT 状态等待 2MSL(Maximum Segment Lifetime,报文最大生存时间)后关闭连接。

二、为什么需要四次挥手?

  1. 全双工通信的特性
    TCP 连接是双向的,双方需独立关闭自己的数据通道:
    • 客户端关闭发送通道(第一次挥手)。
    • 服务器关闭发送通道(第三次挥手)。
    • 两次 ACK 确保双方确认对方的关闭请求。
  2. 被动关闭方的延迟关闭
    服务器收到客户端的 FIN 后,可能仍需处理未发送完的数据,因此先回复 ACK(第二次挥手),处理完数据再发送自己的 FIN(第三次挥手)。
  3. 可靠性保证
    • TIME_WAIT 状态确保最后一个 ACK 可靠到达:
      • ACK 丢失,服务器会重传 FIN,客户端可再次回复 ACK
    • 等待 2MSL 确保网络中旧连接的报文彻底消失,避免与新连接冲突。

三、关键状态解析

状态 说明
FIN_WAIT_1 主动关闭方等待对方确认 FIN
FIN_WAIT_2 主动关闭方已收到对方对 FIN 的确认,等待对方的 FIN
CLOSE_WAIT 被动关闭方收到 FIN 后等待处理剩余数据。
LAST_ACK 被动关闭方发送自己的 FIN 后,等待最后一个 ACK
TIME_WAIT 主动关闭方发送最后一个 ACK 后等待 2MSL,确保连接彻底关闭。

四、特殊情况

  • 三次挥手:若被动关闭方没有剩余数据,可能将第二次挥手(ACK)与第三次挥手(FIN)合并发送,但这是优化而非标准流程。
  • 同时关闭:极少数情况下,双方同时发起 FIN,会进入 CLOSING 状态,最终通过四次交互完成关闭。

五、总结

  1. 四次挥手的核心目的:确保双向连接的可靠终止,避免数据丢失或旧报文干扰。
  2. TIME_WAIT 的必要性:防止最后一个 ACK 丢失,并让网络中残留的旧报文失效。
  3. 全双工特性:四次挥手是 TCP 全双工通信设计的直接体现,无法简化为三次(除非合并报文)。

示意图

客户端                             服务器
  |-------- FIN (u) -------->|       // 第一次挥手
  |<------- ACK (u+1) -------|       // 第二次挥手
  |<------- FIN (w) ---------|       // 第三次挥手
  |-------- ACK (w+1) ------>|       // 第四次挥手
posted @ 2025-03-14 22:26  Pikature  阅读(22)  评论(0)    收藏  举报