[Backend 개발자 면접 준비] TCP 연결 / 해제 과정 (3 / 4 way HandShake)
TCP (Transmission Control Protocol) 란?
▪️ 서버와 클라이언트간에 데이터를 신뢰성 있게 전달하기 위해 만들어진 프로토콜이다.
▪️ 데이터를 전송하기 전에 데이터 전송을 위한 연결을 만드는 연결지향 프로토콜이다.
▪️ 데이터는 네트워크선로를 통해 전달되는 과정에서 손실되거나 순서가 뒤바뀌어서 전달될 수 있는데, TCP는 손실을 검색해내서,이를 교정하고 순서를 재조합할수 있도록 해준다.
TCP 의 역할
▪️ 받을 대상 노드 (호스트)가 서비스 기능 (연결 기능) 상태인지 확인 및 연결을 수립하는 역할
▪️ 전송을 제어해주는 정보를 패킷에 추가해주는 역할
TCP 연결 성립 과정
TCP 는 신뢰성을 확보 할 때 '3 way handshake' 라는 작업을 진행 한다.

1️⃣ SYN : 클라이언트는 서버에 클라이언트의 ISN 을 담아 SYN을 보낸다. ISN은 새로운 TCP 연결의 첫번째 패킷에 할당된 임의의 시퀀스 번호를 말하며 이는 장치마다 다를 수 있다.
2️⃣ SYN + ACK : 서버는 클라이언트의 SYN을 수신하고 서버의 ISN 을 보내며 승인번호로 클라이언트의 ISN + 1 을 보낸다.
3️⃣ ACK : 클라이언트는 서버의 ISN + 1 한 값인 승인번호를 담아 ACK 를 서버에 보낸다.
이렇게 3 way handshake 과정 이후 신뢰성이 구축되고 데이터 전송을 시작한다.
이러한 과정이 있기 때문에 신뢰성이 있는 계층이라고 하며 UDP 는 이러한 과정이 없기 때문에 신뢰성이 없는 계층이라고 한다.
* SYN : Synchronize 의 약자이며, 연결 요청 플래그
* ACK : Acknowledgment 의 약자이며, 응답 플래그
* ISN : Initial Sequence Numbe 의 약어, 초기 네트워크 연결을 할 때 할당된 32비트 고유 시퀀스 번호이다.
TCP 연결 해제 과정
TCP 가 연결을 해제할 때는 '4 way handshake' 라는 작업을 진행 한다.
1️⃣ 클라이언트가 연결을 닫으려고 할 때 FIN 으로 설정된 세그먼트를 보낸다. 그리고 클라이언트는 FIN_WAIT_1 상태로 들어가고 서버의 응답을 기다린다.
2️⃣ 서버는 클라이언트로 ACK 라는 승인 세그먼트를 보낸다. 그리고 CLOSE_WAIT 상태에 들어간다. 클라이언트가 세그먼트를 받으면 FIN_WAIT_2 상태에 들어간다.
3️⃣ 서버는 ACK 를 보내고 일정 시간 이후에 클라이언트에 FIN 이라는 세그먼트를 보낸다.
4️⃣ 클라이언트는 TIME_WAIT 상태가 되고 다시 서버로 ACK 를 보내서 서버는 CLOSED 상태가 된다. 이후 클라이언트는 어느 정도의 시간을 대기한 후 연결이 닫히고 클라이언트와 서버의 모든 자원의 연결이 해제된다.
Reference