O que é

SCTP (Stream Control Transmission Protocol) é um protocolo da camada de transporte do Modelo OSI, equiparável ao TCP e UDP. É um protocolo de transporte orientado a mensagem, confiável, com suporte a multihoming e que roda sobre a camada IP.

Objetivos

O estudo sobre SCTP é importante porque ele é o protocolo de transporte usado na comunicação de dados (binários) entre a RNC e a Node B na estrutura do UTRAN (definição) do Open 3G / LTE. O objetivo principal é a implementação de um exemplo em C utilizando o protocolo SCTP.

Detalhamento Técnico

Assim como o TCP, o SCTP é um protocolo confiável, orientado a conexão com garantia de entrega e controle de congestionamento. Ao contrário do TCP, SCTP também fornece:

  • Construção de mensagem
  • Entrega de mensagens ordenadas ou não
  • Multi-streaming
  • Multi-homing


Existem 2 estilos na implementação do SCTP:

  • Estilo um para um: um único descritor de soquete é criado. Não é possível aproveitar todas as características do SCTP com esse estilo
  • Estilo um para muitos: um único descritor de soquete é criado e várias associações SCTP são vinculadas simultaneamente a esse descritor. Os exemplos disponíveis sempre usam esse estilo, pois permite explorar ao máximo as características do SCTP.


Principais Funções C relacionadas ao SCTP

Detalhamento das principais funções utilizadas e seus respectivos headers.


Função socket

#include <sys/socket.h>

int socket(int family, int type, int protocol) ;

Retorna: descritor não-negativo se OK, -1 em erro


Função que deve ser chamada inicialmente para realizar E/S de rede, especificando o protocolo de comunicação desejado.

Uso: socket(PF_INET, SOCK_SEQPACKET, IPPROTO_SCTP)

parâmetros:

  1. family PF_INET: família de protocolos internet (IP, TCP/IP ou UDP/IP)
  2. type SOCK_SEQPACKET: tipo de soquete de pacote sequenciado
  3. protocol IPPROTO_SCTP: protocolo de transporte SCTP



Função bind

#include <sys/socket.h>

int bind (int sockfd, const struct sockaddr *myaddr, socklen_t addrlen) ;

Retorna: 0 se OK, -1 em erro

Atribui um endereço de protocolo local a um soquete. Endereço de protocolo é a combinação de um endereço IPv4 ou IPv6 com um número de porta.

Uso: bind(retval, (struct sockaddr *)&laddr, sizeof(laddr)

parâmetros:

  1. retval: descritor de soquete ao qual será atribuído o endereço de protocolo
  2. laddr: ponteiro para um endereço específico de protocolo
  3. sizeof(laddr): tamanho da estrutura do segundo parâmetro



Função listen

#include <sys/socket.h>

int listen (int sockfd, int backlog) ;

Retorna: 1 se OK, -1 em erro

Chamada pelo servidor. Realiza duas funções:

  • Quando um soquete é criado pela função socket, assume-se que é um soquete ativo. A função listen converte um soquete ativo para um soquete passivo indicando que o kernel deve aceitar solicitações de conexões entrantes.
  • O segundo argumento da função especifica o número máximo de conexões que o kernel deve enfileirar para esse soquete.

Uso: listen(sk, 1);

parâmetros:

  1. sk: referencia o soquete que ficará esperando por conexões
  2. 1: número máximo de conexões que o kernel deve enfileirar para esse soquete.



Função recvmsg



Pesquisadores

  • Natal Vieira de Souza Neto