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.
fonte
Respostas:
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.
fonte