# [컴퓨터 네트워크] 10장 - 전송층

성원·2026년 6월 2일

컴퓨터네트워크

목록 보기
8/9

10.1 전송층 서비스 개요

전송층(Transport Layer)은 네트워크층이 제공하는 호스트 간(Host-to-host) 통신 서비스를 확장하여, 최종 종단 시스템 내에서 실행 중인 프로세스 간(Process-to-process) 통신을 책임지는 계층이다.

[ Application Layer: Processes ]  <--- 포트 / 소켓 인터페이스
│
( Transport Layer )         <--- 프로세스 간 신뢰성/비신뢰성 제어 (L4)
│
[ Network Layer: Hosts ]       <--- 호스트 간 패킷 라우팅 (L3)

10.1.1 다중화 및 역다중화 (Multiplexing / Demultiplexing)

  • 다중화 (Multiplexing): 송신 호스트의 여러 응용 프로세스로부터 나오는 데이터 조각들을 수집하여, 각각 전송층 헤더(포트 번호 등)를 부착하고 하위 계층인 네트워크층으로 단일 스트림 형태로 밀어내는 과정이다.
  • 역다중화 (Demultiplexing): 수신 호스트의 전송층이 네트워크층으로부터 세그먼트를 받아 헤더의 목적지 포트 번호를 파싱한 뒤, 상위 계층의 정확한 소켓(Socket) 인터페이스를 거쳐 해당 프로세스에게 전달하는 과정이다.

10.1.2 포트(Port)와 소켓(Socket) 주소 체계

  • 포트 번호 (16비트): 응용 프로세스를 식별하는 논리적 주소로, 065,5350 \sim 65,535 범위를 가진다.
    • Well-known Ports (01,0230 \sim 1,023): IANA에서 지정한 범용 공공 서비스 포트 (예: HTTP=80, HTTPS=443, FTP=21, SSH=22, DNS=53)
    • Registered Ports (1,02449,1511,024 \sim 49,151): 특정 벤더나 응용 프로그램이 등록하여 사용하는 포트
    • Dynamic/Private Ports (49,15265,53549,152 \sim 65,535): 클라이언트가 서버에 접속할 때 임시로 할당받는 동적 에페메럴(Ephemeral) 포트
  • 소켓 주소 (Socket Address): [IP 주소 + 포트 번호]의 조합으로 정의되며, 인터넷 상에서 통신하는 프로세스의 유일한 종단점(Endpoint)을 명시한다.
    • UDP 소켓 식별 기준: 2-Tuple [목적지 IP, 목적지 포트]를 기준으로 역다중화 수행. 출발지가 달라도 목적지 포트가 같으면 동일한 UDP 소켓 버퍼로 유입된다.
    • TCP 소켓 식별 기준: 4-Tuple [출발지 IP, 출발지 포트, 목적지 IP, 목적지 포트]의 조합이 완전히 일치해야 단 하나의 고유 소켓으로 맵핑된다.

10.2 UDP (User Datagram Protocol)

UDP는 RFC 768에 정의된 비연결형(Connectionless), 비신뢰성(Unreliable) 전송 프로토콜이다. 흐름 제어, 혼잡 제어, 순서 보장 기능이 없으며 최소한의 기능인 다중화와 체크섬 오류 검출만 수행하는 오버헤드 최소화 구조를 가진다.

10.2.1 UDP 헤더 구조 (8바이트 고정 헤더)

  • Source Port (16비트): 송신 프로세스의 포트 번호. 응답이 필요 없는 경우 전부 0으로 채울 수 있다.
  • Destination Port (16비트): 수신 프로세스의 목적지 포트 번호.
  • Length (16비트): UDP 헤더와 페이로드(데이터)를 합산한 UDP 세그먼트 전체의 길이를 바이트 단위로 표시한다. 최소값은 헤더만 존재할 때의 8이다.
  • Checksum (16비트): 전송 중 세그먼트의 비트 오염 여부를 검출하는 필드이다.
    • 의무 사항 아님: IPv4 환경에서 UDP 체크섬은 선택 사항(Optional)이므로 사용하지 않을 경우 전부 0으로 채운다. (단, IPv6에서는 상위 계층 체크섬 검출이 필수이므로 의무 사항으로 변경됨)
    • 의사 헤더 (Pseudo Header): 체크섬을 계산할 때 세그먼트 오류뿐만 아니라 패킷이 잘못된 호스트로 전달되는 오라우팅을 방지하기 위해 네트워크층 IP 헤더의 일부 정보(송신 IP, 수신 IP, 프로토콜 번호=17, UDP 길이)를 임시로 가져와 의사 헤더를 구성한 뒤 데이터 영역과 합산하여 1의 보수 연산을 수행한다.

