CS/Network

[CS/Network] TCP의 3&4-way handshake

yulee_to 2022. 12. 28. 22:16

 

Network


3-way handshake

TCP는 장치들 사잉에서 논리적인 접속을 성립하기 위하여 3-way handshake를 사용한다.

3-way handshake는 TCP/IP 프로토콜을 이용해 데이터를 전송하기 전에 수행되는 Setup 과정을 의미한다. 이 과정으로 양쪽 모두 데이터를 전송할 준비가 되었다는 것을 보장하고, 실제로 데이터 전달이 시작되기 전에 한쪽이 다른 쪽이 준비되었다는 것을 알 수 있도록 해준다.

Setup 과정

  1. 서버는 먼저 실행돼서 요청 대기
  2. SYN을 통해 연결 요청 (SYN = 1)
  3. SYN + ACK로 연결 허락 후 연결 요청 ( SYN = 1, ACK = 1)
  4. 받은 여결 요청에 대한 응답으로 ACK을 보냄 (ACK = 1)

SYN은 synchronize sequence number의 약자로 연결요청을 하는 packet이고, ACK은 acknowledgement의 약자로 받았다는 확인 packet이다.


4-way handshake

4-way handshake는 연결을 해제하는 과정이다. 여기서는 FIN이라는 세션 종료 packet을 이용해 더이상 보낸 데이터가 없음을 나타낸다.

Termination 종류

  1. Graceful connection release( 정상적인 연결 해제 )
  2. Abrupt connection release(갑작스런 연결 해제)
    1. 갑자기 한 TCP 엔티티가 연결을 강제로 닫는 경우
    2. 한 사용자가 두 데이터 전송 방향을 모두 닫는 경우

정상적인 연결 해제

half close 기법으로 클라이언트가 종료를 요청할 때 처음보내는 FIN 패킷에 승인번호를 함께 담아서 해당 번호까지 처리했음을 함께 알려준다. 이후 서버가 남은 데이터를 모두 보내고 나면 다시 요청자에게 FIN 패킷을 보냄으로써 모든 데이터가 처리되었다는 신호를 보낸다. 그럼 그때 클라이언트가 나머지 반을 닫으면서 좀 더 안전하게 연결을 종료한다.

과정

  1. 클라이언트가 FIN을 보냄
  2. 서버가 확인했다는 ACK을 보냄
  3. 서버가 데이터를 모두 보냈다면 연결 종료에 합의한다는 의미로 FIN을 보냄
  4. 클라이언트는 FIN을 받고 확인했다는 ACK을 보냄
    1. 아직 서버로부터 받지 못한 데이터가 있을 수 있으므로 TIME_WAIT을 통해 기다렸다가 실질적인 종료과정 CLOSED 에 들어간다.

서버는 ACK을 받은 이후 소켓을 닫고, TIME_WAIT 시간이 끝나면 클라이언트도 닫는다.

갑작스런 연결 해제

RST(TCP reset) 세그먼트가 전송되면 갑작스러운 연결 해제가 수행되는데, RST 세그먼트는 다음과 같은 경우에 전송된다.

  • 존재하지 않는 TCP 연결에 대해 비SYN 세그먼트가 수신된 경우
  • 열린 커넥션에서 일부 TCP 구현은 잘못된 헤더가 있는 세그먼트가 수신된 경우
  • 일부 구현에서 기존 TCP 연결을 종료해야 하는 경우 
  • 연결을 지원하는 리소스 부족할 때
  • 원격 호스트에 연결할 수 없고 응답이 중지되었을 때

참고 자료 : 

https://velog.io/@averycode/네트워크-TCPUDP와-3-Way-Handshake4-Way-Handshake

728x90

'CS > Network' 카테고리의 다른 글

[CS/Network] 세션(Session) & JWT  (0) 2022.08.08