Características de TCP/IP

O TCP/IP tem características que permitem que o protocolo opere conforme os requisitos de implementação padronizados determinam. Essas características podem ser combinadas com opções de desenvolvimento que resultam em baixo desempenho. O impacto que essas características de TCP/IP têm em um aplicativo depende se o aplicativo é transacional ou de streaming.

Os aplicativos transacionais são afetados pela sobrecarga necessária para o estabelecimento e o encerramento da conexão. Por exemplo, cada vez que uma conexão é estabelecida em uma rede Ethernet, três pacotes de aproximadamente 60 bytes cada devem ser enviados e aproximadamente um RTT é necessário para a troca. Quando ocorre o encerramento de uma conexão, quatro pacotes são trocados. Isso é para cada conexão; um aplicativo que abre e fecha conexões geralmente incorre nessa sobrecarga em cada ocorrência.

Outro aspecto do TCP/IP é o início lento, que ocorre sempre que uma conexão é estabelecida. O início lento é um limite artificial no número de segmentos de dados que podem ser enviados antes que a confirmação desses segmentos seja recebida. O início lento foi projetado para limitar o congestionamento da rede. Quando uma conexão por Ethernet é estabelecida, independentemente do tamanho da janela do receptor, uma transmissão de 4 KB pode levar até 3-4 RTT devido ao início lento.

Uma otimização de TCP/IP chamada algoritmo Nagle também pode limitar a velocidade de transferência de dados em uma conexão. O Algoritmo Nagle foi projetado para reduzir a sobrecarga de protocolo para aplicativos que enviam pequenas quantidades de dados, como Telnet, que envia um único caractere por vez. Em vez de enviar imediatamente um pacote com muitos cabeçalhos e poucos dados, a pilha aguarda mais dados do aplicativo, ou uma confirmação, antes de continuar.

As confirmações atrasadas, comumente conhecidas como ACK atrasadas, também são projetadas em TCP/IP para permitir um retorno mais eficiente de confirmações quando os dados de retorno são recebidos do aplicativo do lado receptor. Infelizmente, se esses dados não estiverem próximos e o lado de envio estiver aguardando uma confirmação, poderão ocorrer atrasos de aproximadamente 200 milissegundos por envio.

Quando uma conexão TCP é fechada, os recursos de conexão no nó que iniciou o fechamento são colocados em um estado de espera, chamado TIME-WAIT, para proteger contra dados corrompidos se os pacotes duplicados permanecerem na rede. Isso garante que ambas as extremidades sejam concluídas com a conexão. Isso pode causar esgotamento dos recursos necessários por conexão, como RAM e portas, quando aplicativos abrem e fecham conexões com frequência.

Além de serem afetados pelo ACK atrasado e outros esquemas de prevenção de congestionamento, os aplicativos de streaming também podem ser afetados por um tamanho de janela de recebimento padrão muito pequeno na extremidade receptora.

Comportamento do aplicativo

Aplicativos windows sockets de alto desempenho

Algoritmo Nagle