MTU é 1500, porque o comprimento do primeiro fragmento é 1496 no IPv6?

4
ping6 ipv6Address -s 1500

Este comando resultará em um fragmento. Observado por wireshark, o comprimento do primeiro pacote de fragmentos é 1496 (da camada 3). Como o MTU é 1500, estou confuso com esse comprimento de 1496. De onde isso vem?

deepsky
fonte
Você está se conectando em um serviço de túnel?
Grawity
Não. Se eu usar -s 1452, não haverá fragmento e o comprimento total é de 1500.
deepsky
1
Eu não sei IP6, mas com IP4 eu tenho que ajustar meu TCP MTUs de parâmetro a 1480 porque meu comutador, é como um 15 'caminhão não ajustará debaixo da ponte * / clunk * mas um 14' 11 "um voa direito por. Ele ainda vai 99mph dessa maneira top 1% em testes de velocidade para a minha
conexão.Então

Respostas:

6

Isto é apenas para minha própria referência sobre IPv6 MTU. Eu precisava de alguma pergunta para adicionar - e eu escolho você.

O primeiro é o nosso pacote Ethernet, que normalmente ignoramos:

+-------------------------+
| Ethernet - 16 bytes     |
|  6 byte destination MAC |
|  6 byte source MAC      |
|  4 byte type            |
+-------------------------+
|                         |
/  1,500 byte payload     /
|                         |
+-------------------------+

Agora adicionamos o cabeçalho IPv4 ou IPv6:

IPv4                           IPv6
+-------------------------+    +-------------------------+
| Ethernet - 12 bytes     |    | Ethernet - 12 bytes     |
|  6 byte destination MAC |    |  6 byte destination MAC |
|  6 byte source MAC      |    |  6 byte source MAC      |
|  4 byte type            |    |  4 byte type            |
+-------------------------+    +-------------------------+
| IPv4 - 20 bytes         |    | IPv6 - 40 bytes         |
|  10  byte control flags |    |  6 byte control flags   |
|  2 byte total length    |    |  2 byte payload length  |
|  4 byte source addr     |    |  16 byte source addr    |
|  4 byte dest addr       |    |                         |
+-------------------------+    |  16 byte dest addr      |
|                         |    |                         |
|                         |    +-------------------------|
|                         |    |                         |
/ 1,480 payload           /    / 1,460 payload           /
|                         |    |                         |
+-------------------------+    +-------------------------+

Em seguida, adicionamos a realidade de uma conexão PPPoE, que retira 8 bytes do pacote para a tag PPPoE PADS:

+-------------------------+
| Ethernet - 12 bytes     |
|  6 byte destination MAC |
|  6 byte source MAC      |
|  4 byte type            |
+-------------------------+
| PPPoE PADS - 8 bytes    |
+-------------------------+
|                         |
/ 1,492 payload           /
|                         |
+-------------------------+

O que reduz o MTU disponível para o nosso tráfego IPv4 e IPv6:

IPv4                           IPv6
+-------------------------+    +-------------------------+
| Ethernet - 12 bytes     |    | Ethernet - 12 bytes     |
|  6 byte destination MAC |    |  6 byte destination MAC |
|  6 byte source MAC      |    |  6 byte source MAC      |
|  4 byte type            |    |  4 byte type            |
+-------------------------+    +-------------------------+
| PPPoE PADS - 8 bytes    |    | PPPoE PADS - 8 bytes    |
+-------------------------+    +-------------------------+
| IPv4 - 20 bytes         |    | IPv6 - 40 bytes         |
|  10  byte control flags |    |  6 byte control flags   |
|  2 byte total length    |    |  2 byte payload length  |
|  4 byte source addr     |    |  16 byte source addr    |
|  4 byte dest addr       |    |                         |
+-------------------------+    |  16 byte dest addr      |
|                         |    |                         |
|                         |    +-------------------------|
|                         |    |                         |
/ 1,472 payload           /    / 1,452 payload           /
|                         |    |                         |
+-------------------------+    +-------------------------+

E, no meu caso, estou usando o tunelamento 6 em 4 da Hurricane Electric , já que meu ISP não oferece conectividade IPv6 nativa. Isso significa que meu tráfego IPv6 é envolto em um pacote IPv4:

