TCP 3-Way Handshake / 4-Way Handshake

반응형

tcp 3-way handshake / tcp 4-way handshake

TCP 3-Way Handshake / 4-Way Handshake 완벽 비교 가이드

TCP 3-Way Handshake / 4-Way Handshake 완벽 비교 가이드

TCP(Transmission Control Protocol)은 신뢰성 있는 데이터 전송을 보장하기 위해 연결(Connection) 기반으로 동작합니다. 이때 연결을 수립하는 과정이 3-Way Handshake, 연결을 종료하는 과정이 4-Way Handshake입니다. 두 과정은 이름은 비슷하지만 역할, 플래그, 동기화 과정이 완전히 다릅니다.

본 문서는 OSI 7계층 중 전송 계층(Transport Layer)에서 일어나는 TCP 세션의 “연결”과 “종료” 단계를 실제 패킷 수준에서 분석합니다.

1️⃣ TCP 3-Way Handshake (연결 수립 과정)

TCP는 연결을 만들기 위해 **양방향 동기화(SYN, ACK)** 가 필요합니다. 클라이언트와 서버가 서로 송수신 가능 상태임을 확인하기 위해 **3단계의 패킷 교환**이 이루어집니다.

[Step 1] Client → Server : SYN (Seq=x)
[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). 이 시점부터 양측 데이터 전송 가능.
단계송신자플래그의미
1Client → ServerSYN연결 요청 (초기 시퀀스 동기화 시작)
2Server → ClientSYN, ACK연결 수락, 서버 시퀀스 제시
3Client → ServerACK서버의 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 1] Client → Server : FIN (Seq=u)
[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: 최종 확인, 세션 완전 종료.
단계송신자플래그의미
1Client → ServerFIN송신 종료 요청
2Server → ClientACKFIN 수신 확인
3Server → ClientFIN서버 측 송신 종료
4Client → ServerACK서버 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 Handshake4-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️⃣ 시각적 흐름 비교

[3-Way Handshake]
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

 

반응형
LIST