---
# System prepended metadata

title: TCP 三次交握
tags: [網路]

---

## 為什麼TCP 建立連線需要三次握手

1. 防止重複建立連接
> The principle reason for the three-way handshake is to prevent old duplicate connection initiations from causing confusion.

如果 TCP 連線只有兩次交握，接收方只能選擇接受或拒絕發送方的請求，但無法確定這個請求是否由於網絡擁塞而過期。有了第三次交握，接收方在第二次交握時會發送 ACK (傳送方的 (SEQ + 1)) 給傳送方，連線發起者可藉由檢查 ACK，來看當前連線是否為最新的，如果不是即可發送 RST 中斷連線。

![image](https://hackmd.io/_uploads/rJtxK86UR.png)

２. 初始化 Sequence Number
TCP 為可靠傳輸，可透過 Sequence Number 確保三件事
* 接收方可以利用 Sequence Number 去除重複封包
* 發送方在對應封包未收到確認回應（ACK）時，會重複發送封包
* 接收方可以根據封包序號對它們進行排序

而三次交握可讓雙方接收彼此初始化的 Sequence Number

> [為什麼TCP 建立連線需要三次握手](https://draveness.me/whys-the-design-tcp-three-way-handshake/)
> [TCP通訊協定與三次握手機制](https://andypolo8214.medium.com/tcp%E9%80%9A%E8%A8%8A%E5%8D%94%E5%AE%9A%E8%88%87%E4%B8%89%E6%AC%A1%E6%8F%A1%E6%89%8B%E6%A9%9F%E5%88%B6-af5fff03b41c)

