스트림 제어 전송 프로토콜(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 |