Por que o SCTP não é muito usado / conhecido

190

Recentemente, verifiquei o livro "UNIX Network Programming, Vol. 1", de Richards Stevens, e descobri que há um terceiro padrão de camada de transporte além do TCP e UDP: SCTP .

Resumo: O SCTP é um protocolo em nível de transporte controlado por mensagens como UDP, mas confiável como TCP. Aqui está uma breve introdução do IBM DeveloperWorks .

Sinceramente, nunca ouvi falar do SCTP antes. Não me lembro de ler sobre isso em nenhum livro sobre redes ou ouvir sobre isso nas aulas que eu havia frequentado. A leitura de outras perguntas sobre o stackoverflow que menciona o SCTP sugere que eu não estou sozinho com essa falta de conhecimento.

Por que o SCTP é tão desconhecido? Por que não é muito usado?

dmeister
fonte
4
O +1 nunca ouviu falar disso - obrigado.
22720 Robert Venables
1
Qualquer pessoa se preocupa em comparar o SCTP ao ZeroMQ (além de um ser um protocolo, o outro de uma biblioteca - veja-o como uma ferramenta para resolver problemas).
Emil Ivanov
Só estou curioso: o que há de errado / diferente em 01/03/2013? Por que tantos votos neste dia?
precisa saber é o seguinte
8
@meister: Porque eu te coloquei no Reddit . Saudações de Darmstadt.
Janus Troelsen
32
Por favor, não escreva 01/03/2013. Qualquer "1º de março de 2013", "1 de março de 2013", "1º de março de 13" .. é preferível. Apenas não escreva mês e dia do mês de uma maneira que possa ser mal interpretada.
Zecc

Respostas:

94

De fato, o SCTP é usado principalmente na área de telecomunicações. Tradicionalmente, os comutadores de telecomunicações usam o SS7 ( Sistema de sinalização nº 7 ) para interconectar diferentes entidades na rede de telecomunicações. Por exemplo - a base de dados de assinante (HLR) do provedor de telecomunicações, com um switch (MSC), o assinante também está conectado (MSC).

A área de telecomunicações está mudando para velocidades mais altas e ambiente mais acessível. Uma dessas mudanças é substituir o protocolo SS7 por um protocolo baseado em IP mais elegante, rápido e flexível.

A área de telecomunicações é muito conservadora. A rede SS7 é usada aqui há décadas. É uma rede muito confiável e fechada. Isso significa que um usuário comum não tem acesso a ele.

A rede IP, ao contrário, é aberta e não é confiável, e as telecomunicações não serão convertidas para ela se não suportar pelo menos a carga que o SS7 lida. É por isso que o SCTP foi desenvolvido. Tenta:

  • imitar todas as vantagens da rede SS7 acumulada ao longo das décadas.
  • criar um protocolo orientado a conexão melhor que o TCP em velocidade, segurança e redundância

Os últimos lançamentos do Linux já têm suporte a SCTP.

dimba
fonte
especificamente, você deve analisar a saída do grupo de trabalho "SIGTRAN" da IETF, que redigiu o mapeamento entre SS7 e SCTP.
Alnitak
22
Provavelmente, o principal motivo pelo qual o SCTP não é muito usado na Internet pública é que os gateways IPv4 / NAT residenciais precisam se tornar compatíveis com o SCTP para suportar associações de multiplexação entre vários pontos de extremidade privados simultâneos e hosts externos. Procure que o SCTP se torne mais útil assim que a transição do IPv6 começar a ganhar mais força.
James woodyatt
@jameswoodyatt existem implementações de biblioteca de SCTP sobre UDP. Ele resolve alguns dos problemas com roteadores de nível de consumidor.
user7610
1
Isso não responde à pergunta. A resposta de James contém mais informações do que a resposta realmente contém.
Ken afiada
@jameswoodyatt Os roteadores de nível de consumidor com os quais eu brinquei, todos têm suporte, mesmo alguns bem antigos. O problema é que ele não é exposto através da interface do usuário comum, portanto, você precisa fazer coisas horríveis no sistema para entrar onde pode configurá-lo. Algo de supervisão na minha opinião.
21718 Perkins
70

