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.
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.
| Propriedade | TCP | SCTP |
|---|---|---|
| Modelo de dados | Fluxo de bytes | Orientado a mensagens (preserva limites) |
| Fluxos | Um | Muitos streams independentes por associação |
| Bloqueio de frente de fila | Ao longo de toda a conexão | Restrito a um único stream |
| Endereçamento de endpoints | Um único par IP | Multi-homed (vários IPs por endpoint) |
| Handshake | 3 vias (exposto a inundação SYN) | 4 vias com cookie assinado |
| Opções de entrega | Somente ordenado | Ordenado ou não ordenado por mensagem |
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.
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.
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.
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 ]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.
| Tipo | Fragmento | Finalidade |
|---|---|---|
| 0 | DATA | Transportar uma mensagem do utilizador (TSN, ID do fluxo, SSN, carga útil) |
| 1 / 2 | INIT / INIT ACK | Iniciar associação; INIT ACK carrega o cookie de estado |
| 3 | SACK | Confirmação seletiva de DATA recebidos |
| 4 / 5 | HEARTBEAT / HEARTBEAT ACK | Verificar a acessibilidade de um endereço de destino |
| 6 | ABORT | Fechamento anormal e imediato da associação |
| 7 / 8 | SHUTDOWN / SHUTDOWN ACK | Encerramento ordenado |
| 10 / 11 | COOKIE ECHO / COOKIE ACK | Concluir o handshake de 4 vias |
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.
Especificações de origem
Os padrões publicados nos quais esta página se baseia. Abre num novo separador.