10.3 TCP (Transmission Control Protocol)

TCP는 RFC 793에 정의된 연결지향형(Connection-oriented), 신뢰성(Reliable) 전송 프로토콜이다. 가상 회선 스타일의 전이중(Full-Duplex) 바이트 스트림 서비스를 제공하며, 데이터 유실이나 순서 역전 현상을 하위 계층의 불완전성에도 불구하고 완벽히 복구 및 제어한다.

10.3.1 TCP 헤더 구조 (20~60 바이트 가변 헤더)

  • Source / Destination Port (각 16비트): 송수신 프로세스 식별 포트.
  • Sequence Number (32비트): 송신자가 전송하는 바이트 스트림 중 해당 세그먼트에 실려가는 데이터의 첫 번째 바이트에 부여된 고유 번호이다. 초기 연결 시 난수로 초기 순서 번호(ISN: Initial Sequence Number)를 설정하여 보안성을 확보한다.
  • Acknowledgment Number (ACK, 32비트): 수신측이 송신측으로 보내는 응답 번호이다. TCP는 누적 ACK(Cumulative ACK) 방식을 사용하므로, 수신자가 다음에 받기를 기대하는 "직전 수신 완료 바이트 번호 + 1"을 기록하여 전송한다. (예: 100번 바이트까지 성공적으로 받았다면 ACK 번호는 101이 된다.)
  • HLEN (Header Length, 4비트): TCP 헤더의 총 길이를 4바이트 워드 단위로 표시한다. 옵션이 없으면 5 (20바이트), 최대로 포함되면 15 (60바이트)이다.
  • 제어 플래그 (Flags, 6비트 / 최근 혼잡제어 플래그 확장 시 9비트):
    • SYN: 연결 수립 및 순서 번호 동기화를 요청하는 플래그
    • ACK: 수신 완료 확인 응답 필드가 유효함을 지시하는 플래그 (첫 SYN 패킷을 제외한 모든 패킷에 기본 활성화)
    • FIN: 송신 데이터가 종료되었으며 연결을 해제하고자 함을 알리는 플래그
    • RST: 연결 관계의 비정상적 가동 중단이나 재설정을 강제 트리거하는 플래그
  • Window Size (16비트): 수신자가 현재 자신의 수신 버퍼 여유 공간 크기를 송신자에게 알려주는 필드로, 흐름 제어(Flow Control)의 핵심 지표가 된다. 바이트 단위를 사용한다.

10.3.2 연결 수립 및 해제 메커니즘

1) 3-Way Handshake (연결 설정)

송신자와 수신자가 논리적인 연결을 맺고 호스트 가동 버퍼 공간 및 ISN을 동기화하는 과정이다.

Client (Active Open)                           Server (Passive Open)
│                                                  │
│ --------- [ SYN, Seq=x ] ----------------------> │ (SYN_RCVD)
│                                                  │
│ <-------- [ SYN+ACK, Seq=y, Ack=x+1 ] ---------- 
                                                  
 --------- [ ACK, Seq=x+1, Ack=y+1 ] -----------> │ (ESTABLISHED)

2) 4-Way Handshake (연결 해제)

전이중 통신 관계를 안전하게 닫기 위해 상호 간에 FIN과 ACK를 개별적으로 교환하는 구조이다.

Client (Active Close)                          Server (Passive Close)
│                                                  │
│ --------- [ FIN, Seq=u ] ----------------------> │ (CLOSE_WAIT)
│ <-------- [ ACK, Ack=u+1 ] --------------------- 
                                                   (상위 응용 데이터 전송 마무리 후)
 <-------- [ FIN, Seq=v ] -----------------------  (LAST_ACK)
 --------- [ ACK, Ack=v+1 ] --------------------> │
(TIME_WAIT)                                        │ (CLOSED)
  • TIME_WAIT 상태의 필요성: Active Close를 수행한 주체는 마지막 ACK를 전송한 후 즉시 CLOSED 상태로 가지 않고, 2 * MSL (Maximum Segment Lifetime) 시간 동안 수신 대기 상태를 유지한다.
    1. 수신 측이 마지막 ACK를 받지 못해 FIN을 재전송할 경우 정상적으로 재응답을 처리하기 위함이다.
    2. 이전 연결 세션에서 네트워크에 지연되어 잔존하던 패킷이 연결 종료 후 새로 열린 동일 포트의 신규 세션에 유입되어 데이터 오염을 일으키는 것을 방지하기 위해 완전히 소멸할 시간을 벌어주는 목적이다.

