📌 전송 계층의 기능
주요 기능
전송 계층은 프로세스 간(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)
- TCP 헤더의 SYN 플래그를 지정
- 임의의 순서 번호(10) 설정
2️⃣ 서버 → 클라이언트 : SYN-ACK 응답
- 다음 수신에 대한 데이터의 순서 번호(10 + 1)를 Acknowledgment Number에 표시
- 임의의 순서 번호 설정(50)
- 이때 전송 데이터와 응답 데이터를 함께 전송하는 피기배킹 기능 사용
3️⃣ 클라이언트 → 서버 : ACK 전송 (연결 완료)
Fast Open
- TCP 연결이 완전히 열리기 전 데이터를 전송할 수 있게 해주는 기능
🔹 동작 방식
- 서버는 클라이언트에게 TFO 쿠키 발급
- 클라이언트는 쿠기 저장
- 다음 서버 연결 시 SYN 패킷에 TFO 쿠키와 데이터를 함께 실어 전송
- 서버는 쿠키를 확인하고, handshake 도중에 데이터를 수신/처리 가능
흐름 요약
[최초 연결]
클라이언트 → 서버: SYN
서버 → 클라이언트: SYN-ACK + TFO 쿠키 발급
[이후 연결]
클라이언트 → 서버: SYN + DATA + TFO 쿠키
서버 → 클라이언트: SYN-ACK
(서버는 쿠키 확인 후 DATA 즉시 수신/처리 시작)데이터 전송
TCP는 시퀀스 번호와 ACK를 통해 패킷 순서를 유지한다.
- 세 번째 세그먼트부터 데이터 전송이 이뤄진다.
- A 프로세스는 순서 번호 11번부터 5바이트의 데이터를 전송하고, B 프로세스는 순서 번호 51부터 10바이트의 데이터를 전송한다.
TCP는 NAK를 사용하지 않는다.
- 다음에 수신할 데이터 번호를 Acknowledgment Number로 하여 ACK을 보낸다.
- ACK을 받지 못한 송신자는 해당 데이터의 세그먼트를 재전송한다.
연결 해제 (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)와 소켓 레벨에서 동작
🔹 필요성
다음과 같은 상황에선 연결을 끊어버린다.
- 네트워크 연결 끊김
- 상대방 프로세스가 죽음
연결을 끊지 않으면, 응답이 없는 채로 무한정 대기가 발생
🔹 동작 방식
- 소켓이 유휴 상태로 일정 시간 동안 아무 데이터도 주고받지 않으면
- OS가 Keep-Alive probe라는 패킷을 상대방에게 보냄
- 상대방이 응답하면 → 연결 유지
- 응답이 없으면 → 일정 횟수 후 연결 종료
🔹 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 패킷이 주기적으로 전송된다.