Temos implantado o SCTP em vários aplicativos agora e encontramos um problema significativo com o suporte ao SCTP em vários roteadores domésticos. Eles simplesmente não lidam com o SCTP corretamente. Acredito que este seja principalmente um problema de desempenho (a especificação do protocolo SCTP exige que somas de verificação para que todos os pacotes sejam recalculados e não apenas para cabeçalhos).

Como muitos outros protocolos promissores, o SCTP está tristemente morto na água até o D-link e o Netgear consertarem suas caixas NAT quebradas.

pehrs
fonte
7
Uau, eu não estava ciente dessa barreira de entrada. Você está completamente certo - consulte tools.ietf.org/html/draft-ietf-behave-sctpnat-05 para uma maneira proposta de contornar isso. Este é o terceiro conjunto de rascunhos da Internet sobre o mesmo tópico ...
Bwooce
Você parece bastante pessimista - pelo menos para roteadores domésticos. Supondo que os roteadores usados ​​em ambientes de produção profissional o suportem, o SCTP ainda parece muito útil. Existem muitos casos de uso em que as topologias de rede não saem das instalações do data center; nesse caso, o SCTP deve ser perfeito.
Eugene Beresovsky
4
@EugeneBeresovksy: Faz alguns anos que eu postei essa resposta. Minha impressão é que o SCTP não avançou significativamente desde então. Ainda é usado em algumas aplicações especializadas em ambientes controlados, mas raramente visto na natureza. Windows e Mac OS X ainda não possuem suporte SCTP pronto para uso. A falta de familiaridade e a fragilidade de um protocolo quebrado pela maioria dos firewalls e caixas NAT tornam as pessoas relutantes em usá-lo.
precisa
@pehrs Eu gostaria de usá-lo em um data center, para que não haja NATs envolvidos e firewalls, exceto os integrados ao sistema operacional. Em um ambiente de servidor Linux, espero que funcione. Mas mesmo usando o Windows, existem bibliotecas SCTP - e acredito sem precisar mexer no sistema operacional.
Eugene Beresovsky
Normalmente, o SCTP não está ativado no Linux devido à sua falta de adoção, mas mesmo no meu sistema Ubuntu Precise (antigo) ele está disponível como um módulo carregável. Fornecer um aplicativo que deseje usar o SCTP, mas que retornará ao TCP (por exemplo), é um problema semelhante ao empilhamento duplo, mas mais doloroso.
Ken afiada
55

O SCTP requer mais design dentro do aplicativo para obter o melhor uso dele. Existem mais opções do que o TCP, a API do tipo Sockets veio mais tarde e é jovem. No entanto, acho que a maioria das pessoas que toma um tempo para entendê-lo (e que conhecem as deficiências do TCP) o aprecia - é um protocolo bem projetado que se baseia em nossos ~ 30 anos de conhecimento sobre TCP e UDP.

Um dos aspectos que requer reflexão é o dos fluxos. Os fluxos fornecem (normalmente, acho que você pode desativá-lo) uma garantia de pedido dentro deles (como uma conexão TCP), mas pode haver vários fluxos por conexão SCTP. Se os dados do seu aplicativo puderem ser enviados por vários fluxos, evite o bloqueio do cabeçalho de linha onde o receptor passará fome devido a um pacote incorreto. Conversas efetivamente diferentes podem ser realizadas na mesma conexão sem impactar uma à outra.

Outra adição útil é a do suporte à hospedagem múltipla - uma conexão pode estar em várias interfaces nas duas extremidades e lida com falhas. Você pode emular isso no TCP, mas na camada de aplicação.

A pulsação adequada do link, que é a primeira coisa que qualquer aplicativo que usa TCP para implementações de conexões não transitórias, existe gratuitamente.

