3-way / 4-way Handshake

KwonKusang·2021년 8월 4일
0

3-way Handshake

TCP 세션을 연결하기 위한 과정이다.

  1. client가 server에게 SYN 패킷을 전송하며 SYN-SENT 상태로 전환한다.
  2. server는 SYN 패킷에 대한 답변으로 ACK패킷과 함께 server가 client에게 동기화를 요청하는 SYN 패킷이 합쳐진 SYN+ACK 패킷을 client에게 전송한다.
  3. client는 받은 SYN+ACK 패킷에 대한 답변으로 server에게 ACK 패킷을 전송하며 ESTABLISHED 상태로 전환한다.
  4. server ACK 패킷을 받아 동기화가 정상적으로 되었다는 것을 확인한 후 ESTABLISHED 상태로 전환한다.

4-way Handshake

FIN 패킷으로 세션 연결을 종료하기 위한 과정이다.

  1. client가 세션 연결을 종료하기 위해 server에게 FIN 패킷을 전송하며 FIN-WAIT 상태로 전환한다.
    • 연결을 바로 종료하는 것이 아닌 server가 ACK 패킷을 전송할 때까지 기다린다.
  2. server가 ACK 패킷을 전송하며 CLOSE-WAIT 상태로 전환한다.
  3. 이전에는 client가 종료를 원한다고 FIN 패킷을 전송했다면, 이번에는 서버가 종료를 원한다고 client에게 FIN 패킷을 전송한다.
    • 양측 모두가 종료를 원해야 세션 연결을 종료할 수 있다.
  4. client가 server가 보낸 FIN 패킷의 답변으로 ACK패킷을 전송한다.
    • 이때 client는 server가 ACK 패킷을 정상적으로 받았는지 알 수 없기 때문에 기존보다 두 배의 시간을 기다린 후 CLOSED 상태로 전환한다.
  5. server는 client의 ACK 패킷을 받으면 CLOSED 상태로 전환하여 세션 연결이 종료된다.

profile
안녕하세요! 백엔드 개발자 권구상입니다.

0개의 댓글