TCP 심화
1. L2·L4의 오류제어와 ARQ
ARQ(Automatic Repeat reQuest)는 ACK, 순서번호, 타이머, 재전송으로 데이터 유실·손상을 복구하는 오류제어 방식이다.
| 구분 | L2 | L4 |
|---|---|---|
| 범위 | 인접 노드 간(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-N | Selective Repeat |
|---|---|---|
| 수신 측의 4·5 처리 | 폐기 | 버퍼에 보관 |
| 송신 측 재전송 | 3, 4, 5 모두 | 3만 |
| 3 재수신 후 | 다음 번호 4 기대 | 4·5도 보관했으므로 연속 처리 가능 |
| 특징 | 단순하지만 비효율적 | 효율적이지만 버퍼·제어 복잡 |
6. TCP와 전통적 Selective Repeat의 차이
TCP는 Selective Repeat 성격에 가깝지만, 전통적 Selective Repeat ARQ와 완전히 같지는 않다.
| 구분 | 전통적 Selective Repeat | TCP |
|---|---|---|
| 순서번호 | 보통 프레임·패킷 단위 | 바이트 단위 |
| ACK | 개별 ACK 중심 | 누적 ACK 기본 |
| 순서 밖 데이터 | 버퍼링 | 버퍼링 |
| 선택 수신 정보 | 개별 ACK로 전달 | SACK 옵션으로 수신 구간 전달 가능 |
| 손실 복구 | 유실 프레임 재전송 | Fast Retransmit, RTO, SACK 등 활용 |
TCP는 기본적으로 누적 ACK를 쓰지만, SACK을 사용하면 순서 밖으로 수신한 구간도 송신 측에 알려 손실 데이터만 더 정확하게 재전송할 수 있다.
7. SACK과 비트맵 ACK
둘 다 수신 측이 “이미 받은 데이터”를 송신 측에 알리는 선택 확인 방식이다.
| 구분 | SACK | 비트맵 ACK |
|---|---|---|
| 표현 방식 | 수신 완료 구간의 시작·끝 | 각 데이터의 수신 여부를 비트로 표시 |
| 예 | [4~6], [8~10] 수신 | 01110111 |
| 대표 사례 | TCP SACK | Wi-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 Start | cwnd를 RTT마다 대략 2배 증가시켜 초기 전송량 탐색 |
| Congestion Avoidance | cwnd를 RTT마다 대략 1 MSS씩 선형 증가 |
| Fast Retransmit | 중복 ACK 3회 수신 시 손실 세그먼트 즉시 재전송 |
| Fast Recovery | Fast 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)에 의해 제한된다.