Em que circunstâncias o desempenho do TCP sobre TCP é significativamente pior que o TCP sozinho (2014)?

25

Muitos administradores continuam perpetuando - no ServerFault e em outros lugares - quão ruim é uma idéia de TCP sobre TCP, por exemplo, em VPNs. Que mesmo a menor perda de pacotes fará com que se sofra uma degradação pelo menos grave da taxa de transferência, se não o TCP, e que o TCP sobre TCP deve, portanto, ser estritamente evitado. E isso provavelmente já foi verdade, por exemplo, 2001, quando este artigo foi escrito e ainda é mencionado.

Mas desde então, vimos grandes avanços em tecnologia e protocolos. Atualmente, temos o 'ACK seletivo' implementado em quase todos os lugares, e a lei de Moore nos deu muito mais memória, e com isso vieram grandes buffers TCP otimizados para uplinks de Gbit. Atualmente, a perda de pacotes é muito menos problemática nos links que não são de rádio. Tudo isso deve aliviar significativamente o problema de TCP sobre TCP, não deveria?

Observe que existem cenários do mundo real em que, por exemplo, as VPNs baseadas em TCP são mais fáceis de implementar e operar do que as baseadas em UDP / ESP (veja mais abaixo). Portanto, minha pergunta:

Em que circunstâncias (perda e latência de pacotes de link) o TCP sobre TCP apresenta desempenho significativamente pior que o TCP sozinho, assumindo o suporte ao SACK e os buffers TCP de tamanho decente nas duas extremidades?

Seria ótimo ver algumas medidas que mostram as correlações entre perda / latência de pacotes (conexão externa) e taxa de transferência / jitter (conexão interna) - para TCP sobre TCP e somente para TCP. Encontrei este artigo interessante , mas parece estar preocupado apenas com a latência e não com a perda de pacotes (externos).

Além disso: existem configurações recomendadas (por exemplo, opções de TCP, configurações de buffer, redução de MTU / MSS, etc.) para reduzir a diferença de desempenho entre TCP e TCP sobre TCP?


Atualização: Nossa lógica.

Essa pergunta ainda é muito relevante em alguns cenários do mundo real. Por exemplo, implantamos dispositivos incorporados em grandes edifícios que coletam dados do sensor e os alimentam em nossa plataforma via VPN. O problema que enfrentamos são firewalls e uplinks configurados incorretamente que não estão sob nosso controle, combinados com relutantes departamentos de TI. Veja um exemplo detalhado discutido aqui .

Em muitos desses casos, mudar de VPN não TCP para VPN baseada em TCP (muito fácil se você usar o OpenVPN como nós) é uma solução rápida que nos permite evitar batalhas difíceis de apontar com o dedo. Por exemplo, geralmente a porta TCP 443 geralmente é permitida (pelo menos via proxy), ou podemos superar os problemas do Path-MTU simplesmente reduzindo a opção MSS do TCP.

Seria bom saber em que circunstâncias uma VPN baseada em TCP pode ser considerada uma alternativa viável, para que possamos tomar uma decisão informada superando os prós e os contras de qualquer opção. Por exemplo, sabemos que o TCP-VPN é bom para nós em links que não são de rádio, mas temos uma boa parte de clientes remotos em uplinks 3G com perda significativa de pacotes e alta latência - como um TCP-VPN funcionaria lá?

Eu tentei melhorar o título e a questão central de acordo; eu espero que faça sentido.

Nils Toedtmann
fonte
Você notará rapidamente a diferença entre TCP sobre TCP vs UDP (etc) sobre TCP VPNs ao usá-los para sessões interativas, por exemplo, ssh. Você perceberá a latência, se não a sessão cair. YMMV, TIAS
Daniel S. Sterling
Somente se a conexão 'externa' estiver sujeita a um certo grau de latência ou perda de pacotes em primeiro lugar. Eu tenho muitas sessões SSH por VPNs baseadas em TCP e muitas funcionam muito bem sem atraso perceptível.
Nils Toedtmann
Na verdade - funciona quando você tem uma boa rede. Se você nem sempre têm uma boa rede, ele nem sempre funciona
Daniel S. Sterling
O que é uma boa rede? Se tudo estiver funcionando em uma única região da AWS, a rede é boa o suficiente?
rica Remer

Respostas:

7

Eu acho que é realmente mais debatido do que você faz parecer. Há uma FAQ relacionada ao Linux que é reconhecidamente antiga: http://www.tldp.org/HOWTO/VPN-HOWTO/

Eu usei um PPP-sobre-ssh-sobre-ADSL por mais de 12 anos, e nunca me falhou, então, pela minha experiência, ousaria dizer que os pessimistas provavelmente exageram. TCP sobre TCP é provavelmente uma má idéia com conexões RTC, links de satélite e outros links com taxa de transferência muito baixa ou atrasos muito longos, mas para a maioria dos usos isso simplesmente funciona .

Agora a verdadeira questão é: por que você iria usar TCP através do TCP em tudo ? Quando configurei meu PPP-over-ssh, foi em grande parte porque naquela época era de longe a maneira mais fácil de criar uma VPN rápida; então eu tenho usado desde que por pura preguiça.

Atualmente, existem ferramentas práticas e fáceis de configurar, como VPNs OpenVPN e IPSec, para que você nunca precise incomodá-lo com esse problema de TCP sobre TCP.

wazoox
fonte
1
Há situações em que o TCP sobre TCP é uma correção simples para vários problemas de rede. Eu adicionei uma seção elaborando nossa lógica.
Nils Toedtmann
Espero uma resposta mais específica sobre as condições sob as quais o TCP sobre TCP se torna um problema. Um de nossos casos de uso são links de rádio com graus variados de latência e perda de pacotes.
Nils Toedtmann
TCP sobre TCP sobre TCP (o tráfego TCP em um TCP OpenVPN acessado através de um encaminhamento TCP SSH) me custou cerca de 5 Mb / s. Isso nunca me falhou, mas eu não recomendaria apenas porque é um enorme desperdício.
Sirenes