TCP三次握手,四次挥手
本文最后更新于40 天前,其中的信息可能已经过时,如有错误请发送邮件到big_fw@foxmail.com

可以把 TCP 想成两个人打电话:

  • 三次握手:先确认“能不能通话”
  • 四次挥手:再确认“能不能安全挂电话”

三次握手:建立连接

A 要和 B 通话。

  1. A → B:SYN
    • “你在吗?我想连接你。”
  2. B → A:SYN + ACK
    • “我在,收到了你的请求;我也准备好了,你能听到我吗?”
  3. A → B:ACK
    • “能听到,连接建立。”

之所以不是两次,是因为两次只能证明:

  • A 能发到 B
  • B 能收到 A

但还不能可靠证明 B 发回去的确认,A 是否真的收到。第三次确认补上了这点。

口诀:请求 → 同意并反问 → 确认。

四次挥手:关闭连接

TCP 是全双工的:A、B 两边都可以独立发送数据。所以“我不发了”不等于“你也不发了”。

  1. A → B:FIN
    • “我这边没数据要发了,准备关闭。”
  2. B → A:ACK
    • “收到。不过我可能还有数据没发完。”
  3. B → A:FIN
    • “现在我也发完了,可以关闭。”
  4. A → B:ACK
    • “收到,正式结束。”

口诀:我不发了 → 收到 → 我也不发了 → 收到。

为什么握手三次、挥手四次?

握手时,B 的“确认收到”与“我也要建立连接”通常可以合在一条 SYN + ACK 里。

挥手时,B 收到 A 的 FIN 后,可能还有剩余数据,因此只能先回 ACK;等它发完数据,才能另发 FIN。于是通常是四次。

补充一个常见点:主动关闭的一方最后会等一小段时间(TIME_WAIT),避免最后的确认包丢失,并让网络中延迟的旧报文自然消失。

文末附加内容
暂无评论

发送评论 编辑评论


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