SCTP

Stream Control Transmission Protocol (SCTP)는 UDP와 TCP를 결합해 만든 전송층 프로토콜이다.

Services

  • 프로세스-대-프로세스 통신
  • 다중 스트림
  • 멀티홈잉
    • 현재의 SCTP 구현에서는 IP 주소 1개의 쌍만이 정상적인 통신을 위하여 선택됨
    • 주 경로가 실패하면 다른 경로가 사용됨
    • 동시에 여러 경로를 활용하지는 않음
  • 전이중 통신
  • 연결 지향 서비스
  • 신뢰성 있는 서비스

Features

  • Transmission Sequence Number (TSN) : 전송 순서 번호

  • Stream Identifier (SI) : 스트림 식별자

  • Stream Sequence Number (SSN) : 스트림 순서 번호

Data chunk : SCTP의 데이터 단위

Data Chunk

  • TSN : Data Chunk의 고유 순서 번호이다.
  • SI : 스트림의 번호
  • SSN : 스트림안에서의 고유 순서번호

SCTP packet

SCTP 패킷에는 필수 일반 헤더와 chunk라고하는 블록 집합이 있다.

  • control chunk : 여러 컨트롤과 결합(Association) 유지
  • data chunk : data를 옮기는 단위

결합(Association)

SCTP에서의 연결을 결합(Association)이라 부른다.

  • four-way handshake
  • COOKIE ECHO 나 COOKIE ACK chunk로 통신

결합 종료(Association termination)

  • TCP의 half-close를 허용하지 않음.

Flow Control

rwnd와 cwnd를 사용.

Receiver Site

  1. 데이터 청크 수신시, 버퍼의 끝에 저장하고 winSize에서 청크 크기(바이트) 를 뺀다. 청크의 TSN 번호는 cumTSN 변수에 저장

  2. 프로세스가청크를읽어가면버퍼에서제거하고제거된청크의크기를 winSize에 더한다.

  3. SACK를송신할때,lastACK가cumTSN보다작으면cumTSN과동일한 누적된 TSN 번호를 가진 SACK를 보낸다.

Sender Site

  1. curTSN의 데이터 크기가 rwnd – inTransit 보다 작거나 동일하면 전송 가능. 청크를 전송한 후 curTSN 값은 1 증가하고 다음 청크를 가리킴. inTransit의 값은 전송된 청크의 데이터만큼(바이트) 증가
  2. SACK가 수신되면 SACK의 누적된 TSN 값보다 작거나 같은 값을 가진 청크들은 버퍼에서 제거되고 inTransit 값은 제거된 청크의 크기만큼 감소. rwnd 값은 SACK에 공지된 값으로 갱신.

Error Control

SCTP는 TCP처럼 신뢰적인 전송층 프로토콜이다.

SACK chunk를 사용해 수신 버퍼의 상태를 송신자에게 보고한다.

  • 송신측은 두가지 큐를 가지고 있음.(큐, 재전송 큐)
  • 재전송 큐는 우선순위를 갖음

Chunk의 생성 규칙

  1. 데이터 청크를 전송할 때 SACK 청크를 포함하여야 한다.

  2. 수신부에서 전송할 데이터가 없으면 지정된 시간(500ms) 이내에

    SACK 청크를 보내야 한다.

  3. 수신부는 최소 한 개의 SACK 청크를 전송해야 한다.

  4. 순서에 어긋난 데이터 청크를 수신하면 즉시 SACK 청크를

    전송한다.

  5. 중복된 데이터 청크를 수신하면 즉시 SACK 청크를 전송한다.

김땡땡's blog

김땡땡's blog

김땡땡