您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# TCP的三次握手与四次挥手是什么
## 引言
在计算机网络通信中,TCP(传输控制协议)是互联网协议套件中最核心的协议之一,负责在不可靠的网络环境中提供可靠的、面向连接的通信服务。TCP连接的建立和终止过程分别通过**三次握手(Three-way Handshake)**和**四次挥手(Four-way Handshake)**机制实现。本文将深入解析这两个过程的原理、作用及常见问题。
---
## 一、TCP协议基础
### 1.1 TCP的特点
- **面向连接**:通信前需建立连接,结束后释放连接。
- **可靠传输**:通过确认、重传、流量控制等机制保证数据准确送达。
- **全双工通信**:双方可同时发送和接收数据。
- **基于字节流**:数据被看作无结构的字节序列。
### 1.2 TCP报文结构
TCP报文头部包含以下关键字段:
- **序列号(Sequence Number)**:标识数据字节流的顺序。
- **确认号(Acknowledgment Number)**:期望收到的下一个字节序号。
- **控制标志位**:
- `SYN`:同步序列号,用于建立连接。
- `ACK`:确认标志。
- `FIN`:终止连接标志。
---
## 二、三次握手:建立连接
### 2.1 握手过程
三次握手的目标是同步双方的初始序列号(ISN),并确认双方的收发能力正常。
1. **第一次握手(SYN=1)**
- 客户端发送`SYN=1`报文,随机生成初始序列号`seq=x`。
- 进入`SYN_SENT`状态。
2. **第二次握手(SYN=1, ACK=1)**
- 服务端收到`SYN`后,回复`SYN=1`和`ACK=1`,确认号`ack=x+1`,并发送自己的初始序列号`seq=y`。
- 进入`SYN_RCVD`状态。
3. **第三次握手(ACK=1)**
- 客户端确认服务端的`SYN`,发送`ACK=1`,确认号`ack=y+1`。
- 双方进入`ESTABLISHED`状态,连接建立完成。
```plaintext
客户端 服务端
|-------- SYN=1, seq=x ------->|
|<-- SYN=1, ACK=1, seq=y, ack=x+1 --|
|------- ACK=1, ack=y+1 ------>|
SYN
但不完成握手,耗尽服务端资源。防御手段包括SYN Cookie
机制。由于TCP是全双工的,每个方向需单独关闭连接。
第一次挥手(FIN=1)
FIN=1
报文,序列号seq=u
。FIN_WT_1
状态。第二次挥手(ACK=1)
ACK=1
,确认号ack=u+1
。CLOSE_WT
状态,客户端进入FIN_WT_2
状态。第三次挥手(FIN=1)
FIN=1
报文,序列号seq=v
。LAST_ACK
状态。第四次挥手(ACK=1)
FIN
,发送ACK=1
,确认号ack=v+1
。TIME_WT
状态,等待2MSL
后关闭;服务端直接关闭。客户端 服务端
|-------- FIN=1, seq=u ------->|
|<-- ACK=1, ack=u+1 -----------|
|<-------- FIN=1, seq=v -------|
|------- ACK=1, ack=v+1 ------>|
FIN
,待数据发送完毕后再发送自己的FIN
。FIN
。2MSL
(报文最大生存时间)确保网络中所有旧报文失效。特性 | 三次握手 | 四次挥手 |
---|---|---|
目的 | 建立连接 | 终止连接 |
交互次数 | 3次 | 4次 |
是否需同步 | 同步序列号 | 无序列号同步需求 |
握手阶段丢包:
SYN
丢失,会超时重传。SYN+ACK
丢失,客户端重传SYN
。挥手阶段丢包:
FIN
丢失,会触发超时重传机制。shutdown()
函数实现单向关闭。TCP的三次握手和四次挥手是保障可靠通信的核心机制。三次握手解决了连接初始化时的同步与验证问题,而四次挥手则适应了全双工通信的特性,确保连接优雅关闭。理解这些过程有助于诊断网络问题(如连接超时、端口占用等),并为高性能网络编程奠定基础。
思考题:如果TCP采用两次握手建立连接,会存在哪些风险?
答案:可能导致历史重复连接占用资源,或无法验证服务端的接收能力。 “`
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。