Meu resumo pessoal do SCTP é que ele não faz nada que você não poderia fazer de outra maneira (em TCP ou UDP) com suporte substancial a aplicativos. O que ele fornece é a capacidade de não ter que implementar esse código (mal) você mesmo.

Para sua informação, o SCTP é obrigatório como suportado para o Diâmetro (cf. RADIUS next gen). veja RFC 3588

   Os clientes de diâmetro DEVEM suportar TCP ou SCTP, enquanto os agentes e
   os servidores DEVEM suportar ambos. Versões futuras desta especificação PODEM
   mandato que os clientes suportam SCTP.
Bwooce
fonte
43

O SCTP não é muito conhecido e não é muito utilizado / implantado porque:

  • Generalizada: não amplamente integrada nas pilhas de TCP / IP (em 2013: ainda está faltando nativamente nos últimos Mac OSX e Windows)
  • Bibliotecas: poucas ligações de alto nível em idiomas fáceis de usar (Isenção de responsabilidade: sou mantenedor do pysctp , suporte a pilha fácil SCTP para Python)
  • NAT: não cruza muito bem o NAT (nada menos que 1% dos roteadores domésticos e empresariais da Internet fazem NAT no SCTP).
  • Popularidade: Nenhum aplicativo público em geral usa
  • Paradigma de programação: mudou um pouco: ainda é um soquete, mas você pode conectar muitos hosts a muitos hosts (multihoming), o datagrama é ordenado e confiável, erc ...
  • Complexidade: a pilha SCTP é complexa de implementar (devido a acima)
  • Concorrência: o TCP de caminhos múltiplos está chegando e deve atender às necessidades / capacidades de hospedagem múltipla, para que as pessoas evitem implementar o SCTP, se possível, aguardando o MTCP
  • Nicho: precisa que os preenchimentos de SCTP sejam muito peculiares (datagramas confiáveis ​​solicitados, multitransmissões) e não são necessários para muitas aplicações
  • Segurança: O SCTP evita os controles de segurança (alguns firewalls, a maioria dos IDSs, todos os DLPs, não aparecem no netstat, exceto o CentOS / Redhat / Fedora ...)
  • Capacidade de auditoria: algo como três empresas no mundo fazem rotineiramente auditorias de segurança SCTP (Isenção de responsabilidade: trabalho em uma delas)
  • Curva de aprendizado: Não há muito conjunto de ferramentas para jogar com o SCTP (verifique o excelente withsctp que combina muito bem com o netcat ou use socat)
  • Sob o capô: usado principalmente em telecomunicações e sempre que você envia SMS, começa a navegar na Internet em seu celular ou faz chamadas telefônicas, muitas vezes aciona mensagens que fluem sobre SCTP (SIGTRAN / SS7 com GSM / UMTS, diâmetro com LTE / IMS / RCS, S1AP / X2AP com LTE), então você realmente usa muito, mas nunca sabe sobre isso ;-)
Phil L.
fonte
14
Re: "Nicho / não é necessário para muitas aplicações". Os navegadores da Web se beneficiariam disso, consulte o HTTP2 e suas tentativas de implementar, além do TCP, parte do que o SCTP oferece gratuitamente. A maioria das técnicas de otimização de HTTP (spriting, sharding, inlining, concatenação) seria tornada (quase completamente - os cabeçalhos inúteis do HTTP1 permanecem sem solução) redundantes pelo SCTP. O mesmo vale para aplicativos que possuem um conjunto de conexões para permitir acesso simultâneo a um banco de dados ou a qualquer outro serviço. Em outras palavras: existem muitos aplicativos para alguns dos recursos do SCTP.
Eugene Beresovsky
4
"Nenhum aplicativo público em geral o usa": não é mais verdade, pois o SCTP é usado pelo WebRTC. "Segurança: o SCTP evita os controles de segurança" - isso é mais um problema dos controles de 'segurança'. Se evitar essas verificações, seria um protocolo maravilhoso para o malware permanecer sob o radar.
Maciej Piechotka 06/04
14

