
TCP 3-Way Handshake / 4-Way Handshake 완벽 비교 가이드
TCP(Transmission Control Protocol)은 신뢰성 있는 데이터 전송을 보장하기 위해 연결(Connection) 기반으로 동작합니다. 이때 연결을 수립하는 과정이 3-Way Handshake, 연결을 종료하는 과정이 4-Way Handshake입니다. 두 과정은 이름은 비슷하지만 역할, 플래그, 동기화 과정이 완전히 다릅니다.
1️⃣ TCP 3-Way Handshake (연결 수립 과정)
TCP는 연결을 만들기 위해 **양방향 동기화(SYN, ACK)** 가 필요합니다. 클라이언트와 서버가 서로 송수신 가능 상태임을 확인하기 위해 **3단계의 패킷 교환**이 이루어집니다.
[Step 2] Server → Client : SYN + ACK (Seq=y, Ack=x+1)
[Step 3] Client → Server : ACK (Ack=y+1)
→ 연결(Connection Established)
🔍 각 단계 상세 설명
- SYN: 클라이언트가 연결을 요청하며, 자신이 사용할 초기 시퀀스 번호(Seq=x)를 보냄.
- SYN+ACK: 서버는 연결을 수락하며, 자신의 초기 시퀀스 번호(Seq=y)를 제시하고 클라이언트의 SYN을 확인(Ack=x+1).
- ACK: 클라이언트가 서버의 SYN을 확인(Ack=y+1). 이 시점부터 양측 데이터 전송 가능.
| 단계 | 송신자 | 플래그 | 의미 |
|---|---|---|---|
| 1 | Client → Server | SYN | 연결 요청 (초기 시퀀스 동기화 시작) |
| 2 | Server → Client | SYN, ACK | 연결 수락, 서버 시퀀스 제시 |
| 3 | Client → Server | ACK | 서버의 SYN 확인 → 연결 완료 |
📡 Wireshark에서 보는 예시
No. Source Destination Protocol Info
1 192.168.1.10 192.168.1.20 TCP [SYN] Seq=0 Win=64240 Len=0
2 192.168.1.20 192.168.1.10 TCP [SYN, ACK] Seq=0 Ack=1 Win=65535 Len=0
3 192.168.1.10 192.168.1.20 TCP [ACK] Seq=1 Ack=1 Win=64240 Len=0
2️⃣ TCP 4-Way Handshake (연결 종료 과정)
세션 종료 시에는 양방향 통신을 각각 독립적으로 종료해야 하기 때문에 총 4단계가 필요합니다. 클라이언트와 서버 모두 데이터를 더 이상 전송하지 않을 때, 각각 **FIN(연결 종료)** 패킷을 주고받습니다.
[Step 2] Server → Client : ACK (Ack=u+1)
[Step 3] Server → Client : FIN (Seq=v)
[Step 4] Client → Server : ACK (Ack=v+1)
→ 연결 종료 (CLOSED)
🔍 단계별 상세 설명
- FIN: 송신 측(클라이언트)이 더 이상 보낼 데이터가 없음을 알림.
- ACK: 수신 측이 FIN을 받았음을 확인하고 응답.
- FIN: 수신 측도 송신 종료를 알림.
- ACK: 최종 확인, 세션 완전 종료.
| 단계 | 송신자 | 플래그 | 의미 |
|---|---|---|---|
| 1 | Client → Server | FIN | 송신 종료 요청 |
| 2 | Server → Client | ACK | FIN 수신 확인 |
| 3 | Server → Client | FIN | 서버 측 송신 종료 |
| 4 | Client → Server | ACK | 서버 FIN 확인 → 세션 종료 |
📡 Wireshark에서 보는 예시
No. Source Destination Protocol Info
101 192.168.1.10 192.168.1.20 TCP [FIN, ACK] Seq=501 Ack=1001
102 192.168.1.20 192.168.1.10 TCP [ACK] Seq=1001 Ack=502
103 192.168.1.20 192.168.1.10 TCP [FIN, ACK] Seq=1001 Ack=502
104 192.168.1.10 192.168.1.20 TCP [ACK] Seq=502 Ack=1002
3️⃣ 3-Way vs 4-Way Handshake 비교 요약
| 항목 | 3-Way Handshake | 4-Way Handshake |
|---|---|---|
| 목적 | TCP 세션 “연결 수립” | TCP 세션 “연결 종료” |
| 단계 수 | 3단계 (SYN → SYN+ACK → ACK) | 4단계 (FIN → ACK → FIN → ACK) |
| 동작 방향 | 양방향 동시 연결 | 각 방향 독립적 종료 |
| 플래그 종류 | SYN, ACK | FIN, ACK |
| 대표 상태 | SYN_SENT → SYN_RCVD → ESTABLISHED | FIN_WAIT → CLOSE_WAIT → TIME_WAIT → CLOSED |
4️⃣ TIME_WAIT 상태의 의미
4-Way 종료 후, 마지막 ACK를 보낸 측(주로 클라이언트)은 일정 시간 동안 TIME_WAIT 상태를 유지합니다. 이는 지연된 패킷이 네트워크 상에서 도착하더라도 새로운 세션과 혼동되지 않도록 보호하는 역할을 합니다.
TIME_WAIT 기본 시간 = 2 × MSL(Maximum Segment Lifetime)
Linux 기본: 약 60초
Windows 기본: 120초
TIP: 서버에서 TIME_WAIT이 과도하게 쌓이면 포트 고갈 현상이 생길 수 있습니다.
이 경우 net.ipv4.tcp_tw_reuse 옵션으로 재활용 정책을 조정할 수 있습니다.
5️⃣ 실제 패킷 기반 비교 요약
# 연결 수립 시퀀스
Client → Server : SYN
Server → Client : SYN, ACK
Client → Server : ACK
(Connection Established)
# 연결 종료 시퀀스
Client → Server : FIN
Server → Client : ACK
Server → Client : FIN
Client → Server : ACK
(Connection Closed)
6️⃣ 실무에서 자주 나오는 혼동 포인트
- 3-Way는 “연결 수립” 과정, 4-Way는 “종료” 과정임.
- ACK만으로는 연결이 완성되지 않으며, SYN-ACK 교환이 필수.
- FIN은 송신 종료일 뿐, 반대방향은 여전히 데이터 전송 가능 (Half-Close).
- RST(Reset)는 비정상 종료 시 즉시 연결 해제.
7️⃣ 시각적 흐름 비교
C → S : SYN
S → C : SYN, ACK
C → S : ACK
(연결 수립)
[4-Way Handshake]
C → S : FIN
S → C : ACK
S → C : FIN
C → S : ACK
(연결 종료)
정리
TCP는 신뢰성과 순서를 보장하기 위해 연결의 생성과 종료 모두를 명확히 정의합니다. 3-Way Handshake는 연결을 “양방향으로 동기화”, 4-Way Handshake는 “양방향으로 종료”하기 위한 절차입니다. 두 과정의 차이를 이해하면, 네트워크 지연·재전송·포트 재사용 문제를 정확히 진단할 수 있습니다.
[관련 포스팅 글]
2025.11.07 - [경험 공유/ETC] - [기초]MSSQL 복호화 4-Hand Shaking(핸드셰이크) | DB 접근제어 관점의 TLS 흐름
[기초]MSSQL 복호화 4-Hand Shaking(핸드셰이크) | DB 접근제어 관점의 TLS 흐름
MSSQL 복호화 4-Hand Shaking(핸드셰이크) 완전 가이드 이 문서는 DB 접근제어 게이트웨이(이하 “게이트웨이”)가 MSSQL Server와 통신하며 암호화 세션을 수립하고, 이후 암호화된 TDS(Tabular Data Stream) 패
one-day-growth.com
2025.11.07 - [경험 공유/ETC] - [부록]MSSQL 복호화 4-Hand Shaking(핸드셰이크) | DB 접근제어 관점의 TLS 흐름
[부록]MSSQL 복호화 4-Hand Shaking(핸드셰이크) | DB 접근제어 관점의 TLS 흐름
MSSQL 복호화 4-Hand Shaking(핸드셰이크) 완전 가이드 이 문서는 DB 접근제어 게이트웨이(이하 “게이트웨이”)가 MSSQL Server와 통신하며 암호화 세션을 수립하고, 이후 암호화된 TDS(Tabular Data Stream) 패
one-day-growth.com
'경험 공유 > ETC' 카테고리의 다른 글
| vminst.log 분석 (1) | 2025.11.10 |
|---|---|
| [부록]MSSQL 복호화 4-Hand Shaking(핸드셰이크) | DB 접근제어 관점의 TLS 흐름 (0) | 2025.11.07 |
| [기초]MSSQL 복호화 4-Hand Shaking(핸드셰이크) | DB 접근제어 관점의 TLS 흐름 (0) | 2025.11.07 |
| IPv4와 IPv6의 차이 및 국내 도입 방향성 (1) | 2025.11.07 |
| 윈도우 11 자동 드라이브 암호화 확인 및 해제 방법 (2) | 2025.11.01 |
