본문 바로가기

카테고리 없음

SCTP간단한 설명


1. SCTP는 UDP와 TCP에 대응되는 수송계층 프로토콜입니다.
그러나 reliable하다는 점에서 TCP의 맞상대라고 할 수 있지만,
TCP가 갖지 못한 기능들을 갖고 있다는 점에서성능과는 관계가 없이 (저도 모릅니다) 기능적으로는 더 우수하다
말할 수 있습니다.
2.20여년간 유지되어온 TCP/IP 체계에서 TCP 옆자리에 어떤 프로토콜
하나를 덧 끼워 넣는 것에 대해 net-heads들은 매우 강력한 정서적
거부감을 갖고 있기 때문에...
kernel 레벨에서 TCP 옆자리에 SCTP가 들어가기는 매우 어려울
것입니다.
그러나... SCTP가 핵심적으로 쓰이는 제한적인 환경에서는 SCTP가
커널에 들어가 있는 시스템이 널리 쓰일 수는 있을 겁니다.

그리고.. Linux와 같이 실험적이면서 범용적인 OS의 경우에는...
kernel에 쉽게 들어갈 수 있을 겁니다.
하지만 리누스 토발즈나 앨런 콕스가 그리 쉽사리 배포본에 끼워
주지는 않을 것이고... patch 레벨에서 배포될 가능성이 높겠습니다.

3.
SCTP의 목적은 PSTN 시그널링 정보를 IP 네트워크에서 전송하기
위한 것인데.. SCTP의 특징적인 전송 서비스를 효과적으로 활용할
수 있는 다양한 응용서비스에도 활용할 수 있을 것이다.. 라고말하고 있습니다.

4.
그러면 어떤 특징적인 전송 서비스를 제공하느냐....
Stream Control Transmission Protocol이란 이름에서 드러나듯이..
multi-streaming 전송을 제공한답니다. TCP도 stream 전송하지 않느냐
하실텐데...

TCP의 경우는 byte stream으로 되어 있는 TCP segment를
sequence number 붙여서 주루룩 보냅니다.

congestion으로 loss or delayed packets이 생긴다든지..
저처럼 가끔 router power S/W를 껐다가 켠다든지..
옆에서 스파크용접 공사를 한다는지 (요즘에도 이런 거 영향을 받나요?)
그래서 packet loss가 생기면
TCP의 flow control과 congestion avoidance 알고리즘에 의해
영향을 받습니다. 즉, 괜히 뒤따라 가다가 날벼락 맞는 패킷들이
생긴다는 겁니다.

하지만 SCTP는 stream packet들이 independently handled된답니다.
하나의 패킷에 문제가 생기면 그 놈에 한정해서만 문제가 되고
다른 패킷들에는 영향을 끼치지 않는다는 것이죠.
아마도...
1990년 Proceedings of ACM SIGCOMM \'90, pp. 201-208에 있는
(자료 좀 찾았습니다. :)
\"Architectural Considerations for a New Generation of Protocols\"
논문에서 제시한 ALF (Application Level Framing)을 따와서 설계한
것 같습니다. ALF는 데이터를 semantic 단위로 보내자..라는 것이었습니다.
즉, On-line book을 보내는 경우라면 1쪽, 2쪽, 3쪽,
이러한 user level의 semantic part를 기준으로 하여 framing하여
보내자는 것이죠. 그러면... 중간에 2쪽이 빠진채 1쪽과 3쪽이 도착하면
TCP라면 쪽 단위를 식별할 수단도 없을 뿐더러..
2쪽이 빠지면 3쪽이 도착해도 user에게 넘겨주지 않죠...
SCTP의 multiple-streaming도 이와 같이 중간에 loss가 된 것이 있어도
그놈만 loss이고 나머지는 user에게 제대로 도착하는대로 넘겨줍니다.
즉, 2쪽이 빠져도 1쪽과 3쪽을 보여준다는 것이죠..
그러다가 나중에 2쪽이 도착하면 2쪽 빈자리에다 끼워넣어 주고...
이러한 목적으로 SCTP에는 numbering field가 세 개가 들어가 있습니다.
한 개는 TCP와 같은 sequence number, 나머지 두 개는
Stream ID와 Stream Sequence Number입니다.

5.
그 다음에 multi-homing을 지원한답니다.
이게 무슨 말이냐 하면...
TCP는 source port, source IP, destination port, destination IP 이렇게
네 가지 요소를 가지고 data flow를 식별하고 있고, 한 쪽의 end-point는
socket file descriptor로 user에 전달되는데, socket binding 과정을
통해 end-point와 저기 네 가지 요소가 binding이 됩니다. 만약
위 네 가지 요소 가운데 어느 하나라도 달라지게 되면 connection이
끊어지게 되는 셈이 되고... Mobile IP가 바로 이 원인 때문에 나온
것이기도 합니다.
SCTP에서는 multiple IP를 end-point에 할당할 수가 있답니다.
이렇게 되면... 데이터 송수신이 일어나고 있는 동안에...
통신 경로상의 어느 곳에서 통신 에러가 생기더라도..
(케이블 절단, 라우터 고장, 스위치, 허브 고장 등등..)
multi-homing에 의해 다른 장소로 계속 통신이 가능하다는 것입니다.
예를 들어, 서울과 대전 사이에 통신하고 있고.. 부산에 백업 센터가
있다고 했을 때.... 서울-대전 사이에 한참 통신하고 있는데
통신 오류가 발생하면 곧바로 부산 백업 센터와 계속 통신을 할 수
있다는 것입니다. 새로운 통신 채널을 열지 않고도....

6.그 다음에.... TCP처럼 이런 기능들도 다 갖고 있고요...
unicast between 2 end points,
reliable transmission
full duplex
flow control
congestion avoidance

7.
그 다음에.. 프로토콜 절차, packet format, 기타 등등이 있는데..
궁금하시면 읽어보시고요...
위와 같은 정도의 설명이면.. 어떤 기능을 제공하는지 대략적인
이해는 될 것 같습니다.