10.4 슬라이딩 윈도우와 흐름 제어 (Flow Control)

송신자는 수신자의 수신 버퍼 오버플로우를 막기 위해 데이터 전송량을 제어해야 한다. 이를 흐름 제어(Flow Control)라 하며 TCP는 슬라이딩 윈도우(Sliding Window) 알고리즘을 사용한다.

  • 동작 원리: 송신자는 수신자가 광고한 Window Size를 상한선으로 설정하여, ACK 응답을 받지 않고도 한 번에 연속으로 전송할 수 있는 데이터 바이트 한계 범위를 지정한다. 수신측으로부터 새로운 누적 ACK를 수신하면 윈도우의 시작점이 오른쪽으로 슬라이딩하며 전송 가능 범위를 갱신한다.
  • 전송 수식: 송신자가 보낼 수 있는 남은 가용 윈도우 크기는 다음과 같이 계산된다.
    EffectiveWindow=WindowSize(LastByteSentLastByteAcked)\text{EffectiveWindow} = \text{WindowSize} - (\text{LastByteSent} - \text{LastByteAcked})

10.5 TCP 혼잡 제어 (Congestion Control)

흐름 제어가 종단 간 수신자의 처리 능력을 맞추는 기법이라면, 혼잡 제어(Congestion Control)는 네트워크 내부 링크의 트래픽 포화 및 라우터 버퍼 고갈(혼잡 현상)을 감지하고 전체 전송률을 조절하여 네트워크 붕괴를 막는 메커니즘이다. 송신자는 최종적으로 흐름제어 윈도우(rwndrwnd)와 혼잡제어 윈도우(cwndcwnd) 중 작은 값을 기준으로 전송량을 확정한다.

MaxWindow=min(rwnd,cwnd)\text{MaxWindow} = \min(rwnd, cwnd)

10.5.1 제어 페이즈 (Tahoe 및 Reno 표준 규격)

1) 느린 시작 (Slow Start)

  • 동작 매커니즘: 연결 초기 또는 타임아웃 이후 혼잡 상태를 탈출했을 때 적용된다. cwndcwnd 크기를 1 MSS에서 시작하여, 매 라운드(RTT)마다 수신되는 정상 ACK의 개수만큼 전송량을 누적 증폭시킨다. 즉, RTT마다 윈도우 크기가 2배씩 지수 함수 형태(Exponential)로 급격히 증가한다.
  • 임계치 조건: cwndcwnd가 혼잡 임계치인 임계값(ssthresh: Slow Start Threshold)에 도달하면 선형 증가 페이즈인 혼잡 회피 단계로 전환된다.

2) 혼잡 회피 (Congestion Avoidance)

  • 동작 매커니즘: 혼잡 임계치(ssthreshssthresh) 이상으로 전송량이 커지면 급격한 오버플로우를 막기 위해 매 RTT마다 cwndcwnd 크기를 선형적으로 단 1 MSS씩만 가산 증가 시킨다. 이를 AIMD (Additive Increase, Multiplicative Decrease) 방식의 가산 증가 구간이라 한다.

3) 빠른 재전송 및 빠른 회복 (Fast Retransmit & Fast Recovery)

  • 3개의 중복 ACK (3 Duplicate ACKs): 송신자가 타임아웃 타이머가 만료되기 전이라도, 수신측으로부터 완전히 동일한 번호의 중복 ACK 메시지를 연속으로 3번 수신(총 4번의 동일 ACK)하면 해당 번호의 세그먼트가 중간에 유실되었음을 인지하고 즉시 재전송을 수행하는 기법이다.
  • 버전별 제어 분기 동작:
    • TCP Tahoe: 패킷 유실(타임아웃 및 중복 ACK 모두 포함) 감지 시 ssthreshssthresh 값을 현재 cwndcwnd 크기의 절반(cwnd2\frac{cwnd}{2})으로 깎고, cwndcwnd를 다시 1 MSS로 완전 초기화한 후 Slow Start를 강제 재시작한다.
    • TCP Reno (현대 표준 인프라 방식): 3개의 중복 ACK를 만나면 타임아웃보다 경미한 혼잡으로 판단하여 빠른 회복(Fast Recovery) 단계를 밟는다. ssthreshssthreshcwndcwnd를 동시에 현재 윈도우의 절반 크기로 동일하게 절감시키고(cwnd=cwnd2cwnd = \frac{cwnd}{2}), 1부터 시작하지 않고 절반 크기 지점부터 곧바로 혼잡 회피(선형 증가) 페이즈로 돌입한다. (타임아웃 발생 시에는 Reno도 완전히 1로 초기화함)

