본문 바로가기
Study/네트워크

Chunk, SCTP

by 구루마3단 2025. 3. 30.

✅ SCTP에서 “Chunk”란?

> **SCTP 메시지를 구성하는 ‘단위 블록’**
> 하나의 SCTP 패킷은 여러 개의 **chunk(조각)**로 구성될 수 있어.

📦 비유하자면:

- SCTP 패킷 = 택배 상자
- Chunk = 상자 안에 들어 있는 여러 개의 **작은 박스**
- 각 Chunk에는 서로 다른 **용도와 타입**이 있음

---

🔎 공식 정의 (검증 기반)

📄 **RFC 4960 – Section 3.2 Chunk Field Descriptions**
> > “Each SCTP packet is composed of a common header followed by one or more chunks.”

→ ✅ **SCTP 패킷 = 공통 헤더 + 하나 이상의 Chunk**

---

🧩 Chunk의 구조

```
| Chunk Type (1 byte) | Flags (1 byte) | Length (2 bytes) | Data (variable) |
```

- **Chunk Type:** 이 chunk가 어떤 용도인지 (예: INIT, DATA, ABORT 등)
- **Flags:** 부가 설정 (예: unordered 전송 등)
- **Length:** 총 길이
- **Data:** 실제 데이터 or 제어 정보

---

📚 대표적인 Chunk 종류들

Chunk 타입 의미 설명
`INIT` 연결 초기화 클라이언트가 서버에 연결 요청
`INIT ACK` 초기화 응답 서버가 응답 + 쿠키 제공
`COOKIE ECHO` 쿠키 반환 클라이언트가 받은 쿠키 돌려줌
`COOKIE ACK` 쿠키 확인 서버가 쿠키 유효성 확인 후 연결 수립
`DATA` 사용자 데이터 실제 페이로드 (파일, 메시지 등)
`SACK` Selective Ack 누락된 chunk 위치 ACK (부분 ACK)
`ABORT` 강제 종료 연결 즉시 끊기 (TCP RST와 유사)
`SHUTDOWN` 정상 종료 요청 연결 종료 시그널 시작
`SHUTDOWN ACK` 종료 응답 상대가 종료 요청을 수락
`HEARTBEAT` 연결 유지 확인 Ping처럼 살아있는지 확인
`ERROR` 오류 정보 잘못된 동작이나 요청 발생 시 전송

---

🎯 핵심 포인트

특성 설명
✅ 구조화 각 chunk는 독립된 의미와 타입을 가짐
✅ 확장성 새로운 chunk 타입도 정의 가능 (옵션 필드처럼)
✅ 혼합 가능 하나의 SCTP 패킷에 여러 chunk 동시 포함 가능 (ex: DATA + SACK)
✅ 제어와 데이터 구분 TCP와 달리 **제어 정보와 사용자 데이터가 완전히 분리되어 chunk로 나뉨**

---

✅ 정리

> 🔹 **Chunk = SCTP의 데이터 및 제어 정보 단위 블록**
> 🔹 여러 chunk가 하나의 SCTP 패킷 안에 들어감
> 🔹 INIT, DATA, ABORT 등 다양한 종류가 있고, 각각 **프로토콜의 기능 하나하나를 담당**

> ✅ **TCP의 플래그(Flag)** 는 “하나의 segment 안에서 여러 상태를 표현하는 **비트들**”이고,
> ✅ **SCTP의 Chunk**는 “**독립된 정보 블록**”들이고, 각 블록이 **기능 하나씩 담당**하는 구조야.

그래서 **유사한 역할**을 하기도 하지만,
**역할 범위나 유연성 면에선 Chunk가 훨씬 확장형이고 모듈화되어 있어.**

---

🔍 TCP Flags vs SCTP Chunks

