네트워크

TCP 연결 과정

2025-06-17 14:04


TCP 연결 과정

시작하기

이전 포스팅에서 TCP 는 OSI 4계층에서 신뢰성을 보장한 프로토콜이라고 소개했었다.
TCP가 어떻게 연결을 수립하고 데이터를 주고 받은 후 종료하는지 그 과정을 차례대로 이해해보자.

TCP 정의

TCP(Transmission Control Protocol) 는 연결 지향적이고, 신뢰성 있는 전송을 보장하는 프로토콜이다.

일반적으로 네트워크에서 데이터를 주고 받을 때 패킷을 기본 단위로 사용해왔지만,
TCP에서는 기본적으로 바이트 스트림 기반으로 동작한다. 애플리케이션이 보내는 데이터를 바이트 단위로 처리하고, 이 바이트들을 TCP가 적절히 나누어서 전송한다. 이때 나뉜 데이터 블록을 TCP 세그먼트 라고 한다.

각 바이트에는 고유한 번호가 매겨지고, 시퀀스 번호(Sequence Number) 를 가진다.
이 번호를 통해서 데이터 수신자에서는 정확한 순서로 데이터를 재조립해서 통신할 수 있다.

TCP 시퀀스 번호 (Sequence Number)

TCP에서는 데이터가 바이트 스트림 형태로 전송되기 위해서 각 바이트에 고유한 시퀀스 번호가 부여된다.
시퀀스 번호는 첫 번째 바이트부터 순차적으로 할당된다.

ISN (Initial Sequence Number)

예를 들어,
첫 번째 바이트가 ISN+1이라면,
두 번째 바이트는 ISN+2,
세 번째 바이트는 ISN+3 순으로 계속 증가한다.

TCP 시퀀스 번호와 ACK

TCP는 수신한 데이터에 대해서 ACK (Acknowledgment) 번호를 보낸다.
이 번호는 다음에 받을 바이트 번호이다.

예를 들면, 시퀀스 번호 1001부터 1010까지 데이터를 받았다면,
수신자 측은 ACK 1011을 응답값으로 보낸다.

성공적으로 수신한 데이터의 마지막 바이트 번호 + 1 을 ACK로 보낸다.

양방향 통신 (Full-Duplex)

TCP는 양방향 연결(Full-Duplex) 을 전제로 한다.
즉, 데이터를 보내는 쪽과 받는 쪽이 모두 시퀀스 번호와 ACK 번호를 관리하며 서로 확인 응답을 주고받는다.

이러한 구조 덕분에 TCP는 신뢰성과 순서를 보장할 수 있다.

3-Way Handshake 연결 과정

  1. SYN
    클라이언트가 서버에게 연결 요청을 보내면서 자신의 ISN을 같이 보낸다.

  2. SYN-ACK
    서버가 클라이언트의 요청을 수락하고, ISN을 잘 받은 것을 확인한다.
    동시에 자신의 ISN을 함께 보낸다.

  3. ACK
    클라이언트가 서버의 응답을 잘 받았다고 확인 메시지를 보낸다.

TCP 연결 종료 (4-Way Handshake)

TCP 연결을 정상적으로 종료하려면 양쪽에 보낼 데이터가 없다고 알려야 한다.
이때 사용하는 것이 FIN 패킷이다.

FINFinish 의 약자로,
양쪽이 모두 FIN과 ACK를 주고 받으면 연결이 완전히 종료된다.

TCP는 양방향 통신이기 때문에,
종료도 양쪽 모두 동의해야 완전히 닫힌다.

요약




 TCP  네트워크