本文最后更新于82 天前,其中的信息可能已经过时,如有错误请发送邮件到big_fw@foxmail.com
TCP 三次握手
作用:
建立 TCP 连接。
目的:
确认双方都能发送和接收数据
同步初始序列号
建立可靠连接
三次握手过程
第一次握手
客户端发送:
SYN
意思:
“我想建立连接”
第二次握手
服务器返回:
SYN + ACK
意思:
“我收到了你的请求,我也同意建立连接”
第三次握手
客户端返回:
ACK
意思:
“我知道你收到了”
然后:
TCP 连接建立成功。
TCP 四次挥手
作用:
断开 TCP 连接。
因为:
TCP 是双向通信。
所以:
双方都要分别关闭
四次挥手过程
第一次挥手
客户端发送:
FIN
意思:
“我不发数据了”
第二次挥手
服务器返回:
ACK
意思:
“我知道你不发了”
但:
服务器可能还有数据没发完。
第三次挥手
服务器发送:
FIN
意思:
“我也发完了”
第四次挥手
客户端返回:
ACK
意思:
“我知道你也结束了”
最终:
TCP 连接关闭。
二、形象化理解(最重要)
现在真正帮助你理解。
三次握手(打电话)
想象:
你给朋友打电话。
第一次握手
你:
“喂?能听到吗?”
(SYN)
第二次握手
朋友:
“能听到,我也能听到你。”
(SYN + ACK)
这里:
朋友不仅确认:
收到你声音
还告诉你:
我也能说话
第三次握手
你:
“好,那开始聊天。”
(ACK)
于是:
电话正式建立。
为什么必须三次?
因为:
需要确认:
你能发
你能收
对方能发
对方能收
双方通信能力都正常。
四次挥手(挂电话)
TCP 是:
双向通信
所以:
双方必须分别关闭。
第一次挥手
你:
“我没话说了。”
(FIN)
第二次挥手
朋友:
“好的,我知道了。”
(ACK)
但:
朋友可能还在讲话。
第三次挥手
朋友:
“我也说完了。”
(FIN)
第四次挥手
你:
“好,挂吧。”
(ACK)
最终:
电话彻底挂断。
三、为什么是“三次”而不是“两次”
这是面试高频。
如果只有两次:
客户端 → SYN
服务端 → ACK
客户端不知道:
服务端是否真的具备发送能力
第三次:
本质:
客户端确认:
服务端收到了
服务端能通信
四、为什么挥手是“四次”
因为:
TCP:
双方关闭是独立的
服务端:
可能:
还能继续发送数据
所以:
ACK 和 FIN:
不能一起发送。
五、你现在应该建立的理解
不要死背:
SYN
ACK
FIN
而是理解:
三次握手本质
双方确认通信能力正常。
四次挥手本质
双方分别关闭通信。
六、大厂面试简答(非常重要)
什么是三次握手?
答:
TCP 建立连接时,客户端与服务端通过三次通信确认双方收发能力正常,从而建立可靠连接。
为什么需要三次?
答:
为了确认双方都具备发送和接收能力。
什么是四次挥手?
答:
TCP 断开连接时,由于双方通信独立关闭,因此需要四次挥手完成连接释放。
为什么挥手比握手多一次?
答:
因为服务端收到 FIN 后,可能还有数据未发送完成,因此 ACK 和 FIN 通常分开发送。