본문 바로가기

Study/Networking

9.5 스트림 제어 전송 프로토콜(SCTP)

728x90

1. SCTP 서비스

- 프로세스 대 스로세스 통신

SCTP는 UDP 혹은 TCP와 마찬가지로 프로세스 대 프로세스 통신을 제공한다.

 

- 다중 스트림

TCP가 스트림-중심 프로토콜이라는 것을 안다. TCP 클라이언트와 TCP 서버 사이의 각 연결은 하나의 단일 스트림을 포함한다. 이러한 접근법에 대한 문제는 스트림의 어느 지점의 손실은 나머지 데이터의 전달을 막아버린다. SCTP는 SCTP용어로 결합 이라고 하는 다중 스트림 서비스를 각 연결에 허용한다. 만약 스트림 가운데 하나가 막히면 다른 스트림은 여전이 데이터를 전달할 수 있다.

- 멀티호밍

TCP연결은 하나의 발신지와 하나의 목적지 IP 주소를 포함한다. 이것은 송신기 또는 수신기가 멀티호밍 호스트라 할지라도 이러한 IP 주소들은 목적지당 1개의 주소만이 연결하는 동안 이용될 수 있다는 것을 의미한다. 반면 SCTP 결합은 멀티호밍 서비스를 지원한다. 송신 호스트와 수신 호스트는 결합을 위해 각 종단에 다수의 IP 주소를 정의할 수 있다. 이러한 고장 감내 접근법은 하나의 경로가 실패할 때 다른 경로로 중단 없이 데이터 전달을 위해 사용될 수 있다.

 

- 전이중 통신

SCTP는 TCP처럼 동시에 양방향으로 데이터가 진행할 수 있는 전이중 서비스를 제공한다. 각 SCTP는 송신과 수신 버퍼를 갖고 패킷들은 양쪽 모두의 방향으로 송신된다.

 

-연결형 서비스

SCTP는 TCP처럼 연결형 프로토콜이다. 그러나 SCTP에서는 연결을 결합이라고 한다.

 

- 신뢰성 있는 서비스

SCTP는 TCP처럼 신뢰성 있는 전송 프로토콜이다. 데이터가 안전하게 도착했는지를 확인하기 위하여 확인응답 절차를 사용한다.

 

2. SCTP 특징

- 전송 순서 번호(TSN)

SCTP에서 데이터 단위는 단편화 때문에 프로세스로부터 들어오는 메시지와 일대일 관계를 가질 수도 또는 그렇지 않을 수도 있는 데이터 청크이다. SCTP에서 데이터 전송은 데이터 청크에 번호를 부여함으로써 제어된다. SCTP는 데이터 청크에 번호를 부여하기 위하여 전송 순서 번호(TSN)를 사용한다.

 

- 스트림 식별자(SI)

SCTP에서는 각 결합에 여러 개의 스트림이 존재할 수도 있다. SI는 0부터 시작하는 16비트 번호이다.

 

- 스트림 순서 번호(SSN)

SCTP는 각 스트림의 데이터 링크를 스트림 순서 번호(SSN)로 정의한다.

 

- 패킷

TCP에서 세그먼트는 데이터와 제어 정보를 전달한다. 데이터는 바이트의 집합으로 전달되고 제어 정보는 헤더에 6개의 제어 플래그로 정의된다. SCTP의 설계는 완전히 다르다. 데이터는 데이터 청크로써 전달되고 제어 정보는 제어 청크로 전달된다. 여러 개의 제어 청크와 데이터 청크는 하나의 패킷에 함께 묶일 수 있다.

TCP 세그먼트와 SCTP 패킷 비교

- 확인응답 번호

SCTP 확인응답 번호는 청크 중심이다. TSN을 참조한다. 예를 들어 INIT제어 청크는 INIT ACK 청크로 확인응답이 된다.

 

3. 패킷 형식

SCTP 패킷은 필수 항목의 일반 헤더와 청크로 불리는 블록 집합을 가진다. 청크에는 제어 청크와 데이터 청크가 있다. 패킷에서 제어 청크는 데이터 청크 전에 온다.

 

- 일반 헤더

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

 

- 청크

제어 정보와 사용자 데이터는 청크로 전달된다. 첫 번째 3개의 필드는 모든 청크에 공통이다. 유형 필드는 256가지의 청크 유형을 정의할 수 있다.

 

4. SCTP 결합

SCTP는 TCP처럼 연결형 프로토콜이다. 그러나 SCTP에서는 멀티호밍을 강조하기 위하여 결합이라고 한다.

- 결합 설정

SCTP에서 결합 설정은 네 방향 핸드셰이크를 요구한다. TCP와 유사하게 SCTP 서버는 어떠한 결합도 받아들일 준비가 필요하다. 그러나 결합 설정은 클라이언트에 의해 시작된다.

- 데이터 전송

TCP처럼 SCTP는 피기배킹을 지원한다. TCP는 메시지 사이를 인지하는 어떠한 경계선도 없이 바이트 스트림으로 메시지를 수신한다. 반면 SCTP에서는 경계선을 인식하고 유지한다. 프로세스로부터 오는 메시지들은 하나의 단위로 취급되고 단편화가 되지 않았다면 데이터 청크로 삽입된다.

 

- 결합 종료

TCP와는 다르게 SCTP는 절반-폐쇄 상황을 허용하지 않는다. 결합 종료는 3개의 패킷을 사용한다.

5. 흐름 제어

SCTP에서의 흐름 제어는 TCP와 유사하다. TCP에서는 단지 하나의 데이터 단위, 즉 바이트를 다루어야 했다. 그러나 SCTP에서는 2개의 데이터 단위인 바이트와 청크를 다루어야 한다. rwnd와 cwnd의 값은 바이트로 표현하고 TSN과 확인응답 값은 청크로 표현한다.

- 수신기 사이트

수신기는 1개의 버퍼와 3개의 변수를 가진다. 첫 번쨰 변수는 수신된 마지막 TSN 즉, cumTSN을 유지한다. 두 번째 변수는 이용 가능한 버퍼 크기 winSize를 유지하고, 세 번째 변수는 마지막 누적된 확인응답 lastACK를 유지한다.

- 송신기 사이트

송신기는 1개의 버퍼(큐)와 3개의 변수 curTSN, rwnd, inTransit 을 갖는다.

6. 오류 제어

송신기에 수신기 버퍼 상태를 보고하기 위하여 SACK 청크를 사용한다.

- 수신기 사이트

이 설계에서 수신기는 순서가 어긋난 청크들을 포함하여 큐에 도착한 모든 청크를 저장한다. 그러나 손실된 청크를 위한 공간을 남겨둔다. 중복 메시지를 버리거나 송신기에 보고하기 위하여 추적을 한다.

- 송신기 사이트

송신기 사이트에서 송신 큐와 재전송 큐의 두 가지 버퍼(큐)를 요구한다. 또한 3개의 변수를 사용한다.

- 데이터 청크 송신

하나의 종단은 curTSN보다 크거나 같은 TSN을 가진 송신 큐에 데이터 청크가 이꺼나 또는 재전송 큐에 데이터 청크가 있을 때마다 패킷을 송신한다. 재전송 큐는 우선순위를 갖는다. 그러나 패킷에 포함되어 있는 데이터 청크 또는 청크의 총 크기는 rwnd - inTransit를 초과해서는 안되며, 프레임의 총 크기는 MTU 크리르 초과해서는 안 된다.

 

- 혼잡 제어

SCTP 설계자들은 TCP에 사용된 혼잡 제어를 위한 전략과 동일한 것을 사용한다.

728x90