이번 글에서는 TCP에 대해서 정리해보고자 한다.
TCP(Transmission Control Protocol)란?
인터넷에서 데이터를 전송할 때 사용하는 대표적인 전송 계층 프로토콜은 TCP와 UDP이다.
TCP(Transmission Control Protocol)는 신뢰성 있는 데이터 전송을 제공하기 위해 설계된 연결 지향(Connection-Oriented) 프로토콜이다. 단순히 데이터를 보내는 것이 아니라, 데이터가 손실 없이 순서대로 도착했는지 확인하며 전송한다.
웹 브라우징(HTTP/HTTPS), 이메일(SMTP), 파일 전송(FTP) 등 대부분의 인터넷 서비스는 TCP를 기반으로 동작한다.
TCP의 특징
TCP는 다음과 같은 특징을 가진다.
1. 연결 지향(Connection-Oriented)
데이터를 전송하기 전에 송신자와 수신자가 연결을 설정한다.
TCP는 통신을 시작하기 전 3-Way Handshake 과정을 통해 서로 통신 가능한 상태인지 확인한다.
2. 신뢰성(Reliability)
패킷이 손실되거나 순서가 바뀌더라도 이를 복구할 수 있다.
이를 위해 다음과 같은 기능을 제공한다.
- Sequence Number
- ACK(Acknowledgement)
- Retransmission
3. 순서 보장(In-order Delivery)
수신자는 Sequence Number를 이용하여 데이터의 순서를 확인한다.
패킷이 도착 순서가 뒤바뀌더라도 올바른 순서로 재조립할 수 있다.
4. 흐름 제어(Flow Control)
수신자의 처리 속도를 고려하여 송신 속도를 조절한다.
수신자는 TCP 헤더의 Receive Window(rwnd) 필드를 통해 현재 수신 가능한 버퍼 크기를 송신자에게 알려준다.
5. 혼잡 제어(Congestion Control)
네트워크가 혼잡한 경우 전송 속도를 줄여 전체 네트워크 성능 저하를 방지한다.
TCP는 네트워크 상태를 추정하며 스스로 전송량을 조절한다.
TCP 세그먼트 구조
TCP는 데이터를 세그먼트(Segment) 단위로 전송한다.
주요 필드는 다음과 같다.
| Source Port | 송신 포트 번호 |
| Destination Port | 수신 포트 번호 |
| Sequence Number | 데이터의 순서를 나타냄 |
| Acknowledgement Number | 다음에 받을 데이터 번호 |
| Window Size | 수신 가능한 버퍼 크기 |
| Checksum | 오류 검출 |
| SYN, ACK, FIN | 연결 관리 |
특히 Sequence Number와 ACK는 TCP 신뢰성의 핵심 요소이다.
Sequence Number와 ACK
TCP는 바이트 단위로 데이터를 관리한다.
예를 들어 Sequence Number가 100이라면 현재 세그먼트의 첫 번째 바이트 번호가 100임을 의미한다.
수신자는 데이터를 정상적으로 받으면 ACK를 전송한다.
예시:
- 송신: Seq = 100, 길이 = 20 byte
- 수신 완료
- 응답: ACK = 120
이는 120번 바이트부터 보내달라는 의미이다.
TCP는 누적 ACK(Cumulative ACK)를 사용하여 여러 데이터를 한 번에 확인할 수 있다.
재전송(Retransmission)
패킷이 손실될 경우 TCP는 재전송을 수행한다.
Timeout 기반 재전송
일정 시간 내 ACK가 도착하지 않으면 손실로 판단한다.
이때 동일한 세그먼트를 다시 전송한다.
Fast Retransmit
동일한 ACK가 3번 연속 도착하면 패킷 손실로 판단한다.
Timeout을 기다리지 않고 즉시 재전송한다.
이를 Triple Duplicate ACK라고 부른다.
RTT와 Timeout 계산
TCP는 RTT(Round Trip Time)를 이용해 적절한 Timeout 값을 계산한다.
RTT는 데이터 전송 후 ACK를 받을 때까지 걸린 시간이다.
TCP는 단순 평균이 아닌 EWMA(Exponential Weighted Moving Average)를 사용한다.
EstimatedRTT = (1 − α) × EstimatedRTT + α × SampleRTT
일반적으로 α = 0.125를 사용한다.
Timeout 값은 다음과 같이 계산된다.
TimeoutInterval = EstimatedRTT + 4 × DevRTT
이를 통해 네트워크 상황 변화에 유연하게 대응할 수 있다.
흐름 제어(Flow Control)
송신자가 너무 빠르게 데이터를 보내면 수신자의 버퍼가 가득 찰 수 있다.
이를 방지하기 위해 TCP는 Receive Window(rwnd)를 사용한다.
수신자는 현재 남은 버퍼 크기를 송신자에게 알린다.
송신자는 rwnd를 초과하지 않는 범위에서만 데이터를 전송한다.
즉, 수신자의 처리 능력에 맞춰 전송 속도를 조절하는 기능이다.
3-Way Handshake
TCP 연결은 다음 과정을 통해 생성된다.

