Qual é o tamanho “in-the-wire” de um frame ethernet? 1518 ou 1542?

22

De acordo com a tabela aqui , ela diz que MTU = 1500 bytes e que a parte da carga útil é de 1500 a 42 bytes ou 1458 bytes (< - isso é realmente errado!). Agora, além disso, você precisa adicionar cabeçalhos IPv4 e UDP, que são 28 bytes (20 IP + 8 UDP). Isso deixa minha máxima mensagem de aplicação possível como 1430 bytes! Mas, ao procurar esse número na Internet, vejo 1472 em vez disso. Estou fazendo esse cálculo errado aqui?

Tudo que eu quero descobrir é a mensagem máxima do aplicativo que posso enviar através da rede sem o risco de fragmentação. Definitivamente não é 1500 porque isso inclui os cabeçalhos de quadro. Alguém pode ajudar?

A confusão é que o PAYLOAD pode realmente ser tão grande quanto 1500 bytes e esse é o MTU. Então, agora, qual é o tamanho do fio para uma carga útil de 1500? Daquela tabela, pode ter até 1542 bytes.

Assim, as mensagens máximas de aplicativo que posso enviar são 1472 (1500 - 20 (ip) - 8 (udp)) para um tamanho máximo de 1542. Surpreende-me como as coisas podem ficar tão complicadas quando são simples . E eu não tenho ideia de como alguém surgiu com o número 1518 se a tabela diz 1542.

    
por chrisapotek 28.08.2012 / 22:25

4 respostas

27

O diagrama na Wikipedia é horrível. Espero que o que estou prestes a escrever seja mais claro.

A carga máxima na Ethernet 802.3 é de 1500 bytes.
Esses são os dados que você está tentando enviar pela rede (e ao que a MTU está se referindo).% [payload] < - 1500 Bytes

