[네트워크] 4-Way Handshake란?

hannah·2025년 10월 20일

CS

목록 보기
2/16
post-thumbnail

🔚 TCP 연결 종료 (4-Way Handshake)

TCP는 연결 종료 시에도 데이터의 신뢰성을 보장하기 위해 4단계(4-Way Handshake) 과정을 거친다.
이는 양방향 통신을 독립적으로 종료하기 위해 필요한 절차이다.

아래 그림은 TCP가 연결을 닫는 과정을 단계별로 나타낸 것이다 👇

TCP 4-way Handshake


💡 개요

TCP는 전이중(Full Duplex) 통신 방식이므로, 송신과 수신이 각각 독립적으로 이루어진다.
따라서 연결을 종료할 때도 양쪽이 각각 자신의 전송 방향을 닫아야 하며, 이로 인해 4번의 제어 메시지(FIN / ACK) 가 오간다.
이 절차를 4-Way Handshake라 한다.


⚙️ 종료 절차

1️⃣ 클라이언트 → 서버 : FIN 전송

클라이언트가 더 이상 데이터를 전송하지 않을 때, FIN 플래그를 전송한다.
이후 클라이언트는 데이터를 보낼 수 없지만, 서버로부터의 데이터는 받을 수 있다.

  • 상태 변화: ESTABLISHED → FIN_WAIT_1

2️⃣ 서버 → 클라이언트 : ACK 응답

서버는 클라이언트의 FIN을 수신하고, 이에 대한 확인 응답(ACK)을 보낸다.
이 시점에서 서버는 아직 남은 데이터를 전송할 수 있다.

  • 상태 변화:

    • 서버: ESTABLISHED → CLOSE_WAIT
    • 클라이언트: FIN_WAIT_1 → FIN_WAIT_2

3️⃣ 서버 → 클라이언트 : FIN 전송

서버가 남은 데이터를 모두 전송한 후, 연결 종료를 알리기 위해 FIN을 전송한다.
이때 서버는 더 이상 데이터를 보낼 수 없다.

  • 상태 변화: CLOSE_WAIT → LAST_ACK

4️⃣ 클라이언트 → 서버 : ACK 응답

클라이언트는 서버의 FIN을 수신한 뒤, ACK를 전송한다.
이후 일정 시간 동안 TIME_WAIT 상태를 유지하며 네트워크 상의 지연 패킷을 기다린다.
그 후 연결이 완전히 종료된다.

  • 상태 변화:

    • 클라이언트: FIN_WAIT_2 → TIME_WAIT → CLOSED
    • 서버: LAST_ACK → CLOSED

🧩 상태 변화 요약

역할상태 변화설명
클라이언트ESTABLISHED → FIN_WAIT_1 → FIN_WAIT_2 → TIME_WAIT → CLOSED먼저 종료 요청을 보낸다.
서버ESTABLISHED → CLOSE_WAIT → LAST_ACK → CLOSED이후 응답을 보낸다.

🗒️ 핵심 포인트

  • FIN은 송신 측이 더 이상 전송할 데이터가 없음을 의미한다.
  • ACK는 상대의 FIN 또는 데이터 수신을 확인하는 응답이다.
  • TIME_WAIT 상태는 지연된 세그먼트가 네트워크에 남아 있을 가능성을 대비하기 위한 대기 시간이다.
  • 양쪽이 동시에 FIN을 보내는 경우도 있으며, 이를 Simultaneous Close라 한다.

📚 정리

TCP의 4-Way Handshake는 단순한 연결 종료 절차가 아니라,
데이터 손실 없이 안정적으로 통신을 종료하기 위한 안전장치이다.

0개의 댓글