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:
- family PF_INET: família de protocolos internet (IP, TCP/IP ou UDP/IP)
- type SOCK_SEQPACKET: tipo de soquete de pacote sequenciado
- 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:
- retval: descritor de soquete ao qual será atribuído o endereço de protocolo
- laddr: ponteiro para um endereço específico de protocolo
- 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:
- sk: referencia o soquete que ficará esperando por conexões
- 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