Qual é o tamanho "in-the-wire" de um quadro Ethernet? 1518 ou 1542?

22

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

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


A confusão é que o PAYLOAD pode ter até 1500 bytes e esse é o MTU. Então, agora, qual é o tamanho do fio para uma carga útil de 1500? A partir dessa tabela, ele pode ter até 1542 bytes.

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

chrisapotek
fonte
A verdadeira questão aqui é o que você quer dizer com "no tamanho do fio" e o que você fará com essas informações? Você está tentando calcular pacotes por segundo?
Mike Pennington
@MikePennington Tentando determinar o tempo de trânsito em fio. Com o tamanho do pacote e a velocidade da Ethernet (10 gigabits), você pode calcular isso.
chrisapotek

Respostas:

26

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


A carga útil máxima na Ethernet 802.3 é de 1500 bytes.
Estes são os dados que você está tentando enviar por cabo (e a que o MTU está se referindo).
[payload]<- 1500 bytes

A carga útil é encapsulada em um quadro Ethernet (que adiciona o MAC de origem / destino, o rótulo da VLAN, o comprimento e a soma de verificação CRC. É um total de 22 bytes de "material" adicional
[SRC+DST+VLAN+LENGTH+[payload]+CRC]<- 1522 bytes

O quadro é transmitido por fio - antes que sua placa ethernet faça isso, ele se levanta e grita muito alto para garantir que ninguém mais esteja usando o fio (CSMA / CD) - este é o delimitador de preâmbulo e início de quadro (SFD) - mais 8 bytes, agora temos:
[Preamble+SFD+[Ethernet Frame]]<- 1530 bytes

Finalmente, quando um transceptor Ethernet termina o envio de um quadro, é exigido pelo 802.3 que transmita 12 bytes de silêncio ("Interframe Gap") antes de poder enviar seu próximo quadro.
[Preamble+SFD+[Ethernet Frame]+Silence]<- 1542 bytes transmitidos no fio.


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

A MTU se aplica à carga útil - é a maior unidade de dados que você pode empilhar no pacote. Assim, um pacote ethernet com uma MTU de 1500 bytes será na verdade um quadro de 1522 bytes e 1542 bytes no fio (assumindo que exista uma etiqueta de vLAN).

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

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

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

O maior valor sizeofdatadisso funciona é o MTU (no caminho específico que seus dados estão seguindo).

voretaq7
fonte
No entanto, tenho que excluir cabeçalhos IP e UDP deste 1500, certo? Portanto, o tamanho máximo da mensagem do meu aplicativo é 1472 para UDP.
Chrisapotek
@chrisapotek correto - o IP e UDP (ou TCP, GRE, etc.) cabeçalhos são parte da carga que é colocado no quadro ethernet
voretaq7
2
traceroute --mtu {target} no linux também exibirá max
mtu
devemos ficar um pouco mais "físicos"? pt.wikipedia.org/wiki/8b/10b_encoding
SaveTheRbtz 4/12/12
@SaveTheRbtz oh por favor, não - de descer para a representação binária dói a cabeça o suficiente :-)
voretaq7
2

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

http://en.wikipedia.org/wiki/Ethernet_frame

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

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 conforme ultrapassar 1500 bytes. Abaixe isso para 1472 (1500 - a sobrecarga de 18 bytes) e você verá os pings passarem.

