스트림 제어 전송 프로토콜(SCTP)
멀티미디어 통신을 위해 조금 더 좋은 프로토콜을 만들기 위해 UDP와 TCP의 일부 장점을 결합하여 설계된 새로운 전송층 프로토콜이다.
◆ SCTP 서비스
1. 프로세스-대-프로세스 통신
| SCTP는 UDP 혹은 TCP와 마찬가지로 프로세스-대-프로세스 통신을 제공 |
2. 다중 스트림
|
SCTP는 SCTP 용어로 결합(association)이라고 하는 다중 스트림 서비스(multistream service)를 각 연결에 허용
만약 스트림 가운데 하나가 막혀있어도 다른 스트림은 여전히 데이터를 전달 가능 다중 스트림 서비스: Association이라 부르며, 스트림 중 1개가 블로킹되더라도 다른 스트림들이 데이터를 전송할 수 있는 서비스를 의미 |

3. 멀티홈잉
|
SCTP 결합은 멀티호밍 서비스(multihoming service)를 지원
송신 호스트와 수신 호스트는 결합을 위해 각 종단에 다수의 IP 주소를 정의 고장 감내 접근법은 하나의 경로가 실패할 때 다른 경로로 중단 없이 데이터 전달을 위해 사용 이러한 고장 감내 특징은 인터넷 전화와 같은 실시간 페이로드를 송수신할 때 매우 큰 도움 |

|
클라이언트는 2개의 IP 주소를 가지고 2개의 로컬 네트워크에 연결이 된다.
서버 또한 2개의 IP 주소를 가지고 2개의 네트워크에 연결된다. 클라이언트와 서버는 4개의 서로 다른 IP 쌍을 가지고 결합을 만들 수 있다. 그러나 현재의 SCTP 구현에서는 IP 주소 1개의 쌍만이 정상적인 통신을 위하여 선택된다는 것을 유념하라. - 다른 경로는 주 경로가 실패하면 사용된다.
- 즉, 현재의 SCTP는 다른 경로 사이에서 부하 분배는 허락하지 않는다.
|
4. 전이중 통신
| SCTP는 TCP처럼 동시에 양방향으로 데이터가 진행할 수 있는 전이중 서비스를 제공 각 SCTP는 송신과 수신 버퍼를 갖고 패킷들은 양쪽 모두의 방향으로 송신 |
5. 연결형 서비스
| SCTP는 TCP처럼 연결형 프로토콜 SCTP에서는 연결을 결합이라고 표현 |
6. 신뢰성 있는 서비스
| SCTP는 TCP처럼 신뢰성 있는 전송 프로토콜 데이터가 안전하게 도착했는지 확인하기 위해 확인응답 절차 사용 |
◆ SCTP 특징
SCTP에서 데이터 단위는 데이터 청크(Data Chunk)이다.
1. 전송 순서 번호(TSN)
|
SCTP는 데이터 청크에 번호를 부여하기 위하여 전송 순서 번호(TSN, Transmission Sequence Number)를 사용한다.
즉, SCTP에서 TSN은 TCP에서 순서 번호와 유사한 역할을 수행한다. TSN은 32비트이고 0과 23^2-1 사이에서 임의로 초기화된다. 각 데이터 청크는 헤더에 해당하는 TSN을 전달해야 한다. |
2. 스트림 식별자(SI)
|
SCTP에서는 각 결합에 여러 개의 스트림이 존재할 수도 있다.
SCTP에 있는 각 스트림은 스트림 식별자(SI, Stream Identifier)를 사용하여 식별된다. 각 데이터 청크는 목적지에 도착할 때 스트림 안에서 위치가 적절하게 되도록 헤더에 SI를 전달해야 한다. SI는 0부터 시작하는 16비트 번호이다. |
3. 스트림 순서 번호(SSN)
|
데이터 청크가 목적지 SCTP에 도착할 때 올바른 순서로 적절한 스트림에 전달이 된다.
이것은 SI 외에 SCTP는 각 스트림의 데이터 링크를 스트림 순서 번호(SSN, Stream Sequence Number)로 정의한다는 것을 의미한다. |
4. 패킷