1단계
Client → Server
SYN
2단계
Server → Client
SYN + ACK
3단계
Client → Server
ACK
이 과정을 통해 양측은
- 통신 가능 여부 확인
- 초기 Sequence Number 교환
- 연결 상태 동기화
를 수행한다.
연결 종료 (4-Way Handshake)
연결 종료는 일반적으로 4단계로 이루어진다.

- Client → FIN
- Server → ACK
- Server → FIN
- Client → ACK
종료 후 일정 시간 동안 TIME_WAIT 상태를 유지하여 지연된 패킷으로 인한 문제를 방지한다.
TCP 혼잡 제어
혼잡 제어는 TCP의 핵심 기능 중 하나이다.
혼잡이 발생하면 패킷 손실과 지연이 증가한다.
TCP는 Congestion Window(cwnd)를 사용하여 전송량을 조절한다.
전송 가능 데이터 양은 다음과 같이 결정된다.
전송 가능 데이터 < cwnd
Slow Start
연결 직후에는 네트워크 상태를 알 수 없다.
따라서 작은 크기로 시작한다.
초기값: cwnd = 1 MSS
ACK를 받을 때마다 cwnd를 증가시킨다.
결과적으로 RTT마다 전송량이 2배씩 증가한다.
이를 Slow Start라고 한다.
Congestion Avoidance
Slow Start가 계속되면 혼잡이 발생할 수 있다.
특정 임계값(ssthresh)에 도달하면 증가 방식을 변경한다.
- Slow Start: 지수 증가
- Congestion Avoidance: 선형 증가
이를 통해 네트워크를 안정적으로 활용할 수 있다.
TCP와 UDP 비교
| TCP | UDP | |
| 연결 방식 | 연결 지향 | 비연결 |
| 신뢰성 | 보장 | 보장하지 않음 |
| 순서 보장 | 가능 | 불가능 |
| 흐름 제어 | 지원 | 미지원 |
| 혼잡 제어 | 지원 | 미지원 |
| 속도 | 상대적으로 느림 | 빠름 |
TCP는 단순히 데이터를 전송하는 프로토콜이 아니다.
Sequence Number, ACK, 재전송, 흐름 제어, 혼잡 제어 등의 메커니즘을 통해 인터넷 환경에서 신뢰성 있는 통신을 제공한다.
오늘날 웹 서비스, 이메일, 파일 전송 등 대부분의 인터넷 서비스가 TCP를 사용하는 이유도 이러한 신뢰성 때문이다.
'CS > Computer Network' 카테고리의 다른 글
| [컴퓨터네트워크/Computer Network] 신뢰적인 데이터 전송 원리 완벽 정리 (rdt 3.0) (0) | 2026.05.23 |
|---|---|
| [컴퓨터네트워크/Computer Network] 네트워크 기술 LAN, MAN, WAN (2) (0) | 2026.05.07 |
| [컴퓨터네트워크/Computer Network] 네트워크 기술 LAN, MAN, WAN (1) (0) | 2026.05.07 |
| [컴퓨터네트워크/Computer Network] 신뢰적인 데이터 전송 원리 완벽 정리 (rdt 1.0 ~ 2.2) (0) | 2026.05.05 |
| [컴퓨터네트워크/Computer Network] 파일 분배 : client-server vs. P2P (0) | 2026.04.20 |