질문: SCTP 연결 및 종료 과정을 클라이언트와 서버 관계로 다시 자세히 설명해주세요.
답변
SCTP(Stream Control Transmission Protocol)는 TCP와 달리 4-Way Handshake를 사용하여 연결을 설정하고 종료합니다. 이 과정에서 클라이언트와 서버가 주고받는 메시지(Chunk)를 단계별로 설명하겠습니다.
1. SCTP 연결 설정 (4-Way Handshake)
핵심 메시지(Chunks)
- INIT: 클라이언트가 서버에게 연결 요청을 보냄.
- INIT ACK: 서버가 연결 요청을 승인하며 응답 보냄.
- COOKIE ECHO: 클라이언트가 서버로부터 받은 쿠키를 반환함.
- COOKIE ACK: 서버가 클라이언트의 쿠키 반환을 확인하고 연결 설정 완료.
과정 (클라이언트와 서버 간 메시지 흐름)
-
클라이언트 → 서버: INIT
- 클라이언트가 연결을 시작하기 위해 서버로 INIT Chunk를 보냅니다.
- 이 메시지에는 클라이언트의 Initiate Tag(연결 식별 값)와 Receiver Window Credit(수신 윈도우 크기) 정보가 포함됩니다.
- 상태 전환:
- 클라이언트:
CLOSED
→ COOKIE_WAIT
-
서버 → 클라이언트: INIT ACK
- 서버는 INIT 메시지를 수신하고, 클라이언트에게 INIT ACK Chunk를 보냅니다.
- INIT ACK에는 서버의 Initiate Tag와 클라이언트를 검증하기 위한 쿠키(Cookie)가 포함됩니다.
- 상태 전환:
- 서버:
CLOSED
→ INIT_ACK_SENT
-
클라이언트 → 서버: COOKIE ECHO
- 클라이언트는 서버로부터 받은 쿠키를 COOKIE ECHO Chunk에 담아 다시 서버로 전송합니다.
- 이 과정에서 클라이언트는 자신이 인증된 연결 요청자임을 서버에 증명합니다.
- 상태 전환:
- 클라이언트:
COOKIE_WAIT
→ COOKIE_ECHOED
-
서버 → 클라이언트: COOKIE ACK
- 서버는 클라이언트의 쿠키를 검증한 후, COOKIE ACK Chunk를 클라이언트에게 전송합니다.
- 이로써 SCTP 연결이 설정됩니다.
- 상태 전환:
- 서버:
INIT_ACK_SENT
→ ESTABLISHED
- 클라이언트:
COOKIE_ECHOED
→ ESTABLISHED
2. SCTP 연결 종료 (4-Way Termination)
핵심 메시지(Chunks)
- SHUTDOWN: 클라이언트가 서버에게 연결 종료 요청을 보냄.
- SHUTDOWN ACK: 서버가 클라이언트의 요청을 확인하고 응답을 보냄.
- SHUTDOWN COMPLETE: 클라이언트가 종료 완료 메시지를 보내며 연결 종료.
과정 (클라이언트와 서버 간 메시지 흐름)
-
클라이언트 → 서버: SHUTDOWN
- 클라이언트가 연결 종료를 요청하며 서버로 SHUTDOWN Chunk를 보냅니다.
- 상태 전환:
- 클라이언트:
ESTABLISHED
→ SHUTDOWN_SENT
-
서버 → 클라이언트: SHUTDOWN ACK
- 서버는 클라이언트로부터 SHUTDOWN 요청을 수신하고, 데이터를 모두 전송한 뒤 SHUTDOWN ACK Chunk를 보냅니다.
- 상태 전환:
- 서버:
ESTABLISHED
→ SHUTDOWN_ACK_SENT
-
클라이언트 → 서버: SHUTDOWN COMPLETE
- 클라이언트는 서버의 SHUTDOWN ACK를 확인한 뒤, 연결 종료 완료를 알리는 SHUTDOWN COMPLETE Chunk를 전송합니다.
- 상태 전환:
- 클라이언트:
SHUTDOWN_SENT
→ CLOSED
- 서버:
SHUTDOWN_ACK_SENT
→ CLOSED
3. SCTP 메시지의 비트 구성
SCTP는 메시지 단위를 Chunk로 정의하며, 각 Chunk는 아래와 같은 구조를 가집니다.
1) SCTP 헤더 (공통 부분)
필드 | 길이 (비트) | 설명 |
---|
Source Port | 16 | 송신 측 포트 번호 |
Destination Port | 16 | 수신 측 포트 번호 |
Verification Tag | 32 | 연결 무결성을 보장하는 태그 값 |
Checksum | 32 | 데이터 오류를 검증하는 체크섬 |
2) Chunk 구조
필드 | 길이 (비트) | 설명 |
---|
Chunk Type | 8 | Chunk의 종류 (INIT, COOKIE 등) |
Chunk Flags | 8 | 특정 Chunk 동작을 나타내는 플래그 |
Chunk Length | 16 | Chunk의 총 길이 |
Chunk Value | 가변 | Chunk에 담긴 데이터 (쿠키, 태그 등) |
4. 연결 설정 및 종료 원리
-
쿠키 기반 인증
- 서버는 INIT ACK 단계에서 클라이언트로 쿠키를 전송합니다.
- 클라이언트는 COOKIE ECHO 단계에서 쿠키를 반환하며 자신이 신뢰 가능한 요청자임을 증명합니다.
- 이는 SYN 플러딩 공격을 방지하기 위한 설계입니다.
-
Verification Tag
- 클라이언트와 서버는 각자의 Verification Tag를 생성하여 메시지를 주고받습니다.
- 이 태그는 연결의 유효성을 검증하며, 잘못된 태그를 가진 패킷은 폐기됩니다.
-
4-Way Handshake와 종료
- TCP의 3-Way Handshake와 달리 4단계를 거쳐 연결을 설정합니다.
- 종료 역시 4단계를 통해 데이터가 모두 전송된 후 연결이 종료됩니다.
5. TCP와 SCTP 비교
항목 | SCTP | TCP |
---|
연결 설정 방식 | 4-Way Handshake | 3-Way Handshake |
연결 종료 방식 | 4-Way Termination | 4-Way Termination |
SYN 플러딩 방지 | 쿠키 기반 인증 활용 | 미흡 |
데이터 스트림 | 멀티스트리밍 지원 | 단일 스트리밍 |
SCTP는 TCP와 유사하지만 멀티스트리밍, 멀티호밍, 쿠키 인증 등 고유의 강력한 기능을 제공합니다.