오늘의 인기 글
최근 글
최근 댓글
Today
Total
05-01 02:52
관리 메뉴

우노

[Network] TCP 의 3-Way Handshaking, 4-Way Handshaking 이란? 본문

Network & Security/Concept

[Network] TCP 의 3-Way Handshaking, 4-Way Handshaking 이란?

운호(Noah) 2022. 6. 10. 19:09

들어가기 앞서,

  • 3-Way Handshaking 과정은, TCP 프로토콜 통신을 ‘연결’하기 위한 과정이고
  • 4-Way Handshaking 과정은, TCP 프로토콜 통신을 ‘종료’하기 위한 과정입니다.

3-Way Handshaking

  • 패킷을 전송하기 전, TCP는 연결지향형 프로토콜이기 때문에, 송신측과 수신측이 서로 연결되는 작업이 필요합니다.

    • 이러한 작업을 3 Way Handshaking 이라고 부릅니다.
    • 3 Way Handshaking 을 수행하기 위해서는, TCP 헤더에 표시한 플래그들이 사용되며, 이러한 플래그들을 컨트롤 비트라고 부릅니다.
  • 3 Way Handshaking 은 SYN(동기화) 과 ACK(승인) 로 진행됩니다.

    • 먼저, 클라이언트는 서버에게, 접속을 요청하는 SYN 패킷을 보냅니다.
    • 서버는 SYN 패킷을 받고, 클라이언트에게 요청을 수락한다는 ACK 와 SYN 플래그가 설정된 패킷을 보냅니다.
    • 클라이언트는 다시 서버에게 ACK 패킷을 보냅니다.
    • 이제 3 Way Handshaking 으로 기기 간 연결이 성립되었으니, 데이터 통신이 가능해집니다.

4-Way Handshaking

  • 패킷 통신이 끝났다면, TCP 연결을 종료해야합니다.

    • 여기서도 TCP의 컨트롤 비트가 사용되며, 해당 단계에서는 ACK(승인), FIN(종료) 플래그가 사용됩니다.
  • 클라이언트와 서버의 연결 종료 작업을 4 Way Handshaking 이라고 부릅니다.

    • 먼저, 클라이언트는 서버에게, 연결을 종료하겠다는 의미인 FIN 패킷을 전송합니다.
    • 서버는 클라이언트에게 ACK 패킷을 보내고, 클라이언트가 보냈던 요청들에 대해 마저 응답을 보냅니다.
    • 이후, 서버의 응답이 끝나면 클라이언트에게 FIN 패킷을 전송합니다.
    • 클라이언트는 서버의 통신 종료를 확인한 뒤, 서버에게 ACK 패킷을 전송하고, 연결이 종료됩니다.
  • 하지만, 서버가 클라이언트에게 FIN 을 보내는 과정에서 한가지 문제가 발생할 수 있습니다.

    • 서버가 클라이언트에게 FIN 을 보내기 전에, 이전에 서버가 클라이언트에게 응답 했던 패킷이 FIN 보다 늦게 도착할 수도 있습니다.
    • 그렇게 되면, 클라이언트가 서버의 일부 응답을 받지 못하게 됩니다.
  • 따라서, 클라이언트는 서버로부터 FIN 패킷을 받고, ACK 패킷을 보낸 뒤에도,

  • 일정 시간동안 혹시나 아직 도착하지 않은 잉여 패킷을 기다립니다.

    • 이렇게, 4 Way handshaking 이후에도 소켓을 닫지 않고 잉여패킷을 기다리는 상태를, TIME_WAIT 이라고 합니다.

참고

Comments