TCP 심화

1. L2·L4의 오류제어와 ARQ

ARQ(Automatic Repeat reQuest)는 ACK, 순서번호, 타이머, 재전송으로 데이터 유실·손상을 복구하는 오류제어 방식이다.

구분L2L4
범위인접 노드 간(Hop-by-Hop)송신 호스트~수신 호스트 간(End-to-End)
단위프레임세그먼트(TCP는 바이트 스트림 기준)
목적개별 링크 오류의 신속한 복구전체 경로의 신뢰성 보장

L2와 L4 모두 ARQ 원리는 같지만, 적용 범위와 데이터 단위가 다르다.

2. ARQ 방식의 분류

ARQ
├─ Stop-and-Wait ARQ
│  └─ 윈도우 크기 1, 한 건 전송 후 ACK 대기
└─ Sliding Window ARQ
   ├─ Go-Back-N ARQ
   └─ Selective Repeat ARQ
방식오류·유실 발생 시
Stop-and-Wait해당 데이터 1개 재전송
Go-Back-N유실 데이터부터 이후 전송분을 모두 재전송
Selective Repeat유실 데이터만 선택 재전송

3. 슬라이딩 윈도우

슬라이딩 윈도우는 ACK를 하나씩 기다리지 않고 여러 데이터를 연속 전송하기 위한 전송 범위 관리 구조다.

송신 윈도우 크기 = 5
송신 가능: 1, 2, 3, 4, 5
 
ACK 3 수신
= 1, 2 수신 완료
= 다음으로 3을 기대
 
새 송신 윈도우: 3, 4, 5, 6, 7

이미 3~5를 보냈다면 새로 전송 가능한 데이터는 6, 7이다.

4. TCP ACK의 의미

TCP는 다음 기대 번호 기반의 누적 ACK를 사용한다.

TCP ACK 7
= 1~6번 바이트까지 연속 수신 완료
= 다음으로 7번 바이트를 기대

따라서 ACK는 항상 다음 두 뜻을 함께 가진다.

ACK n
= n 이전 데이터의 수신 확인
+ n번 데이터의 다음 기대 표시

ACK n이 “n번 데이터를 받았다”는 뜻으로 쓰이는 경우는 교과서적 Selective Repeat의 개별 ACK 표기 관례에 가깝다. 기술사 답안의 다이어그램에는 ACK 의미를 범례로 명시하는 것이 좋다.

※ TCP ACK n: n-1까지 누적 수신 완료, n번 데이터 기대

5. Go-Back-N과 Selective Repeat 비교

1~5 전송 중 3이 유실되고 4, 5가 도착한 경우를 예로 들면 다음과 같다.

구분Go-Back-NSelective Repeat
수신 측의 4·5 처리폐기버퍼에 보관
송신 측 재전송3, 4, 5 모두3만
3 재수신 후다음 번호 4 기대4·5도 보관했으므로 연속 처리 가능
특징단순하지만 비효율적효율적이지만 버퍼·제어 복잡

6. TCP와 전통적 Selective Repeat의 차이

TCP는 Selective Repeat 성격에 가깝지만, 전통적 Selective Repeat ARQ와 완전히 같지는 않다.

구분전통적 Selective RepeatTCP
순서번호보통 프레임·패킷 단위바이트 단위
ACK개별 ACK 중심누적 ACK 기본
순서 밖 데이터버퍼링버퍼링
선택 수신 정보개별 ACK로 전달SACK 옵션으로 수신 구간 전달 가능
손실 복구유실 프레임 재전송Fast Retransmit, RTO, SACK 등 활용

TCP는 기본적으로 누적 ACK를 쓰지만, SACK을 사용하면 순서 밖으로 수신한 구간도 송신 측에 알려 손실 데이터만 더 정확하게 재전송할 수 있다.

7. SACK과 비트맵 ACK

둘 다 수신 측이 “이미 받은 데이터”를 송신 측에 알리는 선택 확인 방식이다.

구분SACK비트맵 ACK
표현 방식수신 완료 구간의 시작·끝각 데이터의 수신 여부를 비트로 표시
[4~6], [8~10] 수신01110111
대표 사례TCP SACKWi-Fi Block ACK 등
누적 ACK: “여기까지 연속 수신”
SACK: “추가로 이 구간도 수신”
비트맵 ACK: “이 범위의 각 데이터 수신 여부”

L2에서도 선택 확인 기능은 사용한다. 다만 TCP SACK이라는 동일한 형식을 사용하는 것이 아니라 Wi-Fi Block ACK, NACK, 비트맵 등 기술별 방식을 사용한다.

8. TCP의 오류제어·흐름제어·혼잡제어

TCP는 슬라이딩 윈도우 기반의 전송 구조 안에서 세 기능을 통합한다.

기능목적주요 수단
오류제어유실·손상 복구순서번호, 체크섬, ACK, RTO, 재전송, SACK
흐름제어수신 버퍼 초과 방지수신 윈도우 rwnd
혼잡제어네트워크 혼잡 방지혼잡 윈도우 cwnd
실제 송신 가능량
= min(rwnd, cwnd) - 현재 ACK 대기 중인 데이터량
  • rwnd(수신 윈도우): 수신 측이 자신의 버퍼 여유를 광고하는 값
  • cwnd(혼잡 윈도우): 송신 측이 네트워크 상태를 추정해 설정하는 값
rwnd: “수신자가 더 받을 수 있는 양”
cwnd: “네트워크가 감당할 수 있는 양”

9. TCP의 손실 감지와 재전송

TCP의 표준 오류 복구는 FEC가 아니라 ARQ 기반 재전송이다.

손실 감지
├─ 중복 ACK 3회 수신
│  └─ Fast Retransmit: 타임아웃 전 즉시 재전송
└─ RTO 만료
   └─ 재전송 Timeout에 따른 재전송

RTO는 Retransmission Timeout, 즉 재전송 타임아웃이다. 세그먼트 전송 후 일정 시간 내 ACK가 오지 않으면 손실로 판단하는 기준 시간이며, TCP는 RTT와 RTT 변동폭을 바탕으로 이를 동적으로 계산한다.

10. TCP 혼잡제어

기능내용
Slow Startcwnd를 RTT마다 대략 2배 증가시켜 초기 전송량 탐색
Congestion Avoidancecwnd를 RTT마다 대략 1 MSS씩 선형 증가
Fast Retransmit중복 ACK 3회 수신 시 손실 세그먼트 즉시 재전송
Fast RecoveryFast Retransmit 후 cwnd를 과도하게 줄이지 않고 회복
연결 시작
→ Slow Start
→ Congestion Avoidance
→ 손실 발생
   ├─ 중복 ACK 3회: Fast Retransmit + Fast Recovery
   └─ RTO 만료: cwnd를 크게 낮추고 Slow Start 재진입

11. 핵심 결론

TCP는 슬라이딩 윈도우 기반 ARQ를 통해 연속 전송과 신뢰성을 제공한다.
오류제어는 ACK·순서번호·재전송으로, 흐름제어는 수신 윈도우(rwnd)로, 혼잡제어는 혼잡 윈도우(cwnd)로 수행하며, 실제 송신량은 min(rwnd, cwnd)에 의해 제한된다.