본문 바로가기
면접,CS/네트워크

[네트워크]3-way handshake / 4-way handshake

by Cafe Mocha 2023. 1. 10.

TCP 연결 성립 과정

3-웨이 핸드셰이크(3-way handshake)

클라이언트와 서버가 통신할 때 하기와 같은 세 단계의 과정을 거친다.

  1. SYN 단계 : 클라이언트는 서버에 클라이언트의 ISN을 담아 SYN을 보낸다.
  2. SYN + ACK 단계 : 서버는 클라이언트의 SYN을 수신하고 서버의 ISN을 보내며 승인번호로 클라이언트의 ISN+1을 보낸다.
  3. ACK 단계 : 클라이언트는 서버의 ISN+1한 값인 승인번호를 담아 ACK를 서버에 보낸다.

ISN?

ISN은 새로운 TCP 연결의 첫 번재 패킷에 할당된 임의의 시퀀스 번호이며 장치마다 다를 수 있다.

TCP 연결 해제 과정

4-웨이 핸드셰이크(4-way handshake)

TCP가 연결을 해제할 때는 하기의 네 단계의 과정을 거친다.

  1. 클라이언트가 연결을 닫으려고 할 때 FIN으로 설정된 세그먼트를 보낸다. 그리고, 클라이언트는 FIN_WAIT_1 상태로 들어가고 서버의 응답을 기다린다.
  2. 서버는 클라이언트로 ACK 승인 세그먼트를 보낸다. 그리고, CLOSE_WAIT 상태로 들어가고 클라이언트가 세그먼트를 받으면 FIN_WAIT_2 상태로 들어간다.
  3. 서버는 ACK를 보내고 일정 시간 이후에 클라이언트에 FIN이라는 세그먼트를 보낸다.
  4. 클라이언트는 TIME_WAIT 상태가 되고 다시 서버로 ACK를 보내서 서버는 CLOSED 상태가 된다. 이후 클라이언트는 일정 시간 대기 후 연결이 닫히고 클라이언트와 서버의 모든 자원의 연결이 해제된다.

TIME_WAIT은 왜 할까?

  1. 지연 패킷이 발생할 경우를 대비하기 위해 패킷이 뒤늦게 도달하고 이를 처리하지 못하면 데이터 무결성 문제가 발생한다.
  2. 두 장치가 연결이 닫혔는지 확인하기 위해 만약 LAST_ACK상태에서 닫히면 다시 새로운 연결을 하려고 할 때 장치는 LAST_ACK로 유지하기 때문에 오류 발생
  • CentOS6, 우분투는 60초로 설정되어 있으며, 윈도우는 4분으로 설정되어 있다.