TCP三次握手
三次握手详细流程
先记住:
-
SYN:同步序列编号(想建立连接)
-
ACK:确认应答(知道你要连)
-
seq:序列号(标识数据)
-
ack:确认号(期望接收的下一个序号)
📈 三次握手过程(图解版)
【客户端】 【服务器】| ||---SYN---> (我要连接你) || ||<--SYN+ACK-- (好的,我知道你要连) || ||---ACK---> (好的,我也知道你收到了) || |
【连接建立完成】 【连接建立完成】
✏️ 每一步详细解释
第一次握手:客户端 → 服务器
-
客户端发送一个SYN报文,告诉服务器:
-
我要建立连接了!
-
顺便带上一个自己的初始序列号(seq = x)。客户端发出 SYN(seq=x)
-
客户端发出 SYN(seq=x)
-
第二次握手:服务器 → 客户端
-
服务器收到后,回复一个SYN+ACK报文:
-
确认收到了你的请求(ACK,ack=x+1)
-
服务器自己也要发起连接(SYN,seq=y)
-
服务器发出 SYN(seq=y) + ACK(ack=x+1)
第三次握手:客户端 → 服务器
-
客户端收到服务器SYN+ACK后,再发一个ACK报文:
-
确认收到了服务器的回应(ack=y+1)
-
至此双方都知道对方没问题,可以正式通信
客户端发出 ACK(ack=y+1)
-
🎯 小总结表格
第几次 | 谁发 | 发什么 |
---|---|---|
第一次 | 客户端 | SYN(seq=x) |
第二次 | 服务器 | SYN(seq=y) + ACK(ack=x+1) |
第三次 | 客户端 | ACK(ack=y+1) |
📚 为什么不是两次握手?
因为如果只是两次,可能会出现“假连接”:
-
服务器以为客户端要连,其实客户端断了。
-
服务器会白白耗费资源。
第三次确认,让服务器确定客户端也收到了它的回应,连接才真正可靠!
🏗️ 整体一口气总结(人话版)
客户端:「你好,我想连你!(SYN)」
服务器:「收到!我也准备好了!(SYN+ACK)」
客户端:「好,我知道你准备好了!(ACK)」
→ 双方握手成功,开始聊天!