전송 계층

@Wonyu· February 13, 2025 · 17 min read

📌 전송 계층의 기능

주요 기능

전송 계층은 프로세스 간(end-to-end) 통신을 지원하며, 주요 기능은 다음과 같다.

기능 설명
세그먼트화(Segmentation) 및 재조립(Reassembly) 데이터를 작은 단위(세그먼트)로 나누고, 수신 측에서 원래 데이터로 복원
오류 제어(Error Control) 데이터 손상 및 손실을 감지하고 필요 시 재전송 수행 (TCP)
흐름 제어(Flow Control) 송신 속도를 조절하여 수신 측 과부하 방지 (TCP 슬라이딩 윈도우)
서비스 프리미티브 전송 계층 사용자가 전송 계층 서비스를 사용하기 위한 인터페이스

전송 계층은 신뢰성이 필요한 경우 TCP, 빠른 전송이 필요한 경우 UDP를 사용한다.

설계 시 고려 사항

전송 계층 설계 시 다음 요소를 고려해야 한다.

(1) 주소 표현

  • TSAP(Transport Service Access Point)는 전송 계층에서 프로세스를 식별하는 주소이다.
  • TSAP는 일반적으로 호스트의 IP 주소와 포트 번호의 조합으로 표현되며, 특정 애플리케이션으로 데이터를 전달하는 역할을 한다.
    ex) 웹 서버의 IP가 203.0.113.10이고, 포트가 443(HTTPS)이라면, 이 조합이 TSAP를 구성

(2) 멀티플렉싱

  • 여러 개의 애플리케이션 프로세스가 하나의 네트워크 연결을 공유하도록 하는 기술이다.
  • 상방향 멀티플렉싱

    • 여러 클라이언트(송신 호스트)가 하나의 서버(수신 호스트)에게 데이터 전송
  • 하방향 멀티플렉싱

    • 하나의 서버(송신 호스트)가 여러 클라이언트(수신 호스트)에게 데이터 전송
      ex) 서버가 여러 클라이언트에 비디오 스트리밍 전송

(3) 연결 설정

  • 연결 설정
    1️⃣ 클라이언트 → 서버 : SYN(x) 전송 (연결 요청)
    2️⃣ 서버 → 클라이언트 : SYN(y) + ACK(x+1) 응답 (연결 수락 및 확인)
    3️⃣ 클라이언트 → 서버 : ACK(y+1) 전송 (연결 완료)

    • 이 과정에서 오류가 발생하면 재전송이 수행되며, 네트워크 상태에 따라 여러 번 반복될 수 있다.
  • 연결 해제

    • 일방적 연결 해제

      • 한쪽 프로세스에서 연결을 해제
    • 점진적 연결 해제

      • 양쪽 프로세스 모두에서 연결을 해제

인터넷에서 네트워크 계층의 기능을 제공하는 프로토콜은 IP이다.
IP 프로토콜 위에서 실행되는 전송 계층 프로토콜은 서비스의 유형에 따라 TCP와 UDP로 구분된다.
TCP는 연결형 서비스를 지원하는 프로토콜이고, UDP는 비연결형 서비스를 지원하는 프로토콜이다.
TCP와 UDP를 선택할 때는 단순히 신뢰성이나 연결 유무의 차이 뿐만 아니라 응용 프로그램의 구축에 어떤 영향을 끼치는지 이해해야 한다.

📌 TCP의 헤더 구조

🔹 TCP 주요 기능

  • 연결형 서비스 제공
  • 전이중 방식의 양방향 가상 회선 제공
  • 신뢰성 있는 데이터 전송을 보장

TCP 헤더 구조

TCP는 신뢰성을 보장하기 위해 20~60바이트의 헤더를 포함하며, 주요 필드는 다음과 같다.

| Source Port | Destination Port |
| Sequence Number |
| Acknowledgment Number |
| Data Offset | Reserved | Flags | Window Size |
| Checksum | Urgent Pointer |
| Options (Optional) | Data |

🔹 TCP 헤더 필드 설명

필드 크기 설명
Source/Destination Port 16비트 송신자/수신자의 포트 번호
Sequence Number 32비트 데이터 순서 보장을 위한 순서 번호
Acknowledgment Number 32비트 수신 확인(ACK)
Flags 9비트 SYN, ACK, FIN 등 제어 플래그
Window Size 16비트 흐름 제어를 위한 윈도우 크기
Checksum 16비트 오류 검출

📌 포트 번호

포트 번호는 프로세스를 구분하는 주소 역할을 수행한다.

🔹 Well-known 포트 예시

프로토콜 포트 번호 설명
HTTP 80 웹 페이지 전송
HTTPS 443 보안 웹 페이지 전송
FTP 21 파일 전송
SSH 22 원격 로그인
DNS 53 도메인 이름 변환

