TCP三次握手和四次挥手

TCP 三次握手和四次挥手

TCP(传输控制协议)是一种面向连接的协议,在建立连接和断开连接时分别需要通过 三次握手四次挥手 来确保通信的可靠性和完整性。


1. 三次握手

三次握手是 TCP 建立连接的过程,确保客户端和服务器双方都准备好进行数据传输。

步骤
  1. 第一次握手

    • 客户端向服务器发送一个 SYN(同步)包,其中 SYN=1,表示请求建立连接。
    • 客户端状态从 CLOSED 变为 SYN_SENT
  2. 第二次握手

    • 服务器收到 SYN 包后,向客户端发送一个 SYN+ACK(同步+确认)包,其中 SYN=1,ACK=1。
    • 服务器状态从 LISTEN 变为 SYN_RCVD
  3. 第三次握手

    • 客户端收到 SYN+ACK 包后,向服务器发送一个 ACK(确认)包,其中 ACK=1。
    • 客户端和服务器状态都变为 ESTABLISHED,连接建立成功。
作用
  • 确认双方的通信能力:通过三次握手,确保客户端和服务器都能正常发送和接收数据。
  • 同步初始序列号:交换初始序列号,用于后续数据传输的可靠性保证。

2. 四次挥手

四次挥手是 TCP 断开连接的过程,确保客户端和服务器双方都完成数据传输并安全关闭连接。

步骤
  1. 第一次挥手

    • 客户端向服务器发送一个 FIN(结束)包,其中 FIN=1,表示请求关闭连接。
    • 客户端状态从 ESTABLISHED 变为 FIN_WAIT_1
  2. 第二次挥手

    • 服务器收到 FIN 包后,向客户端发送一个 ACK(确认)包,其中 ACK=1。
    • 服务器状态从 ESTABLISHED 变为 CLOSE_WAIT
    • 客户端收到 ACK 包后,状态从 FIN_WAIT_1 变为 FIN_WAIT_2
  3. 第三次挥手

    • 服务器完成数据传输后,向客户端发送一个 FIN 包,其中 FIN=1,表示服务器也准备关闭连接。
    • 服务器状态从 CLOSE_WAIT 变为 LAST_ACK
  4. 第四次挥手

    • 客户端收到 FIN 包后,向服务器发送一个 ACK 包,其中 ACK=1。
    • 客户端状态从 FIN_WAIT_2 变为 TIME_WAIT,等待 2MSL(最大报文段生存时间)后进入 CLOSED 状态。
    • 服务器收到 ACK 包后,状态从 LAST_ACK 变为 CLOSED
作用
  • 确保数据完整性:通过四次挥手,确保双方都完成数据传输并安全关闭连接。
  • 防止旧连接的干扰 :通过 TIME_WAIT 状态,防止旧连接的报文干扰新连接。

三次握手

Client Server SYN=1 (SYN_SENT) SYN=1, ACK=1 (SYN_RCVD) ACK=1 (ESTABLISHED) Client Server

四次挥手

Client Server FIN=1 (FIN_WAIT_1) ACK=1 (CLOSE_WAIT) FIN=1 (LAST_ACK) ACK=1 (TIME_WAIT) Client Server

相关推荐
寻星探路12 小时前
【深度长文】万字攻克网络原理:从 HTTP 报文解构到 HTTPS 终极加密逻辑
java·开发语言·网络·python·http·ai·https
王达舒199412 小时前
HTTP vs HTTPS: 终极解析,保护你的数据究竟有多重要?
网络协议·http·https
不老刘12 小时前
LiveKit 本地部署全流程指南(含 HTTPS/WSS)
golang·实时音视频·livekit
朱皮皮呀12 小时前
HTTPS的工作过程
网络协议·http·https
Binary-Jeff12 小时前
一文读懂 HTTPS 协议及其工作流程
网络协议·web安全·http·https
想用offer打牌13 小时前
MCP (Model Context Protocol) 技术理解 - 第二篇
后端·aigc·mcp
lly20240614 小时前
Bootstrap 警告框
开发语言
2601_9491465314 小时前
C语言语音通知接口接入教程:如何使用C语言直接调用语音预警API
c语言·开发语言
曹牧14 小时前
Spring Boot:如何测试Java Controller中的POST请求?
java·开发语言
在路上看风景14 小时前
19. 成员初始化列表和初始化对象
c++