10.6 차세대 전송 계층 프로토콜

10.6.1 QUIC (Quick UDP Internet Connections)

구글이 개발하고 RFC 9000으로 표준화된, UDP 인터페이스를 기반으로 하는 최신 차세대 전송 계층 프로토콜이다. (HTTP/3의 근간 인프라 기술)

  • 도입 배경: 현대 웹 환경에서 TCP의 구조적 노후화로 인한 지연과 미들박스(방화벽 등) 간섭에 따른 경직화(Ossification) 문제를 해결하기 위해 도입되었다.
  • 핵심 기술 스펙:
    1. 연결 수립 지연 단축 (0-RTT / 1-RTT): TCP의 3-Way Handshake와 TLS 암호화 핸드셰이크 과정을 단 하나의 결합된 레이어로 통합 처리하여 연결 설정 지연을 획기적으로 낮춘다. 이전 접속 이력이 있는 경우 0-RTT 전송도 가능하다.
    2. HOL (Head-of-Line) 차단 근본 해소: TCP는 단 하나의 패킷만 유실되어도 스트림 전체 버퍼가 정지되지만, QUIC는 단일 UDP 소켓 연결 내부에 독립적인 가상 다중 스트림(Multi-streaming)들을 운영하므로, 특정 스트림 조각이 유실되어도 나머지 스트림의 데이터 전송은 차단 없이 정상 처리된다.
    3. 연결 이동성 (Connection Migration): IP 주소를 기준으로 세션을 식별하지 않고 고유한 Connection ID를 헤더에 박아 전송하기 때문에 사용자가 와이파이(Wi-Fi)망에서 셀룰러(LTE/5G)망으로 물리적 네트워크 IP가 바뀌어도 끊김 없이 기존 전송 세션을 투명하게 유지할 수 있다.

6.2.2 SCTP (Stream Control Transmission Protocol)

RFC 4960에 정의된 프로토콜로, TCP의 신뢰성 높은 연결 제어 특성과 UDP의 독립적 메시지 경계 지향 장점을 결합한 전송층 프로토콜이다.

  • 핵심 기능:
    • 멀티스트리밍 (Multi-streaming): 단일 결합 연결(Association) 내부에 독립 순서가 보장되는 다중 스트림을 형성하여 HOL 차단 현상을 방지한다.
    • 멀티호밍 (Multi-homing): 하나의 종단 호스트가 여러 개의 IP 주소 인터페이스를 동시에 가질 수 있도록 지원하여, 메인 물리 경로에 네트워크 장애가 발생하더라도 백업 IP 경로로 데이터 흐름을 자동 우회시켜 높은 고가용성(High Availability) 신뢰성을 보장한다. 통신사 시그널링망 및 서비스 인프라 제어 평면에서 주로 활성 운영된다.

스스로 확인해보기

[ 전송층 일반론 및 UDP ]

Q1. TCP 소켓을 고유하게 식별하기 위해 커널 헤더 파싱 시 반드시 참조해야 하는 4-Tuple의 구성 요소를 기술하시오.

  • 모범 답안: 출발지 IP 주소, 출발지 포트 번호, 목적지 IP 주소, 목적지 포트 번호의 4가지 조합이다.

Q2. UDP 헤더 체크섬(Checksum) 연산 시, 하위 네트워크층인 IP 헤더 영역의 주소 정보를 임시로 수집하여 결합 연산하는 의사 헤더(Pseudo Header)의 도입 목적을 서술하시오.

  • 모범 답안: 전송 중 세그먼트 자체의 비트 변형 검출뿐만 아니라, IP 패킷 전달 과정의 결함으로 인해 잘못된 수신 호스트로 데이터그램이 잘못 도달하는 오라우팅(Misrouting) 오류 상황까지 네트워크층 경계를 넘어 상호 검증하여 완벽히 차단하기 위함이다.

[ TCP 메커니즘 ]