Univ426
fonte
Sinto muito, 1542 bytes está muito acima do quadro Ethernet padrão definido pela IEEE 802.3. Uma carga Ethernet sem marcação de 1500 bytes é de 1518 bytes (não incluindo o SFD / passível de verificação). Um quadro com marcação de 802.1Q é 1522 bytes (mesmas ressalvas)
Mike Pennington
Isso é muito confuso. MTU = 1500, mas o tamanho do quadro é 1542 ??? Portanto, o MTU é apenas a carga útil, em outras palavras, é o tamanho do quadro de 1542 menos as 42 coisas extras. Isso está correto?
Chrisapotek
Desculpe, eu digitei isso errado - Eu só atualizou a resposta, mas se eu ainda estiver errado, é só me avisar - esta é a matemática que eu lembre-se: S
Univ426
Sinto muito, eu devo estar errado - Eu pensei que eu entendi isso, mas eu claramente tenho meus números off, parece que o seu 1518: S sinto muito por isso
Univ426
Não é você quem está confuso, mas todo mundo. Então, minhas perguntas continuam. Qual é a diferença entre o tamanho do quadro MTU e ethernet? A carga útil é de 1500 ou menos?
Chrisapotek
0

Para o quadro Ethernet_II básico, o tamanho do quadro é 1518 bytes (ligado ou desligado). É composto de 6 bytes para cada um dos endereços de destino e de origem, 2 bytes para o campo de tipo entre 46 e 1500 bytes para a carga (no seu caso, todo o pacote IP com seu cabeçalho IP e cabeçalho UDP) e 4 bytes para o FCS. Além disso, há uma restrição sobre o tamanho de um quadro (64 bytes). É por isso que o intervalo é de 46 bytes (adicione isso aos dois endereços e ao tipo e ao FCS e você obterá 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 de tipo. Isso é de 4 bytes. Agora, isso significa que o intervalo de tamanhos da carga útil pode ser reduzido em 4 bytes na extremidade inferior e ainda ter 64 bytes no mínimo. Daí o 42. (Então 42 + 6 + 6 + 2 + 4 + 4 para a tag vlan = 64)

Portanto, quando o intervalo é gravado 1500-42, não significa 1500 menos 42, significa que algo entre 1500 e 42 bytes é válido. Um fio, esse quadro marcado pode ter até 1522 bytes (se apenas uma tag for usada ou 1526 se duas tags forem usadas). Nada disso explica o número 1542.

Para chegar a esse 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 1 e 0 é enviada pelo transmissor de um quadro para definir um relógio. Isso é chamado de preâmbulo. Nem todo ouvinte 'ouvirá' todo o preâmbulo, mas a maioria deve ouvir parte dele. Para sinalizar o final do preâmbulo, um dos últimos 8 bits enviados é invertido para que, em vez de 10101010, ele se torne 10101011. Esse byte é chamado de Início do Delimitador de Quadro (SDF). Tecnicamente, isso não é útil para capturar a conexão, portanto os 7 bytes do preâmbulo e o SDF de 1 byte normalmente não são contados, mas se eles fossem nosso 1518 original agora seriam 1526. Ainda não 1542.

Depois que um quadro é enviado, há um silêncio forçado no fio, chamado de gap entre quadros. Isso é equivalente a uma transmissão de 12 bytes. Isso também não é contado ou capturado, mas, se fosse, chegaria a 1538 bytes. A única maneira de chegar a 1542 a partir de 1538 agora é dizer que o quadro está marcado (ou seja, contém a etiqueta do plano de 4 bytes). Ufa, 1542, finalmente.

Está tudo na terminologia. Um quadro padrão tem 1518 bytes no fio (no que diz respeito a qualquer dispositivo de captura). Um quadro marcado (etiqueta única) tem 1522 bytes no fio. Eles ocupam 1538 bytes ou 1542 bytes de espaço de transmissão no fio.

Espero que ajude a esclarecer ..

Joevpt
fonte
-1

não, você quer que a fragmentação ocorra, é por isso que você precisa que os pacotes sejam fragmentados, mas o df set toma como uma rodovia de duas vias com um monte de semifinais vs a mesma rodovia com um monte de pequenos carros inteligentes que vão as mesmas semis de destino carregam mais carga útil, mas são mais lentas e podem congestionar carros menores e mais fáceis, mas viajam mais rápido. O MSS também não é o mesmo que o MTU

Joseph
fonte
1
Essa resposta é quase, mas não completamente, totalmente não relacionada à questão.
kasperd