IPv4                           IPv6
+-------------------------+    +-------------------------+
| Ethernet - 12 bytes     |    | Ethernet - 12 bytes     |
|  6 byte destination MAC |    |  6 byte destination MAC |
|  6 byte source MAC      |    |  6 byte source MAC      |
|  4 byte type            |    |  4 byte type            |
+-------------------------+    +-------------------------+
| PPPoE PADS - 8 bytes    |    | PPPoE PADS - 8 bytes    |
+-------------------------+    +-------------------------+
| IPv4 - 20 bytes         |    | IPv4 - 20 bytes         |
|  10  byte control flags |    |  10  byte control flags |
|  2 byte total length    |    |  2 byte total length    |
|  4 byte source addr     |    |  4 byte source addr     |
|  4 byte dest addr       |    |  4 byte dest addr       |
+-------------------------+    +-------------------------+
|                         |    | IPv6 - 40 bytes         |
|                         |    |  6 byte control flags   |
|                         |    |  2 byte payload length  |
|                         |    |  16 byte source addr    |
|                         |    |                         |
|                         |    |  16 byte dest addr      |
|                         |    |                         |
|                         |    +-------------------------|
|                         |    |                         |
/ 1,472 payload           /    / 1,432 payload           /
|                         |    |                         |
+-------------------------+    +-------------------------+

Mas o número importante é o MTU , que é o tamanho que o IPv4 ou IPv6 tem disponível para si mesmo (incluindo seus cabeçalhos):

IPv4                           IPv6
+-------------------------+    +-------------------------+
| Ethernet - 12 bytes     |    | Ethernet - 12 bytes     |
|  6 byte destination MAC |    |  6 byte destination MAC |
|  6 byte source MAC      |    |  6 byte source MAC      |
|  4 byte type            |    |  4 byte type            |
+-------------------------+    +-------------------------+
| PPPoE PADS - 8 bytes    |    | PPPoE PADS - 8 bytes    |
+-------------------------+    +-------------------------+
|                         |    | IPv4 - 20 bytes         |
/ MTU = 1492              /    |  10  byte control flags |
|                         |    |  2 byte total length    |
+-------------------------+    |  4 byte source addr     |
                               |  4 byte dest addr       |
                               +-------------------------+
                               |                         |
                               / MTU = 1472              |
                               |                         |
                               +-------------------------+

Em seguida é a confusão sobre o tamanho da carga útil , usado ao pingar alguém com o sinalizador não fragmentado . O ICMP opera sobre IP e adiciona sua própria sobrecarga de cabeçalho:

IPv4                           IPv6
+-------------------------+    +-------------------------+
| Ethernet - 12 bytes     |    | Ethernet - 12 bytes     |
|  6 byte destination MAC |    |  6 byte destination MAC |
|  6 byte source MAC      |    |  6 byte source MAC      |
|  4 byte type            |    |  4 byte type            |
+-------------------------+    +-------------------------+
| IPv4 - 20 bytes         |    | IPv6 - 40 bytes         |
|  10  byte control flags |    |  6 byte control flags   |
|  2 byte total length    |    |  2 byte payload length  |
|  4 byte source addr     |    |  16 byte source addr    |
|  4 byte dest addr       |    |                         |
+-------------------------+    |  16 byte dest addr      |
| ICMP - 8 bytes          |    |                         |
+-------------------------+    +-------------------------|    
|                         |    | ICMP - 8 bytes          |
|                         |    +-------------------------+
|                         |    |                         |
/ 1,472 ping payload      /    / 1,452 ping payload      /
|                         |    |                         |
+-------------------------+    +-------------------------+

Nota : É por isso que você pode executar o ping com 1,452carga útil de byte antes de precisar fragmentar.

No meu caso, com a sobrecarga de uma tag PPPoE PADS:

IPv4                           IPv6
+-------------------------+    +-------------------------+
| Ethernet - 12 bytes     |    | Ethernet - 12 bytes     |
|  6 byte destination MAC |    |  6 byte destination MAC |
|  6 byte source MAC      |    |  6 byte source MAC      |
|  4 byte type            |    |  4 byte type            |
+-------------------------+    +-------------------------+
| PPPoE PADS - 8 bytes    |    | PPPoE PADS - 8 bytes    |
+-------------------------+    +-------------------------+
| IPv4 - 20 bytes         |    | IPv6 - 40 bytes         |
|  10  byte control flags |    |  6 byte control flags   |
|  2 byte total length    |    |  2 byte payload length  |
|  4 byte source addr     |    |  16 byte source addr    |
|  4 byte dest addr       |    |                         |
+-------------------------+    |  16 byte dest addr      |
| ICMP - 8 bytes          |    |                         |
+-------------------------+    +-------------------------|    
|                         |    | ICMP - 8 bytes          |
|                         |    +-------------------------+
|                         |    |                         |
/ 1,464 ping payload      /    / 1,444 ping payload      /
|                         |    |                         |
+-------------------------+    +-------------------------+

