TCP - 3-Way Handshake / 4-Way Handshake

LGE·2025년 4월 1일
post-thumbnail

3-Way Handshake - 연결 생성

신뢰성 있는 연결을 설정하기 위한 과정이다. 클라이언트와 서버가 통신을 시작하기 전에 서로 연결을 성립시키기 위해 세 단계의 패킷을 교환한다.

1. SYN (Synchronize) - 연결 요청

  • 클라이언트(요청자)가 서버(수신자)에게 연결 요청.
  • 이때 클라이언트는 SYN 플래그를 세팅한 TCP 패킷을 서버로 전송하고, 자신의 초기 시퀀스 번호 (Sequence Number)를 포함한다.
클라이언트 → 서버 : SYN, SEQ=x

2. SYN-ACK (Synchronize-Acknowledge) - 요청 수락 및 응답

  • 서버는 클라이언트의 요청을 받고, 연결 요청을 수락한다는 응답을 보냄.
  • 이때 SYN과 ACK 플래그가 모두 설정된 패킷을 보냄.
  • ACK는 클라이언트의 시퀀스 번호 +1로 설정되고, 서버도 자신의 초기 시퀀스 번호를 포함한다.
서버 → 클라이언트 : SYN, ACK, SEQ=y, ACK=x+1

3. ACK (Acknowledge) - 최종 확인

  • 클라이언트는 서버의 응답을 받고, 이에 대한 확인 응답을 보낸다.
  • 이때는 ACK 플래그만 설정되고, 서버의 시퀀스 번호 +1을 ACK로 설정해 응답함.
클라이언트 → 서버 : ACK, SEQ=x+1, ACK=y+1

이 과정을 거친 후, 클라이언트와 서버 간에 TCP 연결이 정상적으로 설정돼서 데이터를 주고받을 준비가 완료된다.


4-Way Handshake - 연결 종료

연결을 생성할 때와 마찬가지로, 연결을 종료할 때도 특정한 과정을 거쳐 연결을 종료해야 한다. TCP는 전이중(Full-duplex) 통신이라, 양쪽이 각각 연결을 종료해야함으로 4단계로 이루어져 있다.


1. FIN (Finish) - 연결 종료 요청

  • 클라이언트(또는 서버)가 더 이상 보낼 데이터가 없을 때, 연결을 종료하겠다는 요청을 보냄.
  • 이때 FIN 플래그가 설정되고, 자신의 시퀀스 번호를 포함한 패킷을 전송.
클라이언트 → 서버 : FIN, SEQ=x

2. ACK (Acknowledge) - 종료 요청 수락

  • 서버는 종료 요청을 수락하고, 확인 응답을 보냄.
  • ACK 플래그가 설정되고, 클라이언트의 시퀀스 번호 +1을 ACK 번호로 설정.
서버 → 클라이언트 : ACK, SEQ=y, ACK=x+1

3. FIN (Finish) - 서버도 종료 요청

  • 서버도 자신의 데이터 전송을 마치고 연결을 종료하겠다는 FIN 요청을 보냄.
서버 → 클라이언트 : FIN, SEQ=y

4. ACK (Acknowledge) - 클라이언트 최종 확인

  • 클라이언트는 서버의 종료 요청을 수락하고, 마지막으로 ACK 응답을 보냄.
클라이언트 → 서버 : ACK, SEQ=x+1, ACK=y+1

TIME_WAIT

  • 마지막 ACK를 보낸 후, 클라이언트는 TIME_WAIT 상태로 잠시 대기한다.
    • 지연된 패킷이 네트워크 상에 남아 있을 수 있기 때문.
  • 일반적으로 이 상태는 2 * MSL (Maximum Segment Lifetime) 동안 유지됨. (약 1~4분)


출처 및 참고

profile
안녕하세요

0개의 댓글