Qual é o tamanho mínimo de um pacote TCP

11

Um post aqui:

http://blogs.adobe.com/dreamweaver/2011/02/optimal-css-tiled-background-image-size.html

afirma que "O menor download que os navegadores podem fazer é de 1 KB."

Isso ocorre devido ao tamanho mínimo de um pacote na rede? Se não, qual é a razão disso (se é realmente verdade)?

Andy Hume
fonte
2
Atenha-se aos termos padrão se quiser evitar confusão. "Pacote" é um termo no nível de IP. Você diz "pacote IP", "pacote TCP" e "pacote Ethernet".
vtest
A frase que você cita ("O menor download que os navegadores podem fazer é de 1K bytes.") Certamente não é verdadeira - não há tamanho mínimo de download; e enquanto não é um tamanho de pacote mínimo TCP / IP (como explicado por @ DMA57361), ele certamente não é de 1 KB.
Piskvor saiu do prédio em

Respostas:

20

Pacote é um termo ambíguo aqui porque às vezes é mal utilizado para se referir a diferentes elementos para sua transmissão. Vamos ver em que seus dados estão agrupados e você entenderá o que quero dizer e esperamos obter a resposta que você queria:


Vamos supor que você esteja enviando 1 byte de dados 1 pela Internet, no modelo TCP / IP .

Os dados iniciam no nível do aplicativo e precisam ser agrupados em cabeçalhos para os níveis mais baixos, para que possam ser transmitidos.

Primeiro, esses dados são agrupados em um segmento TCP , que adiciona um cabeçalho de 20 bytes (tamanho mínimo agora 21 bytes).
Isso nos coloca no nível de transporte.

Em seguida, ele é empacotado em um pacote IP , que adiciona outro cabeçalho de 20 bytes (tamanho mínimo agora 41 bytes).
Agora estamos no nível da internet.
Observe que esse agrupamento é alterado sempre que um novo roteador encaminha seus dados para uma nova sub-rede.

Isso está envolvido em um quadro de link de algum tipo - cujo tamanho do cabeçalho e rodapé varia dependendo do tipo de quadro usado, que depende do tipo de link que está sendo usado.
Isso está no nível do link.
Esse empacotamento é alterado sempre que a unidade é transmitida entre duas entidades.

Finalmente, é a transmissão física (por exemplo, sinais elétricos em um cabo, ondas de rádio etc.).

Aqui estão algumas imagens informativas disponíveis na página do modelo TCP / IP da Wikipedia que explicam visualmente o que está acontecendo:


Encapsulamento de dados usando UDP / IP


Conexão via camadas no modelo TCP / IP


1. Acho que você pode enviar 0 bytes ... mas não verificou isso. Na verdade, eu também não verifiquei se é permitido 1 byte, mas ei.

DMA57361
fonte
4

Isso está incorreto, não há tamanho mínimo para um download. Você pode verificar isso criando um pequeno arquivo em seu servidor da Web e usando o wireshark para monitorar o tráfego da rede ao baixar esse arquivo.

O tamanho mínimo de um pacote Ethernet padrão é de 64 bytes.

shapr
fonte
3

Aparentemente, a postagem do blog que você está citando está incorreta. Não há "tamanho mínimo de download" para HTTP. (E sua teoria sobre tamanhos mínimos de pacotes também está incorreta.)

No entanto, há um grão de verdade nisso. E isso é, se o tamanho do arquivo que você está baixando for pequeno o suficiente, a mensagem de resposta HTTP (consistindo no arquivo e nos cabeçalhos de resposta HTTP) caberá em um único pacote de rede. Se isso acontecer, é provável que o navegador obtenha o arquivo mais rapidamente do que se fosse necessário dois ou mais pacotes para enviar a resposta.

(Com um pacote na resposta, há menos chances de que um pacote seja descartado e precise ser reenviado, e uma chance maior de a janela de controle de fluxo TCP / IP não adicionar atrasos extras de ida e volta para o reconhecimento de pacotes. )

O tamanho máximo típico de um pacote enviado / recebido (o MTU) é de 1500 bytes para ethernet. Quando você considera as despesas gerais de IP e TCP e o tamanho de um cabeçalho de resposta HTTP típico, isso pode deixar ~ 1K para os dados do arquivo no primeiro pacote de uma resposta. Daí o grão de verdade no comentário do blogueiro.

Stephen C
fonte
Isso seria correto - se você estivesse baixando apenas essa imagem, e não, digamos, uma página da Web e seus recursos associados (imagens, JS, CSS) - nesse caso, você está usando keepalives e pipelining para vários recursos de qualquer maneira, então o TCP as despesas gerais e o tamanho do pacote são muito menos relevantes. Você está certo neste caso específico (baixando apenas uma imagem), mas com que frequência isso acontece? Parece que o blogueiro está preso em 1999, onde cada solicitação HTTP precisava de sua própria conexão TCP.
Piskvor saiu do prédio em 08/02/11
2

É pior do que você pensa.

O carregamento lento da página ocorre porque o navegador está tendo problemas para renderizar o pixel 1x1 800000 vezes (por exemplo, para uma janela do navegador configurada para 1000x800). Muitos anos atrás, talvez em 1999, li um artigo em algum lugar que prescrevia 16x16 como sendo o "mais rápido" x o menor para ladrilhos. Obviamente, a renderização pode ser diferente agora.

Se você ler a postagem do blog, a reclamação é realmente sobre o carregamento lento da página. Download não lento. Não tem nada a ver com pacotes, embora tenha sido uma discussão interessante.

Portanto, talvez a pergunta deva ser reformulada.

mockman
fonte
Nesse caso, talvez eu tenha entendido mal a postagem do blog por inteiro - pensei que o núcleo está nesta frase: "O menor download que os navegadores podem fazer é de 1K bytes [e, portanto, ajuste o tamanho da imagem para 1K]", o que Eu li como "... porque você está transmitindo 1K bytes de qualquer maneira, não importa que sua imagem tenha apenas 50 bytes" (o que é um absurdo óbvio). O problema aqui pode estar usando " size" tanto para dimensões de pixel quanto para contagem de bytes, e combinando-as. Sua explicação faz sentido, mas é irrelevante para a contagem de bytes da imagem (ao contrário do que o blog diz).
Piskvor saiu do prédio em
Depois de reler a postagem do blog, ele parece se desviar do caminho, pois o terceiro parágrafo é incoerente.
mockman
Depois de reler o seu comentário ... Seu objetivo é abordar o problema levantado no parágrafo de abertura. No entanto, ele atribui erroneamente esse problema aos tamanhos dos pacotes e passa o restante do post nele. Minha resposta explicou o motivo do carregamento lento da página. Como outros já apontaram, as características dos pacotes não são a causa.
mockman