[네트워크] 4-way Handshake

opixxx·2024년 4월 9일
0

네트워트

목록 보기
13/14

이 글은 보초님 깃허브 레포를 참고해서 공부한 글입니다

4-Way Handshake에 대해 설명해 주세요

4-way Handshake 란?

3-way Handshake 는 TCP 의 연결을 할 때 사용한다면, 4-way Handshake 는 세션을 종료하기 위해 사용된다.

동작 과정

  1. 클라이언트가 연결을 종료하겠다는 FIN 패킷을 전송한다. 이 때 클라이언트는 FIN_WAIT 상태가 된다.
  2. 서버는 FIN 플래그를 받고, 응답 패킷 ACK 를 보낸다. 상태는 CLOSE_WAIT 상태가 된다.
  3. 서버가 연결을 종료할 준비가 되면 클라이언트에게 FIN 패킷을 보내고 LAST_WAIT 상태가 된다.
  4. 클라이언트는 확인 패킷 ACK 을 보내고 TIME_WAIT 상태가 된다.

패킷이 4-way handshake 목적인지 어떻게 파악할 수 있을까요?

FIN 플래그를 통해 알 수 있다.

빨리 끊어야 할 경우엔, (즉, 4-way Handshake를 할 여유가 없다면) 어떻게 종료할 수 있을까요?

Abrupt Connection release(갑작스러운 연결 해제)

RST 패킷을 사용하여 실행된다. RST 패킷은 연결을 즉시 종료시키고, 양쪽 통신 당사자 간에 더 이상의 데이터 전송을 시도하지 않는다.
보통 연결 오류가 발생했거나, 보안 문제가 감지되었을 때 빠른 종료가 필요한 경우 사용된다. 이 방법은 연결을 즉시 종료하나, 대기 중이거나 전송 중인 데이터가 손실될 수 있다.

4-Way Handshake 과정에서 중간에 한쪽 네트워크가 강제로 종료된다면, 반대쪽은 이를 어떻게 인식할 수 있을까요?

TCP 는 데이터나 제어 패킷(FIN, ACK) 전송 시, 상대방으로부터 예상되는 등답을 일정 시간 내에 받지 못하면 Timeout 이 발생한다. 이 경우 패킷을 재전송하고, 일정 횟수의 재전송을 시도 후에도 응답이 없으면 연결 문제를 감지하고 연결을 종료한다.

왜 종료 후에 바로 끝나지 않고, TIME_WAIT 상태로 대기하는 것 일까요?

먄약 서버에서 FIN 플래그를 전송하기 전에 전송한 패킷이 라우팅 지연이나 패킷 유실로 인한 재전송 등으로 인해 FIN 패킷보다 늦게 도착하는 상황이 발생 할 수 있다. 그렇기 때문에 클라이언트는 서버로부터 FIN 플래그를 수신하더라도 일정시간동아나 세션을 남겨 놓고 잉여 패킷을 기다리는 TIME_WAIT 상태로 대기한다.

profile
개발공부저장소

0개의 댓글

관련 채용 정보