A carga útil é encapsulada em um Ethernet Frame (que adiciona o MAC Origem / Destino, tag VLAN, Comprimento e soma de verificação CRC. Esse é um total de 22 bytes de "material" adicional
[SRC+DST+VLAN+LENGTH+[payload]+CRC] < - 1522 bytes

O Frame é transmitido através do fio - antes de sua placa ethernet fazer isso, ele basicamente se levanta e grita bem alto para ter certeza de que ninguém mais está usando o fio (CSMA / CD) - Este é o Preâmbulo / em> e Delimitador Start-of-Frame (SFD) - um adicional de 8 bytes, então agora temos: [Preamble+SFD+[Ethernet Frame]] < - 1530 Bytes

Finalmente, quando um transceptor ethernet é enviado enviando um quadro, é necessário que 802.3 transmita 12 bytes de silêncio ("Interframe Gap") antes que seja permitido enviar seu próximo quadro.
[Preamble+SFD+[Ethernet Frame]+Silence] < - 1542 bytes transmitido no fio.

O Preâmbulo, o SFD e o Interframe Gap não contam como parte do quadro. Eles são estrutura de suporte para o próprio protocolo Ethernet.

O MTU se aplica à carga útil - é a maior unidade de dados que você pode armazenar no pacote. Assim, um pacote ethernet com um MTU de 1500 bytes será na verdade um frame de 1522 bytes e 1542 bytes no fio (supondo que haja uma tag vLAN).

Portanto, a resposta à sua pergunta - Qual é o maior pacote que posso enviar através da Ethernet 802.3 sem fragmentação? - é 1500 bytes de dados de carga útil .

NO ENTANTO a camada ethernet pode não ser seu fator limitante. Para descobrir se algo ao longo do caminho está restringindo a MTU a ser menor que 1500 bytes de dados de carga útil, use um dos seguintes:

  • Windows: ping hostname -f -l sizeofdata (técnica citada por John K)
  • BSD: ping -D -s sizeofdata hostname
  • Linux: ping -M do -s sizeofdata hostname

O maior valor de sizeofdata que funciona é o MTU (sobre o caminho específico que seus dados estão tomando).

    
por 29.08.2012 / 18:33
2

Depende da quantidade de dados que você coloca no quadro. Se você colocar 1500 bytes de dados em um quadro, seu tamanho total de quadros será 1518 bytes. Com 1472 bytes de dados, você terá um tamanho total de quadros de 1500.

link

Dito isso, se você estiver realmente interessado em testar a fragmentação, uma boa maneira de testar isso é com um bom e velho ping com algumas sinalizações:

ping hostname -f -l sizeofdata

O sinalizador -f fará com que o ping falhe se o pacote estiver fragmentado. A chave para entender aqui é "sizeofdata" é a quantidade de dados que você pode colocar em uma mensagem sem fragmentar - portanto, se você enviar uma carga útil de 1500, começará a fragmentar à medida que ultrapassar 1500 bytes. Desvie para 1472 (1500 - o overhead de 18 bytes), e você verá os pings passarem.

    
por 28.08.2012 / 22:35
0

Para o quadro Ethernet_II básico, o tamanho do quadro é de 1518 bytes (ligado ou desligado). Isso é composto de 6 bytes para cada destino e endereço de origem, 2 bytes para o campo de tipo entre 46 e 1500 bytes para a carga útil (no seu caso, o pacote IP inteiro com seu cabeçalho IP e cabeçalho UDP) e 4 bytes para o FCS. Além disso, há uma restrição em quão pequeno um quadro pode ser (64 bytes). É por isso que o intervalo é de 46 bytes (adicione isso aos dois endereços e o tipo e o FCS e você obtém 64 bytes - 46 + 6 + 6 + 2 + 4 = 64).

Se o quadro estiver em uma rede que suporta várias vlans e você precisar marcar o quadro com uma tag vlan, um campo extra será adicionado antes do campo type. Isso é 4 bytes. Isso agora significa que o intervalo de tamanhos para a carga útil pode ser reduzido em 4 bytes na extremidade inferior e ainda ter no mínimo 64 bytes. Daí os 42. (Então, 42 + 6 + 6 + 2 + 4 + 4 para a tag vlan = 64)

Assim, quando o intervalo é escrito 1500-42 não significa 1500 menos 42, significa que qualquer coisa entre 1500 e 42 bytes é válida. Um dos fios, esse quadro marcado pode ter até 1522 bytes (se apenas um tag for usado, ou 1526 se dois tags forem usados). Nada disso explica o número 1542.

Para chegar a este número, você precisa considerar como um quadro pode ser enviado na Ethernet. Não há relógio em uma LAN Ethernet, portanto, uma série de 1s e 0s é enviada pelo transmissor de um quadro para acertar um relógio. Isso é chamado de preâmbulo. Nem todo ouvinte "ouvirá" todo o preâmbulo, mas a maioria deve ouvir alguma parte dele. Para sinalizar o fim do preâmbulo, um dos últimos 8 bits enviados é invertido, de modo que, em vez de 10101010, ele se torna 10101011. Esse byte é chamado de Início do Delimitador de Quadro (SDF). Isso não é tecnicamente útil para capturar o fio, então os 7 bytes do preâmbulo e o SDF de 1 byte normalmente não são contados, mas se fossem nossos 1518 originais, agora seria 1526. Ainda não 1542 ..

Após o envio de um quadro, há um silêncio forçado no fio, chamado de intervalo entre quadros. Isso é equivalente a uma transmissão de 12 bytes. Isso também não é contado ou capturado, mas se fosse, ele nos levaria para 1538 bytes. A única maneira de agora chegar a 1542 a partir de 1538 é dizer que o quadro está marcado (isto é, ele contém a tag de plano de 4 bytes). Ufa, 1542 finalmente.

Está tudo na terminologia. Um quadro padrão é de 1518 bytes no fio (no que se refere a qualquer dispositivo de captura). Um quadro marcado (tag único) é 1522 bytes no fio. Estes ocupam 1538 bytes ou 1542 bytes de espaço de transmissão no fio.

Espero que ajude a esclarecer ..

    
por 29.10.2015 / 11:34
-1

não, você quer que a fragmentação ocorra, é por isso que você obter pacote precisa ser fragmentado, mas df set Leve-o como uma estrada de 2 vias com um monte de semis contra a mesma rodovia com um monte de pequenos carros inteligentes que estão indo para o mesmo destino semis carregam mais carga, mas são mais lentos e podem congestionar mais fácil carros menores carregam menos, mas viajar mais rápido MSS não é o mesmo que MTU

    
por 09.06.2015 / 17:24