🔹 포트 번호 범위

  • 0~1023: Well-known 포트 (HTTP, FTP 등)
  • 1024~49151: Registered 포트 (앱 개발자가 등록 가능)
  • 49152~65535: Dynamic 포트 (임시 포트)

📌 TCP의 동작 원리

연결 설정 (3-Way Handshake)

3 way handshake 1️⃣ 클라이언트 → 서버 : SYN 전송

  • TCP 헤더의 SYN 플래그를 지정
  • 임의의 순서 번호(10) 설정

2️⃣ 서버 → 클라이언트 : SYN-ACK 응답

  • 다음 수신에 대한 데이터의 순서 번호(10 + 1)를 Acknowledgment Number에 표시
  • 임의의 순서 번호 설정(50)
  • 이때 전송 데이터와 응답 데이터를 함께 전송하는 피기배킹 기능 사용

3️⃣ 클라이언트 → 서버 : ACK 전송 (연결 완료)

Fast Open

  • TCP 연결이 완전히 열리기 전 데이터를 전송할 수 있게 해주는 기능

🔹 동작 방식

  1. 서버는 클라이언트에게 TFO 쿠키 발급
  2. 클라이언트는 쿠기 저장
  3. 다음 서버 연결 시 SYN 패킷에 TFO 쿠키와 데이터를 함께 실어 전송
  4. 서버는 쿠키를 확인하고, handshake 도중에 데이터를 수신/처리 가능

흐름 요약

[최초 연결]
클라이언트 → 서버: SYN
서버 → 클라이언트: SYN-ACK + TFO 쿠키 발급

[이후 연결]
클라이언트 → 서버: SYN + DATA + TFO 쿠키
서버 → 클라이언트: SYN-ACK
(서버는 쿠키 확인 후 DATA 즉시 수신/처리 시작)

데이터 전송

data TCP는 시퀀스 번호와 ACK를 통해 패킷 순서를 유지한다.

  • 세 번째 세그먼트부터 데이터 전송이 이뤄진다.
  • A 프로세스는 순서 번호 11번부터 5바이트의 데이터를 전송하고, B 프로세스는 순서 번호 51부터 10바이트의 데이터를 전송한다.

TCP는 NAK를 사용하지 않는다.

  • 다음에 수신할 데이터 번호를 Acknowledgment Number로 하여 ACK을 보낸다.
  • ACK을 받지 못한 송신자는 해당 데이터의 세그먼트를 재전송한다.

연결 해제 (4-Way Handshake)

4 way handshake 1️⃣ 클라이언트 → 서버 : FIN 전송
2️⃣ 서버 → 클라이언트 : ACK, 데이터 전송
3️⃣ 클라이언트 → 서버 : ACK 전송
4️⃣ 서버 → 클라이언트 : FIN 전송
5️⃣ 클라이언트 → 서버 : ACK 전송(연결 종료)

연결 해제는 양쪽 프로세스의 동의하에 진행된다.

TIME_WAIT

✅ TCP 연결을 종료할 때, 연결이 잠시 기다리는 상태

🔹 종료 과정

  • 클라이언트 → 서버 : FIN
  • 서버 → 클라이언트 : ACK
  • 서버 → 클라이언트 : FIN
  • 클라이언트 → 서버 : ACK → 여기서 클라이언트는 TIME_WAIT 상태 진입해 일정 시간 기다렸다가 연결 종료

🔹 목적

  • 지연된 패킷이 네트워크 상에 떠돌 경우 대비 -> 다른 연결로 진행될 경우 지연 패킷이 뒤늦게 도달해 문제 발생

🔹 TIME_WAIT 짧을 경우 문제

  • 이전 연결이 완전히 종료되지 않은 상태에서 새 연결 요청이 갈 수 있다. -> RST 오류

이러한 경우, 연결 재사용 방식을 개선하거나 커널 설정 조절이 필요하다.

Keep-Alive

✅ TCP 연결이 끊겼는지 확인하기 위해, 유휴 상태에서도 주기적으로 "확인 메시지"를 보내는 메커니즘
✅ 애플리케이션 레벨이 아니라, 운영체제(OS)와 소켓 레벨에서 동작

🔹 필요성
다음과 같은 상황에선 연결을 끊어버린다.

  • 네트워크 연결 끊김
  • 상대방 프로세스가 죽음

연결을 끊지 않으면, 응답이 없는 채로 무한정 대기가 발생

🔹 동작 방식

  1. 소켓이 유휴 상태로 일정 시간 동안 아무 데이터도 주고받지 않으면
  2. OS가 Keep-Alive probe라는 패킷을 상대방에게 보냄
  3. 상대방이 응답하면 → 연결 유지
  4. 응답이 없으면 → 일정 횟수 후 연결 종료

🔹 HTTP와 비교
✅ HTTP의 Keep-Alive는 연결을 재사용하기 위함
✅ TCP의 Keep-Alive는 OS 수준에서, 연결이 끊어졌는지 확인하기 위함