p1. O SCTP mapeado diretamente pelo IPv4 requer suporte nos gateways NAT, que nunca foram amplamente implantados em nenhum lugar, e sem ele o gateway NAT típico permitirá apenas que um host privado por endereço público use o SCTP por vez.

p2. O SCTP mapeado no UDP / IPv4 permite mais hosts privados por endereço público, mas os mapeamentos UDP nos gateways IPv4 / NAT são notoriamente difíceis de estabelecer e manter mantidos, devido ao fato de o UDP ser um transporte sem conexão sem nenhum estado explícito para o NAT rastrear .

p3 O SCTP mapeado diretamente sobre IPv6 requer ... bem ... IPv6. Você já tentou implantar o IPv6? Em caso afirmativo, você já tentou comprar um firewall IPv6? Ele suporta SCTP? Que tal um balanceador de carga? Um acelerador SSL?

p4 Por fim, grande parte da Internet está praticamente restrita ao que pode caber nas portas TCP 80 e 443, de modo que SCTP de qualquer tipo tende a perder por lá. Portanto, você vê esforços como o grupo de trabalho MPTCP na IETF.

James Woodyatt
fonte
"você tentou comprar um firewall IPv6? Ele suporta SCTP" - o habitual distribuído gratuitamente os iptables suporta muito bem . Eu não sou um cara de rede, então não posso dizer o resto.
Hi-Angel
12

Muitos de nós usaremos o SCTP em breve, pois ele é usado pelos canais de dados WebRTC para criar uma camada confiável do tipo TCP sobre o UDP - SCTP sobre DTLS sobre UDP: https://tools.ietf.org/html/draft-ietf -rtcweb-data-channel-13 # section-6

cjb
fonte
Esqueceu-se de mencionar que o foco principal do WebRTC é o fluxo combinado de vídeo e áudio. Não deve ser usado como retransmissão de mensagens. serviços turn / ice / stun são outra parte da tecnologia WebRTC executada em cima. Mas essas são as tecnologias que o WebRTC usa. Essas tecnologias não são WebRTC.
TamusJRoyce 1/08/19
6

Lendo a página da Wikipedia sobre SCTP, eu diria que o principal motivo é que o SCTP é um protocolo muito jovem (proposto em 2000) que atualmente não é suportado pelos sistemas operacionais convencionais ( Windows , OS X , Linux ).

Se "muito jovem" lhe parece inapropriado, pense no IPV6 : "em dezembro de 2008, apesar de marcar seu 10º aniversário como um protocolo Standards Track, o IPv6 estava apenas em sua infância em termos de implantação geral em todo o mundo".

IlDan
fonte
3
De acordo com o artigo da Wikipedia ao qual você vinculou, o SCTP é implementado no Linux, Solaris, FreeBSD, HP-UX e outros.
drrlvn 23/07/2009
O artigo vinculado agora diz também que é executado no OS X e Windows.
Dreister
3

O SCTP é amplamente utilizado na rede 4G LTE, em que o diâmetro é usado para AAA.

Lynne Patterson
fonte
2

Pode não ser bem conhecido, mas não é usado. Recentemente, houve um rascunho publicado no IETF sobre o uso do SCTP como um protocolo de camada de transporte para HTTP .

mkoeller
fonte
2
Quando você disse "não utilizado", pensei no uso real do protocolo. Mas, em seguida, você deu apenas um exemplo de rascunho de documento , que pode levar a um uso real no futuro.
Kissaki
2

Em referência a todos os comentários sobre roteadores comerciais quebrados ou sem suporte a SCTP, o problema é que o SCTP com NAT ainda está em forma de rascunho com a IETF. Portanto, não há especificação RFC para eles implementá-lo.

https://tools.ietf.org/html/draft-ietf-behave-sctpnat-09

Terry Bowling
fonte
-1

O Sctp nasce tarde demais e, para muitas situações, o TCP é suficiente.

Além disso, como eu sei, a maior parte do seu uso é na área de telecomunicações.

Sam Liao
fonte