[Network] TCP 3 way handshake & 4 way handshake

미누·2024년 3월 2일

CS_네트워크

목록 보기
2/8

📌 3-way-handshake (연결 설정)

3-way-handshake는 신뢰적인 데이터 전송을 보장하기 위해 3개의 패킷을 주고 받으며 사전 연결 설정을 수립하는 과정이다.

1 단계 : 클라이언트 -> 서버 (SYN)

  • 클라이언트가 서버에게 연결 요청 메세지를 전송하는 단계다.
  • SYN 플래그 비트를 1로 설정하고, 랜덤으로 Sequence Number를 지정한 세그먼트를 전송한다.
  • 1단계 종료후 포트 상태
    • 클라이언트 : CLOSED(포트가 닫힌 상태)
    • 서버 : LISTEN(포트가 열린 상태로 연결 요청 대기 중)
여기서 SYN 플래그 비트란 연결 요청 플래그이다.
  • TCP에서 세션을 성립할 때 가장 먼저 보내는 패킷
  • 시퀀스 번호를 임의적으로 설정하여 세션을 연결하는 데에 사용되며 초기에 시퀀스 번호를 보내게 된다.

2 단계 : 서버 -> 클라이언트 (SYN + ACK)

  • 서버가 클라이언트의 연결 요청을 수락하여, 클라이언트의 포트도 열어 달리는 메세지를 전송하는 단계다.
  • SYN 플래그 비트를 1로 설정하고, ACK 플래그 비트를 1로 설정하고, Acknowledgement Number 필드를 “Sequence Number + 1”로 지정한 세그먼트를 전송한다.
  • 클라이언트는 서버의 ACK를 통해 현재 서버가 alive 임을 확인한다.
  • 2단계 종료후 포트 상태
    - 클라이언트 : CLOSED -> ESTABLISHED(포트 연결 상태)
    - 서버 : LISTEN -> SYN_RCV(SYN 요청을 받고 상대방의 응답을 기다리는 중)
    여기서 ACK 플래그 비트란
    • 상대방으로부터 패킷을 받았다는 걸 알려주는 패킷, 다른 플래그와 같이 출력되는 경우도 있습니다.
    • 받는 사람이 보낸 사람 시퀀스 번호에 TCP 계층에서 길이 또는 데이터 양을 더한 것과 같은 ACK를 보냅니다.(일반적으로 +1 하여 보냄)
    • ACK 응답을 통해 보낸 패킷에 대한 성공, 실패를 판단하여 재전송하거나 다음 패킷을 전송한다.

3단계 : 클라이언트 -> 서버 (ACK)

  • 마지막으로 호스트 클라이언트가 서버에게 확인 메세지를 전송함으로써 서버가 클라이언트를 확인하여 연결을 확립하는 단계다.
  • 이때 전송할 데이터가 있으면 이 단계에서 데이터를 전송할 수 있다.
  • 서버는 클라이언트의 ACK를 통해 현재 클라이언트가 alive 임을 확인한다.
  • 3단계 종료후 포트 상태
    • 클라이언트 : ESTABLISHED
    • 서버 : ESTABLISHED

📌 4-way-handshake (연결해제)

4개의 특별한 패킷을 주고 받으며 TCP 연결을 해제하는 방법이다.

1단계 : 클라이언트 -> 서버(FIN)

  • 클라이언트는 서버에게 연결을 종료하겠다는 FIN 플래그를 1로 설정한 세그먼트를 보낸다.
  • 포트 상태
    - 클라이언트 : FIN_WAIT_1
    - 서버 : CLOSE_WAIT
    여기서 FIN 플래그는 연결 종료 요청이다.
    • 세션 연결을 종료시킬 때 사용되며 더 이상 전송할 데이터가 없음을 나타낸다.

2단계 : 서버 -> 클라이언트(ACK)

  • 서버는 클라이언트에게 ACK를 보낸다. ACK를 받은 클라이언트는 FIN_WAIT_2로 포트 상태를 바꾼 뒤 서버의 FIN 패킷을 기다린다.
  • 포트 상태
    • 클라이언트 : FIN_WAIT_2
    • 서버 : CLOSE_WAIT

3단계 : B -> A(FIN)

  • 서버도 클라이언트에게 연결을 종료하겠다는 FIN 플래그를 1로 설정한 세그먼트를 보낸다.
  • 포트 상태
    • 클라이언트 : TIME_WAIT
    • 서버 : LAST_ACK

4단계 : A -> B(ACK)

  • 클라이언트는 서버의 종료 요청에 응답하여 마지막 ACK를 보낸다.
  • 마지막 ACK를 수신한 서버는 포트를 닫는다.
  • 포트 상태
    • 클라이언트 : CLOSED
    • 서버 : CLOSED

📕 정리

  • 3 way handshake에 대해 설명해주세요.

    • 3-way-handshake는 클라이언트와 서버가 3개의 패킷을 주고 받으며, TCP 사전 연결 설정을 하는 과정 입니다.
    • 1. 먼저 클라이언트가 서버에 TCP 연결 요청을 하면
    • 2. 서버는 그에 대한 응답을하고
    • 3. 마지막으로 클라이언트가 다시 한 번 자신이 가용상태라는 것을 응답하면서 연결이 설정됩니다.
  • 4 way handshake에 대해 설명해주세요.

    • 4-way-handshake는 클라이언트와 서버가 4개의 패킷을 주고 받으며, TCP 연결 종료를 하는 과정 입니다.
    • 1. 먼저 클라이언트가 서버에게 종료 요청을 하면
    • 2. 서버는 그에 대한 응답을 합니다.
    • 3. 서버 역시 클라이언트에게 종료 요청을 하고,
    • 4. 클라이언트는 서버의 종료 요청에 대한 응답을 함으로써 TCP 연결은 종료됩니다.

      참고

      https://search.shopping.naver.com/book/catalog/32463541453

0개의 댓글