항목 HTTP Keep-Alive TCP Keep-Alive
레벨 애플리케이션 계층 전송 계층 (OS/커널)
목적 연결 재사용 (성능 향상) 연결 생존 여부 확인 (오류 감지)
유지 시간 짧음 (몇 초~분) 김 (기본 2시간)
설정 위치 HTTP 헤더 / 웹 서버 커널 / 소켓 옵션
대상 브라우저 ↔ 서버 등 모든 TCP 연결 (DB, HTTP 등 포함)

📌 UDP 프로토콜

UDP 헤더 구조

🔹 UDP 주요 기능

  • 비연결형 서비스를 제공
  • 헤더와 전송 데이터에 대한 체크섬 기능 제공
  • Best Effort 전달 방식 지원

    • 전송한 데이터그램이 목적지까지 제대로 도착했는지 확인하지 않는다.
    • 데이터 전송 시간에 민감한 응용 환경에서 유리하다.
| Source Port | Destination Port | 
| Length | Checksum | 
| Data |
필드 크기 설명
Source/Destination Port 16비트 송신자/수신자의 포트 번호
Length 16비트 UDP 데이터그램의 전체 길이
Checksum 16비트 오류 검출

UDP의 데이터그램 전송

흐름 제어 및 오류 검출 없이 패킷을 빠르게 전송한다.
✅ 흐름 제어 및 오류 검출 기능이 없으므로, 응용 프로그램에서 다음과 같은 기능을 직접 구현해야 한다.

  • 데이터그램 분실 감지: 수신 측에서 응답을 보내거나, 별도의 확인 메시지를 통해 패킷 손실 여부를 확인
  • 데이터그램 순서 관리: 각 패킷에 순서 번호를 추가하여, 수신 측에서 올바른 순서로 데이터를 정렬
단계 설명
1️⃣ 송신자가 데이터그램을 전송
2️⃣ 수신자가 데이터그램을 수신
3️⃣ 패킷 손실 발생 시 재전송 없음

📌 RTP 프로토콜

실시간 요구 사항

RTP(Real-time Transport Protocol)는 오디오/비디오 전송을 위한 프로토콜
기존 UDP에 데이터그램의 순서 번호 기능을 추가
실시간 데이터 전송에서 가장 중요한 것은 전송 시간

🔹 버퍼
RTP에서 버퍼는 패킷 간격을 일정하게 유지하여 안정적인 스트리밍을 가능하게 한다.

  • 패킷이 네트워크에서 불규칙한 간격으로 도착할 경우, 일정한 간격으로 데이터를 재생하기 위해 버퍼를 사용
  • 버퍼 크기가 클수록 안정성이 증가하지만, 초기 지연(latency)이 증가할 수 있음
  • 실시간성이 중요한 경우, 버퍼 크기를 최소화해야 한다.

🔹 지터(Jitter)
Jitter(지터)는 패킷 도착 시간의 변동을 의미하며, 네트워크 혼잡이나 경로 변경으로 인해 발생한다.

  • 지터가 심하면 오디오/비디오 끊김 현상이 발생할 수 있다.
  • RTP는 지터 버퍼(jitter buffer)를 사용하여 안정적인 재생을 지원한다.

RTP의 데이터 전송

UDP 기반으로 동작하여 빠른 전송 속도를 보장
✅ 데이터그램 분실이나 도착 순서 변경과 같은 전송 오류를 해결

믹서

  • 여러 RTC 데이터 그램을 하나로 결합
  • 다중 사용자 오디오/비디오 스트림 결합
  • 장점

    • 대역폭 절약, 다중 사용자 처리 가능
  • 단점

    • 믹싱으로 인해 지연 증가

트랜슬레이터

  • RTP 데이터그램을 하나 이상의 출력용 RTP 데이터그램으로 만들어주는 장치

RTP 헤더 구조

| Version | Padding | Extension | CC | Marker | Payload Type | 
| Sequence Number | Timestamp | 
| SSRC | CSRC (Optional) |
필드 설명
Version RTP의 버전 번호이며, 현재 2로 지정된다.
Sequence Number 패킷의 순서를 유지하고, 손실된 패킷을 감지
Timestamp RTP 페이로드에 포함된 데이터의 생성 시기를 나타낸다.

RTP 제어 프로토콜 (RTCP)

RTCP는 RTP 스트림을 모니터링하고, 품질을 보장하기 위해 사용된다.
주요 기능

  • QoS와 혼잡 제어: 송수신 프로세스가 관련 보고서를 작성한다.

    • 송신 프로세스: 전송률 등의 정보
    • 수신 프로세스: 수신 과정에서 발생하는 패킷 분실이나 지터 등의 정보
  • 세션 크기: 세션 참가자들 사이에 RTCP 패킷이 주기적으로 전송된다.
@Wonyu
Hello :) I'm Wonyu