CS 준비

[네트워크]3-Way Handshake & 4-Way Handshake

해로몬 2025. 2. 10. 09:15

📌3 way Handshake

3-Way Handshake는 **TCP(Transmission Control Protocol)**에서 신뢰성 있는 연결을 설정하기 위해 사용하는 과정입니다. 클라이언트와 서버 간에 세 번의 패킷 교환이 이루어집니다.

 

📝 Step 1. [Client → SYN → Server]

클라이언트가 서버에게 연결 요청을 보냄

  • 클라이언트는 랜덤한 초기 시퀀스 번호(ISN, Initial Sequence Number) 와 함께 SYN 플래그를 설정한 패킷을 서버로 전송한다.
  • 이때 클라이언트의 TCP 상태는 SYN_SENT 상태가 된다.

📝 Step 2. [Server → SYN + ACK → Client]

서버가 클라이언트의 요청을 수락하고 응답을 보냄

  • 서버는 SYN 패킷을 받고, 자신의 초기 시퀀스 번호(ISN)를 포함한 SYN-ACK 패킷을 클라이언트에게 전송한다.
  • 이때 서버의 TCP 상태는 SYN_RECV 상태가 된다.
  • 서버는 클라이언트로부터 ACK 응답을 기다린다.

📝 Step 3. [Client → ACK → Server]

클라이언트가 서버의 응답을 확인하고 연결 확립

  • 클라이언트는 서버의 SYN-ACK 패킷을 받은 후, 연결이 정상적으로 설정되었음을 알리는 ACK 패킷을 서버에게 전송한다.
  • 이제 클라이언트와 서버의 TCP 상태는 ESTABLISHED(연결 완료) 로 변경된다.

🔎 TCP 상태 변화 정리

단계  클라이언트 상태  서버 상태
1. SYN 전송 SYN_SENT LISTEN
2. SYN-ACK 응답 SYN_SENT SYN_RECV
3. ACK 응답 (연결 완료) ESTABLISHED ESTABLISHED

📌4-way handshake

4-Way Handshake는 TCP 연결을 정상적으로 종료하기 위한 과정입니다. 연결을 종료하기 위해 양쪽에서 각각 연결 해제를 요청해야 하므로 총 네 번의 패킷 교환이 필요합니다.

📝 Step 1. [Client → FIN → Server]

클라이언트가 연결 종료 요청을 보냄

  • 클라이언트는 더 이상 보낼 데이터가 없다는 의미로 FIN 플래그를 설정한 패킷을 서버에게 보낸다.
  • 이때 클라이언트의 TCP 상태는 FIN-WAIT-1 상태가 된다.

📝 Step 2. [Server → ACK → Client]

서버가 FIN을 받고 응답을 보냄

  • 서버는 클라이언트의 FIN 패킷을 수신한 후, 정상적으로 받았다는 의미로 ACK 패킷을 전송한다.
  • 이때 서버의 TCP 상태는 CLOSE-WAIT, 클라이언트는 FIN-WAIT-2 상태가 된다.
  • 이 시점에서 서버는 아직 보낼 데이터가 남아 있을 수 있다.

📝 Step 3. [Server → FIN → Client]

서버가 연결 종료 요청을 보냄

  • 서버도 모든 데이터를 전송한 후, 연결을 종료하겠다는 의미로 FIN 패킷을 클라이언트에게 보낸다.
  • 이때 서버의 TCP 상태는 LAST-ACK 상태가 된다.

📝 Step 4. [Client → ACK → Server]

클라이언트가 서버의 종료 요청을 확인하고 연결을 완전히 종료

  • 클라이언트는 서버의 FIN 패킷을 받고, 정상적으로 받았다는 의미로 ACK 패킷을 보낸다.
  • 이때 클라이언트는 TIME-WAIT 상태로 변경되며, 일정 시간 동안 기다린 후 연결을 완전히 종료한다.
  • TIME-WAIT 상태를 두는 이유패킷 유실로 인한 문제(예: 서버가 FIN을 다시 보내는 경우)를 방지하기 위해서이다.

일정 시간이 지나면 클라이언트도 CLOSED 상태가 되어 연결이 완전히 종료된다.

🔎 TCP 상태 변화 정리

 

단계  클라이언트 상태  서버 상태
1. FIN 전송 FIN-WAIT-1 ESTABLISHED
2. ACK 응답 FIN-WAIT-2 CLOSE-WAIT
3. FIN 전송 FIN-WAIT-2 LAST-ACK
4. ACK 응답 (연결 종료) TIME-WAIT → CLOSED CLOSED

🧐 추가 개념: TIME-WAIT 상태란?

✅ 클라이언트가 TIME-WAIT 상태에서 기다리는 이유는?

  • 서버가 보낸 FIN 패킷이 손실되었을 경우를 대비해 서버가 재전송할 가능성을 고려하기 때문.
  • 일정 시간이 지나면 자동으로 CLOSED 상태로 변하면서 연결이 완전히 종료됨.

🛠 3-Way Handshake vs 4-Way Handshake 비교

구분 3-Way Handshake 4-Way Handshake

목적 연결 설정 연결 종료
패킷 수 3개 (SYN, SYN-ACK, ACK) 4개 (FIN, ACK, FIN, ACK)
특징 신뢰성 있는 데이터 전송을 위한 연결 확립 안전한 연결 종료 및 TIME-WAIT 상태 포함

 

 

 

 

 

 

참고

https://jeongkyun-it.tistory.com/180#google_vignette