Como um tamanho de janela TCP pode ser maior que o tamanho máximo de um pacote Ethernet?


8

Eu sei que os tamanhos das janelas TCP podem ser redimensionados para mais de 64 KB, mas olhando para um datagrama de pacote Ethernet, como este:

Modelo de Camada de Rede

parece que um pacote da camada 2 tem tamanho limitado e é muito menor que isso. Como o ACKing funciona na camada TCP se uma única solicitação TCP exige que várias solicitações de rede sejam montadas em um receptor?


2
Eu acho que você está confundindo a janela com o MSS (tamanho máximo do segmento).
— Ron Maupin

Estou @RonMaupin (na verdade eu não sabia que havia uma diferença)
— Zach Smith

Respostas:


24

O tamanho da janela TCP geralmente é independente do tamanho máximo do segmento, que depende da unidade máxima de transferência, que por sua vez depende do tamanho máximo do quadro .

Vamos começar de baixo.

O tamanho máximo de quadro é o maior quadro que uma rede (segmento) pode transportar. Para Ethernet, são 1518 bytes por definição.

O quadro encapsula um pacote IP, portanto, o maior pacote - a unidade máxima de transferência MTU - é o tamanho máximo do quadro menos a sobrecarga do quadro. Para Ethernet, isso é 1518 - 18 = 1500 bytes.

O pacote IP encapsula um segmento TCP; portanto, o tamanho máximo do segmento MSS é o MTU menos a sobrecarga de IP menos a sobrecarga de TCP (o MSS não inclui o cabeçalho TCP). Para Ethernet e TCP sobre IPv4 sem opções, isso é 1500 - 20 (sobrecarga de IPv4) - 20 (sobrecarga de TCP)) = 1460 bytes.

Agora, o TCP é um protocolo de transporte que se apresenta como um soquete de fluxo para o aplicativo. Isso significa que um aplicativo pode transmitir qualquer quantidade de dados arbitrariamente dimensionada nesse soquete. Para isso, o TCP divide o fluxo de dados nos referidos segmentos (de 0 a bytes MSS de comprimento {1}), transmite cada segmento por IP e os reúne novamente no destino.

Os segmentos TCP são reconhecidos pelo destino para garantir a entrega. Imagine que o nó de origem envie apenas um segmento, aguarde confirmação e, em seguida, envie o próximo segmento. Independentemente da largura de banda real, a taxa de transferência dessa conexão TCP seria limitada pelo tempo de ida e volta (RTT, o tempo necessário para um pacote viajar da origem ao destino e voltar novamente).

Portanto, se você tivesse uma conexão de 1 Gbit / s entre dois nós com um RTT de 10 ms, seria possível enviar 1.460 bytes a cada 10 ms ou 146 kB / s. Isso não é muito satisfatório.

O TCP, portanto, usa uma janela de envio - vários segmentos que podem estar "em vôo" ao mesmo tempo, sendo enviados e aguardando confirmação. Também é chamada de janela deslizante , pois avança cada vez que o segmento no início da janela é reconhecido, acionando o envio do próximo segmento para o qual a janela avançou. Dessa forma, o tamanho do segmento não importa. Com uma janela tradicionalmente de 64 KiB, podemos ter essa quantidade em voo e, portanto, transportar 64 KiB a cada 10 ms = 6,5 MB / s. Melhor, mas ainda não muito satisfatório para uma conexão de gigabit.

O TCP moderno usa a opção de escala de janela que pode aumentar exponencialmente a janela de envio para até 2 GiB, proporcionando algum crescimento futuro.

Mas por que todos os dados não são enviados de uma só vez e por que precisamos dessa janela de envio? Se você enviar tudo o mais rápido possível - localmente - e houver (muito provavelmente) um link mais lento em algum lugar no caminho para o destino, quantidades significativas de dados precisarão ser enfileiradas. Nenhum switch ou roteador pode armazenar em buffer mais do que alguns MB (se houver), portanto, o tráfego em excesso precisaria ser eliminado. Na falta de reconhecimento, seria necessário reenviar, o excesso sendo descartado novamente. Isso seria altamente ineficiente e congestionaria seriamente a rede. O TCP lida com esse problema com seu controle de congestionamento, ajustando o tamanho da janela de acordo com a largura de banda efetiva e o tempo atual de ida e volta em um algoritmo complexo.

{1} Segmentos vazios podem ser usados ​​para impedir o tempo limite da conexão usando a opção keepalive . Thx Deduplicator


11
Bem, os pacotes tcp não podem ter carga útil, se forem apenas para manutenção de tcp.
— Deduplicator

2
@Duplicador Absolutamente - O TCP é muito mais complexo do que o descrito aqui.
— Zac67 22/1018

3
Que explicação excelente. Um caso relacionado é o local em que a RTT é muito grande, mesmo que a taxa de dados seja relativamente lenta, como é necessário para a Internet interplanetária. Cerf dá uma boa palestra sobre isso. A janela interplanetária envio é presciently o elemento central das conto do Sr. Asimov "Meu Filho, o físico" (também forte em 1962 estereótipos de género.)
— jonathanjo

Ótima resposta. Desejo que você continue explicando as coisas do TCP em contexto com uma abordagem prática. ou você tem um link onde você os explicou
— Terminator

@Terminator Já existem respostas muito boas para as perguntas sobre TCP aqui, basta conferir a categoria ou procurar as palavras-chave.
— `` Zac67
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.