Q3. TCP 연결 해제 절차(4-Way Handshake) 중 Active Close를 수행한 호스트가 마지막 ACK를 송신한 직후 즉시 CLOSED 상태로 가지 않고 'TIME_WAIT' 상태를 일정 시간 동안 의무적으로 유지하는 전공적 이유 2가지를 기술하시오.

  • 모범 답안: 1. 수신 측이 보낸 마지막 FIN 프레임에 대한 최종 ACK 응답 패킷이 중간에 유실되었을 경우, 상대방이 재전송한 FIN 패킷을 정상 수용하여 재응답을 처리하기 위함이다.
    1. 이전 세션 경로 상에 지연되어 잔존해 있던 낙오 패킷들이 완전히 소멸(MSL 시간 경과)하기 전에 동일한 포트로 신규 연결 세션이 수립되어 데이터가 왜곡 오염되는 것을 방지하기 위함이다.

Q4. TCP 흐름 제어(Flow Control)에서 송신자가 현재 수신자의 수신 버퍼 여유 상태에 맞춰 보낼 수 있는 잔여 가용 윈도우 크기를 계산하는 수학적 상태 방정식을 관련 바이트 지표 변수명들을 포함하여 제시하시오.

  • 모범 답안: EffectiveWindow=WindowSize(LastByteSentLastByteAcked)\text{EffectiveWindow} = \text{WindowSize} - (\text{LastByteSent} - \text{LastByteAcked})

Q5. TCP Reno 혼잡제어 버전 환경에서 송신자가 3개의 중복 ACK를 연속 수신했을 때 실행하는 빠른 회복(Fast Recovery) 단계의 cwndcwndssthreshssthresh 임계치 제어 변화 수식을 기술하시오.

  • 모범 답안: 현재 혼잡 감지 시점의 cwndcwnd 크기를 기준으로, ssthresh=cwnd2ssthresh = \frac{cwnd}{2}, cwnd=cwnd2cwnd = \frac{cwnd}{2} 로 동시에 절반으로 감소시킨 후 1부터 시작하지 않고 절반 크기 상태 지점에서 곧바로 혼잡 회피(선형 증가) 페이즈를 시작한다.

[ 차세대 프로토콜 ]

Q6. QUIC 프로토콜이 TCP의 고질적 한계인 HOL(Head-of-Line) 차단 현상을 구조적으로 해결하기 위해 단일 UDP 바인딩 연결 내부에 도입한 가상 채널 구조의 명칭과 동작 방식을 서술하시오.

  • 모범 답안: 독립적인 다중 스트림(Multi-streaming) 구조를 사용한다. 하나의 UDP 연결 내부에 가상 채널들을 독립 병렬 운영하므로, 특정 스트림의 패킷 유실로 인해 버퍼가 정지되더라도 나머지 다른 스트림의 데이터 포워딩과 상위 응용 계층으로의 수신 전달은 차단 없이 정상 진행된다.

핵심 요약

  • 다중화 / 역다중화: L4 헤더 포트 주소를 기반으로 단일 프로세스 버퍼 채널을 통합 전송하고 분리 분배하는 커널 핵심 연산.
  • UDP 스펙: 8바이트 고정 헤더, 체크섬 선택적 적용(의사 헤더 결합), 흐름 및 혼잡 제어가 없는 경량 전송 최적화 구조.
  • 3-Way / 4-Way 핸드셰이크: SYN/ACK 플래그 기반 제어 동기화. TIME_WAIT 상태 보장을 통한 가상 세션의 신뢰성 최종 검증.
  • 흐름 제어: Receiver Window(rwndrwnd) 광고 크기 한도 내에서 슬라이딩 윈도우 이동을 통해 종단 간 데이터 속도 조절.
  • 혼잡 제어: AIMD 구조를 채택. Slow Start(지수 증가) \rightarrow ssthresh 도달 \rightarrow 혼잡 회피(선형 증가) 단계를 거침. Reno 표준은 3개 중복 ACK 발생 시 윈도우를 1로 꺾지 않고 절반으로 감산하는 빠른 회복(Fast Recovery) 실행.
  • 차세대 프로토콜: QUIC는 UDP 기반의 0-RTT 연결과 ID 식별 기반 Connection Migration을 통해 인프라 이동성 확보. SCTP는 멀티호밍과 멀티스트리밍 기술을 구현하여 고가용성 네트워크 백본 제어 평면 장악.

참고문헌

  • Forouzan, B. A. (2013). Data Communications and Networking (6th ed.). McGraw-Hill.
  • 번역: 이재광, 김중규, 이경현, 홍충선. 데이터 통신과 네트워킹 TCP/IP 프로토콜 기반 (개정 6 수정판). 퍼스트북.
profile
버그와 싸우며 성장 중인 IT 공대생

0개의 댓글