항목 TCP Flags SCTP Chunks
형태 비트 필드 (6~9개 비트) 구조화된 데이터 블록
위치 TCP 헤더 내 Flags 필드 SCTP 패킷 내 chunk 단위
개수 한 패킷에 여러 flag 가능 (1개 필드) 여러 개의 chunk 동시 포함 가능
기능 연결 수립/종료 (SYN, FIN), 제어 (RST, PSH, ACK 등) 연결 수립, 종료, 데이터, 에러 등 **기능별 chunk 분리**
유연성 고정된 기능 기능별 chunk 확장 가능 (옵션형처럼)

---

✅ 예시 비교

TCP:

```plaintext
[ SYN | ACK | PSH | FIN ] → 전부 플래그 비트 조합
```

SCTP:

```plaintext
[ INIT chunk ]
[ COOKIE ECHO chunk ]
[ DATA chunk ]
[ SACK chunk ]
→ 각각 개별 구조, 필요하면 한 패킷에 여러 개도 가능
```

---

💡 비유하자면:

- **TCP Flags** = 옷에 붙은 작은 뱃지들 (그냥 켜고 끄는 기능)
- **SCTP Chunks** = 옷 안에 독립적인 주머니들 (각 주머니가 역할을 함)

→ Chunk는 구조적으로도 크기가 다르고, 데이터를 포함하기도 하니까
플래그보다는 **"미니 메시지들"**에 더 가까움

---

📌 정리

> 🔸 **기능 면에서는 TCP의 플래그와 유사한 역할도 하지만,**
> 🔸 **구조와 유연성 면에서는 완전한 상위 개념에 가까운 게 SCTP의 Chunk다.**
> 🔸 TCP는 bit flag로 상태를 표현하고, SCTP는 **기능별 블록(chunk)**을 집어넣는 식.

---

✅ TCP Flags vs SCTP Chunks: 핵심 비교표

구분 **TCP Flags** **SCTP Chunks**
📦 **기본 개념** 헤더 안의 **비트 플래그 필드** 패킷 내 **기능별 독립 블록**
🧱 **구조** TCP 헤더의 6~9개 비트 (SYN, ACK 등) 각 chunk는 type, length, data 필드 포함
🧠 **목적** 상태 제어 및 흐름 관리 연결 수립, 데이터 전송, 종료, 에러 등 **모든 기능**
🔁 **복수 사용 가능성** 한 패킷에 여러 flag 동시 설정 가능 (ex. SYN+ACK) 한 패킷에 **복수 chunk 동시 포함 가능** (ex. DATA + SACK)
🔓 **유연성/확장성** 고정된 플래그 세트만 사용 새로운 chunk 타입 정의 가능 (확장성 높음)
🛠 **데이터 포함 여부** ❌ 데이터 없음 (상태 제어용 비트만 존재) ✅ chunk에 **데이터 포함 가능** (ex. DATA chunk)
🛡 **보안 설계 연계** 플래그 조작 시 DoS 취약 (SYN Flooding 등) 쿠키 기반 INIT 등 보안 chunk 설계 반영

---

🎯 시각적 비교 예

🧱 TCP Packet (단일 헤더 + 플래그 비트)

```
| IP Header | TCP Header [SYN, ACK, ...] | Payload |
▲ flags 필드 (비트 조합)
```

---

📦 SCTP Packet (공통 헤더 + 여러 개의 Chunk)

```
| SCTP Common Header |
├─ INIT chunk
├─ DATA chunk
├─ SACK chunk
├─ ABORT chunk
...
```

> 각 Chunk는 완전히 독립된 구조이며, **데이터도 가짐**

---

📌 핵심 정리

결론 설명
TCP는 **상태 전송을 위한 '비트 신호'**를 쓴다 간단하지만 제한적
SCTP는 **각 기능을 '구조화된 메시지 블록(chunk)'**으로 설계 유연하고 확장성 뛰어남
Chunk는 TCP Flag의 단순한 대체가 아니라, **전송 계층 프로토콜을 모듈화한 방식**