E minha sobrecarga adicional de 6 em 4 :

IPv4                           IPv6
+-------------------------+    +-------------------------+
| Ethernet - 12 bytes     |    | Ethernet - 12 bytes     |
|  6 byte destination MAC |    |  6 byte destination MAC |
|  6 byte source MAC      |    |  6 byte source MAC      |
|  4 byte type            |    |  4 byte type            |
+-------------------------+    +-------------------------+
| PPPoE PADS - 8 bytes    |    | PPPoE PADS - 8 bytes    |
+-------------------------+    +-------------------------+
| IPv4 - 20 bytes         |    | IPv4 - 20 bytes         |
|  10  byte control flags |    |  10  byte control flags |
|  2 byte total length    |    |  2 byte total length    |
|  4 byte source addr     |    |  4 byte source addr     |
|  4 byte dest addr       |    |  4 byte dest addr       |
+-------------------------+    +-------------------------+
| ICMP - 8 bytes          |    | IPv6 - 40 bytes         |
+-------------------------+    |  6 byte control flags   |    
|                         |    |  2 byte payload length  |
|                         |    |  16 byte source addr    |
|                         |    |                         |
|                         |    |  16 byte dest addr      |
|                         |    |                         |
|                         |    +-------------------------|
|                         |    | ICMP - 8 bytes          |
|                         |    +-------------------------+
|                         |    |                         |
/ 1,464 ping payload      /    / 1,424 ping payload      /
|                         |    |                         |
+-------------------------+    +-------------------------+

E você vê porque eu só posso pingar com uma carga útil de 1.424 bytes.

Ian Boyd
fonte
4

Você veria isso se tiver uma marcação de VLAN em uma interface que não a suporte nativamente. As tags de VLAN 802.1Q recebem um adicional de 4 bytes. Se sua NIC oferecer suporte nativamente, ela suportará quadros Ethernet de 1522 bytes (em vez de mais antigos de 1518 bytes) para que você ainda possa ter uma MTU de 1500 bytes. Se a sua NIC não suportar nativamente, você poderá apoiá-la no software, mas terá que reduzir a MTU para 1496, de modo que a coisa toda caiba nos velhos quadros de 1518 bytes que a NIC suporta.

Paulo
fonte
Não há VLAN configurada na minha rede. E o quadro Ethernet não contém informações 802.1q. São 14Bytes observados do wireshark.
deepsky
4
Na verdade, acho que é porque qualquer novo segmento criado deve ter um limite de 8 bytes e ainda ser menor que o MTU. 1500 é 187 div 8 com um resto de 4. Assim, 1500-4 = 1496 teria que ser o novo limite. Há mais detalhes sobre a fragmentação em erg.abdn.ac.uk/~gorry/eg3567/inet-pages/ip-fragmentatiion.html .
Paul
Eu acho que isso faz sentido. Não há reputação suficiente para votar ....
deepsky
1

A unidade máxima de transmissão (MTU) de um protocolo de comunicações de uma camada é o tamanho em bytes da maior unidade de dados de protocolo que a camada pode transmitir em frente. Para o exemplo de IP sobre conexões DSL usando PPPoA / VC-MUX, novamente optando por preencher 31 células ATM como antes, obtemos um valor de MTU reduzido ideal de 1478 = 31 * 48-10 levando em conta uma sobrecarga de 10 bytes consistindo de uma sobrecarga do protocolo ponto a ponto de 2 bytes e uma sobrecarga AAL5 de 8 bytes. Isto dá um custo total de 31 * 53 = 1643 bytes transmitidos via ATM de um pacote de 1478 bytes passado para PPPoA. No caso de IP enviado por ADSL usando PPPoA, o valor de 1478 seria o comprimento total do pacote IP, incluindo os cabeçalhos IP. Então, neste exemplo,

A RFC 2516 prescreve uma MTU máxima para conexões PPPoE / DSL de 1492 bytes: a carga útil máxima de Ethernet de 1500 bytes menos 8 bytes de cabeçalhos PPPoE (2 bytes para a sobrecarga de PPP e 6 bytes para o cabeçalho PPPoE). Isso não necessariamente preencherá um número inteiro de células ATM. A camada de enlace de dados é a camada 2 do modelo OSI de sete camadas de redes de computadores. Corresponde ou faz parte da camada de enlace do modelo de referência TCP / IP. Você mede na camada 3, de modo que a diferença é óbvia. Por causa do tipo de rede que você está usando, 4 bytes são usados ​​para fins de gerenciamento de rede.

supstj
fonte
1

Você está usando DSL? O cabeçalho PPPoE consome 8 bytes.

LawrenceC
fonte