|
SCTP의 실제는 완전히 다르다. 데이터는 데이터 청크로써 전달되고 제어 정보는 제어 청크로 전달된다.
여러 개의 제어 청크와 데이터 청크는 하나의 패킷에 함께 묶일 수 있다. SCTP의 패킷은 TCP의 세그먼트처럼 동일한 역할을 수행한다. SCTP에서 데이터 청크, 스트림, 패킷을 갖는다. 결합은 많은 패킷을 송신하고 패킷은 여러 개의 청크를 포함하고 청크는 서로 다른 스트림에 속할 수 있다. |
5. 확인 응답 번호
| SCTP 확인응답 번호는 청크 중심이다. TSN을 참조한다. SCTP에서는 제어 정보는 제어 청크에 의해 전달되고 TSN을 필요로 하지 않는다. 이러한 청크 제어는 또 다른 적절한 형태의 제어 청크에 의해 확인응답된다(어떤 것은 확인응답이 필요 없다)
예를 들어, INIT 제어 칭크는 INIT ACK 청크로 확인응답이 된다. 순서 번호나 확인응답 번호가 필요가 없다.
|
◆ 패킷 형식
SCTP 패킷은 필수 항목의 일반 헤더와 청크로 불리는 블록 잡합들을 가진다.
- 청크에는 제어 청크와 데이터 청크 두 가지 형태가 있다.
- 패킷에서 제어 청크는 데이터 청크 전에 온다.

일반헤더(general header, 패킷 헤더)
| 패킷이 속하는 각 결합의 끝 지점을 정의하며, 특정한 결합에 속하는 패킷을 보장하고 헤더 자체를 포함하는 패킷 내용에 대한 무결성을 보존한다. |

|
- 일반 헤더에는 4개의 필드가 있다.
- 발신지와 목적지 포트 번호는 UDP나 TCP와 동일하다. - 검증 태그(verification tag)는 32비트 필드로 패킷을 결합과 일치시킨다. - 이것은 이전의 결합으로부터 온 패킷이 이 결합에 패킷을 잘못 받아들여지는 것을 방지한다. 결합을 위한 식별자로 사용한다. 결합 동안에 모든 패킷에서 반복된다. - 결합에는 각 방향을 위해 사용되는 별도의 검증 태그가 있다. |
청크
제어 정보와 사용자 데이터는 청크로 전달된다.

|
- 청크는 그림 9.60에서 보듯이 공통의 형식을 가진다. 첫 번째 3개의 필드는 모든 청크에 공통이다.
- 정보 필드는 청크의 유형에 종속된다. 유형 필드는 256가지의 청크 유형을 정의할 수 있다. 단지 일부만 현재까지 정의되었다. 나머지는 미래 사용을 위해 유보되었다. - 플래그 필드는 특별한 청크가 필요할 수 있는 특수한 플래그를 정의한다. 길이 필드는 유형, 플래그, 그리고 길이 필드를 포함하는 청크의 전체 크기를 바이트로 정의한다. - 정보 영역의 크기가 청크의 유형에 종속적이기 때문에, 우리는 청크의 경계 정의가 필요하다. 만약 청크가 정보를 전달하지 않으면, 길이 필드의 값은 4(4바이트)이다. |

◆ SCTP 결합(Association)
SCTP는 TCP처럼 연결형 프로토콜이다.
SCTP에서는 멀티홈잉을 강조하기 위하여 연결을 결합이라고 한다.
1. 결합설정
2. 데이터 전송: 멀티홈잉 데이터 전송, 멀티스트림 전달, 단편화
3. 결합 종료
1. 결합 설정
SCTP에서 결합 설정은 네-방향 핸드셰이크를 요구한다.

