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.