[CS]3-way Handshake, 4-Way Handshake의 개념

무지성개발자·2023년 8월 26일
0

3-way Handshake

TCP통신에서 안전한 통신을 위하여 연결을 수립하는 과정을 3-way Handshake라고 한다. 문자 그대로 클라이언트와 서버가 통신을 하기전에 3개의 통신을 주고 받는 작업이다.

  • 클라이언트가 서버에 연결하겠다고 SYN Flag를 보낸다.
    • 클라이언트의 상태는 SYN-SENT가 되며 서버의 ACK Flag를 기다린다.
  • 서버가 SYN Flag를 받고 다시 클라이언트에 SYN + ACK Flag를 보낸다.
    • 서버는 LISTEN 상태에서 SYN_RECEIVED 상태로 변하며 클라이언트의 ACK Flag를 기다린다.
  • SYN + ACK Flag를 받은 클라이언트는 ACK Flag를 서버로 보낸다.
    • 클라이언트는 ESTABLISHED 상태로 변한다. 연결 수립상태가 된 것 이다.
    • ACK Flag를 받은 서버도 ESTABLISHED 상태가 된다.

이렇게 통신의 신뢰성을 위해 3번의 핸드쉐이킹을 거쳐 연결을 맺는 것을 3-Way Handshake라고 한다.

4-Way Handshake

  • 클라이언트가 연결을 끊겠다고 FIN Flag를 보냄.
    • 클라이언트는 FIN-WAIT-1상태가 되고 ACK Flag를 기다림.
  • FIN Flag를 받은 서버는 ACK Flag를 보냄.
    • 서버의 상태는 CLOSE-WAIT 상태가 되며 진행 중인 작업들이 끝나길 기다림.
    • ACK Flag를 받은 클라이언트는 FIN-WAIT-2상태로 변하고 서버측의 FIN Flag를 기다림.
  • 서버에서 FIN Flag를 클라이언트에 보냄.
    • 서버 상태는 LAST-ACK로 변하고 ACK Flag를 기다림.
  • 클라이언트는 ACK Flag를 서버로 보냄.
    • ACK Flag를 받은 서버는 CLOSED가 됨.
    • 클라이언트는 바로 CLOSED가 되는 것이 아니라 TIME-WAIT상대로 변하는데 서버에서 아직 다 오지 못한 패킷들이 있을 수 있어 기다리는 상태다. 기본 240초 이며 이후 CLOSED로 바뀐다.

이렇게 4번의 핸드쉐이킹을 거쳐 연결을 해제하는 것을 4-Way Handshake라고 하며, TIME-WAIT을 통해 종료 후에도 일정시간 유실되거나 지연된 데이터를 안전하게 받도록 기다린다.


한 줄평 : TCP통신의 처음과 끝을 담당하여 통신의 안전성을 높여준다.

참고 -
https://jeongkyun-it.tistory.com/180

profile
no-intelli 개발자 입니다. 그래도 intellij는 씁니다.

0개의 댓글