三次握手和四次挥手
本文最后更新于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 通常分开发送。
文末附加内容
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