| 1. 클라이언트는 INIT 청크를 가진 첫 번째 패킷을 송신한다. - 이 패킷(일반 헤더에서 정의된)의 검증 태그(VT, Verification tag)는 아직까지 이 방향(클라이언트에서 서버로)을 위해 정의된 검증 태그를 가지지 못했기 때문에 0이다.
- INIT 태그는 다른 방향으로(서버에서 클라이언트로) 패킷을 위해 사용되는 초기 태그(initiation tag)를 포함한다.
- 청크는 또한 이 방향을 위해 초기 TSN(initial TSN)을 정의하고 rwnd를 위한 값을 광고한다.
- rwnd의 값은 정상적으로 SACK 청크에 광고된다. 이것이 SCTP가 세 번째와 네 번째 패킷에 DATA 청크의 포함을 허용하기 때문에 여기서 수행된다.
- 서버는 반드시 유효한 클라이언트 버퍼 크기를 인지하여야만 한다. 어떠한 다른 청크도 첫 번째 패킷과는 전송될 수 없다.
2. 서버는 INIT ACK 청크를 가진 두 번째 패킷을 송신한다. - 검증 태크는 INIT 청크에 초기 태그 필드의 값이다.
- 이 청크는 다른 방향으로 사용될 태그를 초기화하고, 서버로부터 클라이언트로 데이터 흐름을 위해 초기 TSN을 정의하고, 서버의 rwnd를 설정한다.
- rwnd 값은 클라이언트가 세 번째 패킷과 함께 DATA 청크를 전송할 수 있도록 허용하기 위해 정의된다. INIT ACK 역시 이 순간 서버의 상태를 정의하는 쿠키를 전송한다. 쿠키 사용에 대해 짧게 논의할 것이다.
3. 클라이언트 COOKIE ECHO 청크를 포함하는 세 번째 패킷을 송신한다. - 이것은 서버에 의해 송신된 쿠키를 변경 없이 반향시키는 아주 간단한 청크이다. SCTP는 이 패킷에 데이터 청크를 포함시키는 것을 허용한다. 4. 서버는 COOKIE ECHO 청크의 수신에 대한 확인응답을 하는 COOKIE ACK 청크를 포함한 네 번째 패킷을 송신한다. - SCTP는 이 패킷을 가지고 데이터 청크를 포함시키는 것을 허용한다.
|
2. 데이터 전송
멀티홈잉 데이터 전송
|
- 멀티호밍은 통신을 위하여 양 종단 간 여러 개의 IP 주소를 정의하는 것을 허용한다. 그러나 이러한 주소들의 하나만이 우선 주소(primary address)로 정의될 수 있고 나머지는 대체 주소들이다.
- 우선 주소는 결합을 설정하는 동안 정의된다. 흥미로운 점은 한쪽 종단의 우선 주소는 다른 종단에 의해 결정된다는 점이다. 즉 발신지는 목적지를 위한 우선 주소를 정의한다.
- 기본적으로 데이터 전송은 목적지의 우선 주소를 사용한다.
- 만약 우선 주소가 유효하지 못하면, 대체 주소 가운데 하나가 사용된다. 그러나 프로세스는 항상 우선 주소를 무시하고 메시지가 대체 주소 가운데 하나로 전송되기를 요구한다. 프로세스 역시 명쾌하게 현재 결합의 우선 주소를 변경할 수 있다.
- 발생하는 논리적인 의문은 SACK를 어디로 전송하느냐 하는 것이다. SCTP는 SACK가 대응 SCTP 패킷의 원래 주소로 전송되도록 지시한다.
|
멀티스트림 전달
|
- SCTP는 발신지와 목적지 사이의 데이터 청크의 이동인 데이터 전송을 다루기 위하여 TSN 번호를 사용한다.
- 데이터 청크의 전달은 SI와 SSN으로 제어된다.
- SCTP는 여러 개의 스트림을 지원할 수 있으며, 이것은 송신기 프로세스는 서로 다른 스트림을 정의할 수 있고, 하나의 메시지는 이러한 스트림의 하나에 속할 수 있다는 것을 의미한다. - 각 스트림에는 스트림을 유일하게 정의하는 스트림 식별자(SI)가 할당된다. 그러나 SCTP는 각 스트림에 순서 있는(ordered, 기본)과 순서 없는(unordered) 두 가지 유형의 데이터 전달을 지원한다. - 순시화된 데이터 전달은 스트림에 데이터 청크가 순서를 정의하기 위해 스트림 순서 번호(SSN)를 사용한다.
- 청크가 목적지에 도착하면, SCTP는 청크에 정의된 SSN에 따라 메시지 전달을 책임진다. 이것은 일부 청크가 순서에 벗어나 도착할 수 있기 때문에 전달에 지연이 발생할 수 있다. - 순서 없는 데이터 전달은 스트림에서 데이터 청크는 U 플래그 설정을 가지나, 이들의 SSN 필드 값은 무시된다. 이들은 SSN을 소비하지 않는다. - 순서 없는 데이터 청크가 목적지 SCTP에 도착하면, 이것은 청크를 전달하는 메시지를 다른 메시지의 대기 없이 바로 응용에 전달한다. - 대부분의 경우, 응용은 순서 있는 전달 서비스를 사용하나, 때때로 일부 응용은 순서에 벗어나 전달되어야만 하는 긴급 데이터를 전송할 필요가 있다. 이런 경우에 응용은 순서 없는 전달을 정의할 수 있다. |
단편화
|
- 데이터 전송에서 또 다른 문제는 단편화(fragmentation)이다.
- SCTP는 메시지의 크기가(IP 데이터그램에서 캡슐화될 때) 경로에 대한 MTU를 초과하지 않는다면, 메시지로부터 데이터 청크를 생성할 때 프로세스에서 프로세스까지 메시지의 경계선을 보존한다. - 메시지를 운반하는 IP 데이터그램의 크기는 바이트로 메시지의 크기에 데이터 청크 헤더, 필요한 SACK 헤더, SCTP 일반 헤더 그리고 IP 헤더 등 4개의 오버헤드를 더함으로써 결정될 수 있다.
- 전체 크기가 MTU를 초과한다면 메시지는 단편화가 필요하다. |
3. 결합 종료

