BroadNet
SIGTRANTransporte

SCTP: Stream Control Transmission Protocol

Atualizado em 4 min de leituraBaseado em padrões
Resposta direta

O SCTP (RFC 4960) é um transporte fiável, orientado a mensagens, desenhado para sinalização. Ao contrário do fluxo de bytes único do TCP, entrega mensagens discretas sobre vários streams independentes (evitando o head-of-line blocking) e suporta multi-homing — vários endereços IP por ponto terminal para failover de caminho automático. O SIGTRAN usa-o para transportar SS7 sobre IP.

§01

Porquê SCTP em vez de TCP

A sinalização SS7 precisa de entrega fiável, em sequência e de baixa latência com failover rápido — requisitos que o TCP só satisfaz parcialmente. O TCP é um fluxo de bytes único, pelo que um segmento perdido bloqueia todos os bytes posteriores até ser retransmitido (head-of-line blocking), e uma ligação TCP está ligada a um par de endereços IP, pelo que uma falha de caminho a quebra. O SCTP foi desenhado para corrigir ambos: entrega mensagens independentes sobre vários streams e liga uma associação a vários endereços para failover transparente. Também resiste a ataques SYN-flood com um handshake de quatro vias.

SCTP vs TCP
PropriedadeTCPSCTP
Modelo de dadosFluxo de bytesOrientado a mensagens (preserva limites)
FluxosUmMuitos streams independentes por associação
Bloqueio de frente de filaAo longo de toda a conexãoRestrito a um único stream
Endereçamento de endpointsUm único par IPMulti-homed (vários IPs por endpoint)
Handshake3 vias (exposto a inundação SYN)4 vias com cookie assinado
Opções de entregaSomente ordenadoOrdenado ou não ordenado por mensagem
§02

Multi-streaming

Uma associação SCTP transporta vários streams lógicos, numerados por Stream Identifier. Cada stream é ordenado independentemente usando um Stream Sequence Number, enquanto um único Transmission Sequence Number (TSN) governa a entrega fiável em toda a associação. O efeito é que uma perda num stream não bloqueia os outros — uma mensagem presa para um destino não bloqueia a sinalização para outro. As aplicações também podem enviar mensagens sem ordenação quando o sequenciamento não é necessário, cortando ainda mais a latência.

§03

Multi-homing e failover

Um ponto terminal SCTP pode ligar vários endereços IP — tipicamente em caminhos de rede separados. Um endereço é o caminho primário; os outros são alternativos. O SCTP monitoriza continuamente cada endereço de destino com chunks HEARTBEAT e, se o caminho primário falhar, retransmite num alternativo sem desfazer a associação. Isto dá às ligações de sinalização uma resiliência de nível operador sobre IP que uma ligação TCP single-homed não consegue, e é uma razão de destaque pela qual o SIGTRAN escolheu o SCTP.

§04

O formato de pacote baseado em chunks

Um pacote SCTP tem um cabeçalho comum de 12 bytes — portas de origem e destino, uma Verification Tag de 32 bits que protege a associação e uma soma de verificação CRC-32c — seguido de um ou mais chunks. Os chunks são autodescritivos (type, flags, length, value) e vários podem ser agrupados num pacote. Os control chunks estabelecem e gerem a associação; os DATA chunks transportam mensagens de utilizador. Esta estrutura permite ao SCTP confirmar, fazer heartbeat e transportar dados de forma eficiente no mesmo pacote.

Estrutura de pacote SCTPtext
Common header (12 bytes):
  Source port (2)  Destination port (2)
  Verification Tag (4)   Checksum CRC-32c (4)
Then 1..n chunks, each:
  Type (1)  Flags (1)  Length (2)  Value (variable)
e.g.  [ DATA chunk (TSN, Stream ID, SSN, payload) ] [ SACK chunk ]
§05

Tipos de chunk e estabelecimento de associação

Uma associação é estabelecida com um handshake de quatro vias — INIT, INIT ACK (transportando um state cookie assinado), COOKIE ECHO, COOKIE ACK — que permite ao servidor manter-se sem estado até o cookie ser devolvido, derrotando ataques SYN-flood. Os dados fluem em DATA chunks confirmados por SACK. HEARTBEAT/HEARTBEAT ACK sondam caminhos inativos. A associação é fechada graciosamente com SHUTDOWN ou abruptamente com ABORT.

Tipos de chunk SCTP comuns
TipoFragmentoFinalidade
0DATATransportar uma mensagem do utilizador (TSN, ID do fluxo, SSN, carga útil)
1 / 2INIT / INIT ACKIniciar associação; INIT ACK carrega o cookie de estado
3SACKConfirmação seletiva de DATA recebidos
4 / 5HEARTBEAT / HEARTBEAT ACKVerificar a acessibilidade de um endereço de destino
6ABORTFechamento anormal e imediato da associação
7 / 8SHUTDOWN / SHUTDOWN ACKEncerramento ordenado
10 / 11COOKIE ECHO / COOKIE ACKConcluir o handshake de 4 vias
Perguntas frequentes

Perguntas frequentes

Qual é a principal vantagem do SCTP sobre o TCP?

Duas coisas: multi-streaming, para que um pacote perdido num stream não bloqueie os outros (sem head-of-line blocking em toda a ligação), e multi-homing, para que um ponto terminal possa usar vários endereços IP e fazer failover automático quando um caminho cai. Ambas importam muito para a fiabilidade da sinalização.

O que é o multi-homing do SCTP?

O multi-homing permite a uma única associação SCTP ligar vários endereços IP por ponto terminal. Um é o caminho primário e os restantes são alternativos, monitorizados por heartbeats. Se o caminho primário falhar, o SCTP retransmite num alternativo sem quebrar a associação — redundância de caminho embutida no transporte.

O que é um chunk SCTP?

Um chunk é uma unidade autodescritiva dentro de um pacote SCTP, com um type, flags, length e value. Os DATA chunks transportam mensagens de utilizador; os control chunks (INIT, SACK, HEARTBEAT, SHUTDOWN e outros) gerem a associação. Vários chunks podem ser agrupados num pacote.

Porque é que o SCTP usa um handshake de quatro vias?

O passo extra permite ao respondente manter-se sem estado até receber de volta um state cookie assinado (no COOKIE ECHO). Como nenhum estado de associação é alocado até o cookie regressar, o SCTP resiste a ataques de exaustão de recursos do estilo SYN-flood que afetam o handshake de três vias do TCP.

O que é a Verification Tag no SCTP?

Um valor de 32 bits no cabeçalho comum, trocado durante o estabelecimento da associação, que ambos os pontos terminais têm de incluir em cada pacote. Valida que um pacote pertence à associação atual, protegendo contra pacotes obsoletos e ataques de injeção às cegas.

Referências

Especificações de origem

Os padrões publicados nos quais esta página se baseia. Abre num novo separador.

BNMantido pela equipa de engenharia BroadNet·Mensagens de nível de operadora desde 2003
Coloque-o no fio.

Construa com uma vinculação SMPP real e uma API REST.

Solicite acesso de teste com chaves de teste reais: envie primeiro para o seu próprio número verificado e, em seguida, passe para o ambiente de produção em mais de 200 países assim que a sua identidade de remetente e rotas forem aprovadas.