TCP 3-Way Handshake란?

eunbi·2025년 2월 2일

CS 총정리

목록 보기
20/22

TCP 3-Way Handshake란?

TCP 3-Way Handshake(3-웨이 핸드셰이크)는 TCP/IP 프로토콜에서 클라이언트와 서버 간의 안정적인 연결을 수립하기 위해 사용하는 과정이다.
이 과정은 신뢰성 있는 데이터 전송을 보장하기 위해 3단계의 패킷 교환을 거친다.


1️⃣ TCP 3-Way Handshake 과정

클라이언트와 서버가 통신을 시작하기 위해 SYN → SYN-ACK → ACK의 3단계를 거친다.

(1) SYN (Synchronization) - 연결 요청

  • 클라이언트는 서버에 연결을 요청하는 SYN 패킷을 전송한다.
  • 이 패킷에는 초기 시퀀스 번호(Sequence Number, ISN)가 포함된다.
  • 서버가 요청을 받을 준비가 되었는지 확인하는 과정이다.
Client  →  Server  :  SYN(x)  (연결 요청, x는 클라이언트의 ISN)

(2) SYN-ACK (Synchronization + Acknowledgment) - 요청 수락

  • 서버는 클라이언트의 SYN 요청을 수락하며, 응답으로 SYN-ACK 패킷을 보낸다.
  • 이 패킷에는 서버의 초기 시퀀스 번호(ISN)와 함께,
    클라이언트가 보낸 시퀀스 번호 +1을 담은 ACK (Acknowledgment) 번호가 포함된다.
Client  ←  Server  :  SYN(y) + ACK(x+1)  (연결 요청 수락, y는 서버의 ISN)

(3) ACK (Acknowledgment) - 연결 확립

  • 클라이언트는 서버가 보낸 SYN-ACK 패킷을 확인한 후,
    서버의 시퀀스 번호 +1을 포함한 ACK 패킷을 다시 보낸다.
  • 이 과정이 끝나면 TCP 연결이 완전히 설정되며, 이후 데이터 전송이 시작될 수 있다.
Client  →  Server  :  ACK(y+1)  (연결 확립 완료)

2️⃣ 전체 흐름 정리

1. Client  →  Server  :  SYN(x)   (연결 요청)
2. Client  ←  Server  :  SYN(y) + ACK(x+1)  (요청 수락 및 응답)
3. Client  →  Server  :  ACK(y+1)  (연결 확립 완료)

이 과정을 거친 후, 데이터 전송이 시작된다.


3️⃣ TCP 3-Way Handshake의 목적

  1. 양쪽 모두 통신이 가능함을 확인 (서버와 클라이언트가 데이터를 주고받을 준비가 되었음을 보장)
  2. 신뢰성 있는 데이터 전송을 보장 (데이터 손실 없이 안정적인 연결을 수립)
  3. 패킷이 올바르게 전달되고 있는지 확인 (데이터 순서 보장)

4️⃣ 3-Way Handshake 과정의 실제 패킷 예제 (Wireshark)

Wireshark 등의 네트워크 분석 도구를 사용하면 실제 TCP 3-Way Handshake 패킷을 볼 수 있다.

No.   Time        Source IP     Destination IP    Protocol    Info
1     0.000000    192.168.1.2   203.0.113.1      TCP         SYN
2     0.001234    203.0.113.1   192.168.1.2      TCP         SYN-ACK
3     0.002345    192.168.1.2   203.0.113.1      TCP         ACK

이후, 클라이언트와 서버 간의 실제 데이터 전송이 시작된다.


5️⃣ 3-Way Handshake 과정에서의 문제점

🔹 SYN Flooding (SYN 플러딩) 공격

  • 공격자가 대량의 SYN 패킷을 보내지만, ACK 응답을 보내지 않음.
  • 서버는 SYN 요청을 받은 후 응답을 기다리며 리소스를 소모하게 됨.
  • 이를 통해 서버 과부하 (DDoS 공격)가 발생할 수 있음.

🔹 해결 방법

  • SYN Cookies 기법: 서버가 SYN-ACK을 보낼 때, 상태 정보를 저장하지 않고 클라이언트의 응답을 검증하는 방식.
  • 방화벽 및 Rate Limiting을 사용하여 비정상적인 연결 요청을 차단.

6️⃣ 4-Way Handshake (연결 종료)

TCP 연결을 종료할 때는 4-Way Handshake가 사용된다.

  1. 클라이언트가 FIN 패킷을 전송 (연결 종료 요청)
  2. 서버가 ACK 패킷을 전송 (요청 수락)
  3. 서버가 FIN 패킷을 전송 (서버도 연결 종료 요청)
  4. 클라이언트가 ACK 패킷을 전송 (연결 완전히 종료)
1. Client  →  Server  :  FIN  (연결 종료 요청)
2. Client  ←  Server  :  ACK  (요청 수락)
3. Client  ←  Server  :  FIN  (서버도 연결 종료 요청)
4. Client  →  Server  :  ACK  (연결 완전히 종료)

이렇게 서버와 클라이언트 모두 연결 종료를 확인한 후,
TCP 세션이 완전히 종료된다.


🚀 결론

  • TCP 3-Way Handshake신뢰성 있는 연결을 보장하기 위한 필수 과정이다.
  • SYN → SYN-ACK → ACK의 3단계를 거쳐 TCP 연결이 정상적으로 수립된다.
  • 보안 위협 (SYN 플러딩 공격) 대비를 위해 SYN Cookies 등의 기법이 사용된다.
  • TCP 연결 해제 시에는 4-Way Handshake가 사용된다.

0개의 댓글