3-Way Handshake와 4-Way Handshake

ejoo·2024년 5월 2일

3-Way Handshake와 4-Way Handshake

3-Way Handshake는 TCP의 접속, 4-Way Handshake는 TCP의 접속 해제 과정

SYN(synchronize sequence numbers): 연결 확인을 위해 보내는 무작위의 숫자 값
ACK(acknowledgements): Client 혹은 Server로부터 받은 SYN에 1을 더해 SYN을 잘 받았다는 ACK

3-Way Handshake

  • TCP 통신을 이용해 데이터를 전송하기 위해 네트워크 연결을 설정하는 과정(Connection Establish)
  • 양쪽 모두 데이터를 전송할 준비가 되었다는 것을 보장하고, 실제로 데이터 전달이 시작하기 전에 한 쪽이 다른 쪽이 준비되었다는 것을 알 수 있도록 한다.
  • TCP/IP 프로토콜을 이용해서 통신을 하는 응용 프로그램이 데이터를 전송하기 전에 먼저 정확한 전송을 보장하기 위해 상대방 컴퓨터와 사전에 세션을 수립하는 과정

3-Way Handshake 작동 방식

  1. 먼저 Open 한 클라이언트가 SYN(내 말 들려?)를 보내고 SYN_SENT 상태로 대기한다.

    • PORT 상태
      • Client: CLOSED -> SYN_SENT
      • Server: LISTEN
  2. 서버는 SYN-RECEIVED 상태로 바꾸고 SYN과 응답 ACK(어 잘 들려! 내 말은 들려?)를 보낸다.

    • PORT 상태
      • Client : SYN_SENT
      • Server : LISTEN -> SYN_RCV
  3. SYN과 응답 ACK를 받은 클라이언트는 ESTABLISHED 상태로 변경하고 서버에게 응답 ACK(잘 들려!)를 보낸다.

    • PORT 상태
      • Client : SYN_SENT -> ESTABLISED
      • Server : SYN_RCV
  4. 응답 ACK를 받은 서버는 ESTABLISHED 상태로 변경한다.

    • PORT 상태
      • Client : ESTABLISED
      • Server : SYN_RCV -> ESTABLISED

4-Way Handshake

4-Way Handshake 작동 방식

  1. 먼저 Close를 실행한 클라이언트가 FIN(연결 끊자!)을 보내고 FIN_WAIT_1 상태로 대기한다.

    • PORT 상태
      • Client: ESTABLISED -> FIN_WAIT_1
      • Server: ESTABLISED
  2. 서버는 CLOSE_WAIT으로 바꾸고 응답 ACK(알겠어! 잠시만~)를 전달한다. 동시에 해당 포트에 연결되어 있는 애플리케이션에게 close를 요청한다.

    • PORT 상태
      • Client: FIN_WAIT_1
      • Server: ESTABLISED -> CLOSE_WAIT
  3. ACK를 받은 클라이언트는 상태를 FIN-WAIT-2로 변경한다.

    • PORT 상태
      • Client: FIN_WAIT_1 -> FIN_WAIT_2
      • Server: CLOSE_WAIT
  4. close 요청을 받은 서버 애플리케이션은 종료 프로세스를 진행하고 FIN(나도 끊을게!)을 클라이언트로 보내 LAST_ACK 상태로 바꾼다.

    • PORT 상태
      • Client: FIN_WAIT_2
      • Server: CLOSE_WAIT -> LAST_ACK
  5. FIN을 받은 클라이언트는 ACK(알겠어!)를 서버에 다시 전송하고 TIME_WAIT으로 상태를 바꾼다. TIME-WAIT에서 일정 시간이 지나면 CLOSE 된다. ACK를 받은 서버도 포트를 CLOSED로 닫는다.

    • PORT 상태
      • Client: FIN_WAIT_2 -> TIME_WAIT -> CLOSED
      • Server: LAST_ACK -> CLOSED

TIME_WAIT: 먼저 연결을 끊는 쪽에서 생성되는 소켓으로, 혹시 모를 전송 실패에 대비하기 위해 존재하는 소켓
TIME-WAIT이 없다면, 패킷의 손실이 발생하거나 통신자 간 연결 해제가 제대로 되지 않을 수 있다.

참고
TCP와 UDP의 특징 및 차이점 알아보기
[네트워크] TCP/UDP와 3 -Way Handshake & 4 -Way Handshake

profile
안녕하세요

0개의 댓글