|
SCTP에서는 TCP처럼 데이터를 교환하고 있는데 (클라이언트 또는 서버) 참여한 2개의 어느 쪽도 연결을 폐쇄할 수 있다.
TCP와는 다르게 SCTP는 절반-폐쇄 상황을 허용하지 않는다. 만약 한쪽 종단이 결합을 폐쇄하면, 다른 종단은 새로운 데이터 송신을 멈추어야만 한다. 데이터가 종료를 요청한 수신 큐에 남아 있다면, 데이터는 송신되고 결합은 폐쇄된다. |
◆ SCTP 오류 제어
SCTP는 TCP처럼 신뢰성있는 전송층 프로토콜이다.
- 송신기에 수신기 버퍼의 상태를 보고하기 위하여 SACK (Selective ACK) 청크를 사용한다.
- 각 구현 방법에서는 수신기와 송신기 사이트를 위하여 서로 다른 형태의 개체와 타이머를 사용한다
수신기 사이트
- 이 설계에서 수신기는 순서가 어긋난 청크들을 포함하여 큐에 도착한 모든 청크를 저장한다.
- 그러나 손실된 청크를 위한 공간을 남겨둔다. 중복 메시지를 버리거나 송신기에 보고하기 위하여 추적을 한다.

(수신기 사이트에 대한 전형적인 설계와 특정한 지점에서 수신 큐의 상태를 보여주고 있다.)
|
- 송신된 마지막 확인응답은 데이터 청크 20을 위한 것이다.
- 이용 가능한 창 크기는 1,000바이트이다. - 21에서 23까지 청크들이 순서대로 수신이 된다. - 첫 번째 순서 없는 블록은 26에서 28까지 청크들을 가지고 있다. - 두 번째 순서 없는 블록은 31에서 34까지 청크들을 포함한다. - 한 변수는 cumTSN 값을 유지한다. - 변수 배열은 순서가 없는 각 블록의 시작과 끝을 계속 추적한다. 변수 배열은 수신된 중복 청크를 유지한다. - 이 청크들은 버려질 것이기 때문에 큐에 중복 청크를 저장할 필요가 없다. - 그림은 또한 송신기에 수신기의 상태를 보고하기 위하여 송신될 SACK를 보여준다. 순서 없는 청크를 위한 TSN 번호는 누적된 TSN에 대해 상대적인(오프셋) 값이다. |
송신기 사이트

|
- 송신기 사이트에서 송신 큐와 재전송 큐의 두 가지 버퍼(큐)를 요구한다. rwnd, inTransit, curTSN 등 3개의 변수를 사용한다. 그림은 전형적인 설계를 보여주고 있다.
- 송신 큐는 23에서 40까지 청크를 유지한다. 23에서 36까지 청크는 이미 송신되었고 그러나 아직 확인응답이 되지 않았다. 미해결 청크들이다. - curTSN은 송신되어야 하는 다음 청크를 가리킨다(37). 각 청크는 100바이트라고 가정하면 이것은 1,400데이터 바이트(23부터 36까지의 청크)가 이동 상태에 있는 것을 의미한다. 이때에는 송신기가 재전송 큐를 가진다. - 패킷이 송신될 때 재전송 타이머가 그 패킷(패킷에 있는 모든 데이터 청크)을 위하여 시작한다. 어떤 구현 방법에서는 전체 결합을 위하여 하나의 단일 타이머를 사용한다. 그러나 간단하게 하기 위하여 각 패킷에 하나의 타이머를 가진 관례를 따른다. - 패킷에 대한 재전송 타이머가 끝날 때 또는 손실(TCP를 위해 설명한 빠른 재전송)로써 패킷을 선언하는 4개의 중복 SACK 도착하면 패킷 안에 있는 청크들은 재송신되기 위하여 재전송 큐로 이동된다.
- 이러한 청크들은 미해결보다는 손실로 간주된다. - 재전송 큐에 있는 청크들은 우선순위를 갖는다. 즉, 다음 번에 송신기는 청크를 보낼 때는 재전송 큐의 21번 청크가 보내진다. |
◆ SCTP 혼잡 제어
SCTP는 TCP처럼 네트워크의 혼잡에 종속되는 패킷을 가진 전송층 프로토콜이다.
SCTP 설계자들은 TCP에 사용된 혼잡 제어를 위한 전략과 동일한 것을 사용한다.
'데이터 통신' 카테고리의 다른 글
| [데이터 통신과 네트워킹] 응용층 (WWW와 HTTP) (0) | 2022.11.04 |
|---|---|
| [데이터 통신과 네트워킹] Chapter 10 응용층 기본 연습문제 풀이 (0) | 2022.11.02 |
| [데이터 통신과 네트워킹] TCP 혼잡 제어 (0) | 2022.10.07 |
| [데이터 통신과 네트워킹] Chapter 9 전송층 기본 연습문제 풀이 (2) | 2022.09.30 |
| [데이터 통신과 네트워킹] TCP 창, 흐름 제어, 오류 제어 (0) | 2022.09.27 |