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 是全双工通信(双方可同时收发数据),关闭连接需要双方各自独立关闭自己的数据通道。以下是详细流程和原理:
一、四次挥手流程
假设客户端主动发起关闭,服务器被动关闭:
- 第一次挥手(FIN)
- 主动关闭方(客户端) 发送
FIN=1的报文(携带序列号seq=u),表示不再发送数据,进入FIN_WAIT_1状态。 - 关键点:客户端已无数据发送,但仍可接收数据。
- 主动关闭方(客户端) 发送
- 第二次挥手(ACK)
- 被动关闭方(服务器) 收到
FIN后,回复ACK=1的确认报文(ack=u+1),进入CLOSE_WAIT状态。 - 关键点:
- 客户端收到
ACK后进入FIN_WAIT_2状态,此时客户端到服务器的连接已关闭。 - 服务器可能仍有未发送完的数据,需继续处理。
- 客户端收到
- 被动关闭方(服务器) 收到
- 第三次挥手(FIN)
- 被动关闭方(服务器) 处理完剩余数据后,发送自己的
FIN=1报文(seq=w),进入LAST_ACK状态。 - 关键点:服务器表示自己也不再发送数据。
- 被动关闭方(服务器) 处理完剩余数据后,发送自己的
- 第四次挥手(ACK)
- 主动关闭方(客户端) 收到
FIN后,回复ACK=1的确认报文(ack=w+1),进入TIME_WAIT状态。 - 关键点:
- 服务器收到
ACK后立即关闭连接,进入CLOSED状态。 - 客户端在
TIME_WAIT状态等待 2MSL(Maximum Segment Lifetime,报文最大生存时间)后关闭连接。
- 服务器收到
- 主动关闭方(客户端) 收到
二、为什么需要四次挥手?
- 全双工通信的特性
TCP 连接是双向的,双方需独立关闭自己的数据通道:- 客户端关闭发送通道(第一次挥手)。
- 服务器关闭发送通道(第三次挥手)。
- 两次
ACK确保双方确认对方的关闭请求。
- 被动关闭方的延迟关闭
服务器收到客户端的FIN后,可能仍需处理未发送完的数据,因此先回复ACK(第二次挥手),处理完数据再发送自己的FIN(第三次挥手)。 - 可靠性保证
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状态,最终通过四次交互完成关闭。
五、总结
- 四次挥手的核心目的:确保双向连接的可靠终止,避免数据丢失或旧报文干扰。
- TIME_WAIT 的必要性:防止最后一个
ACK丢失,并让网络中残留的旧报文失效。 - 全双工特性:四次挥手是 TCP 全双工通信设计的直接体现,无法简化为三次(除非合并报文)。
示意图:
客户端 服务器
|-------- FIN (u) -------->| // 第一次挥手
|<------- ACK (u+1) -------| // 第二次挥手
|<------- FIN (w) ---------| // 第三次挥手
|-------- ACK (w+1) ------>| // 第四次挥手

浙公网安备 33010602011771号