O Windows 7 não solicita MTU do servidor DHCP; o que está pensando?

5

O adaptador Ethernet do meu computador usa quadros Ethernet de 1.500 bytes. Normalmente, isso significa que a MTU da Conexão local é 1500 bytes.

Mas minha conexão (IPv4) com a Internet tem alguma sobrecarga. Isso significa que minha MTU real ao se comunicar com a Internet é 1492 . Isso está causando todos os problemas comuns que existem com a MTU de interface configurada incorretamente.

O roteador pode consertá-lo

Obviamente, eu poderia usar netsh e substituir minha interface de rede por uma MTU personalizada. Mas eu não quero fazer isso. O servidor DHCP do meu roteador já sabe que a MTU é 1492 . Se solicitado, o servidor DHCP responderá com a opção 26 do DHCP:

  • 26 Interface MTU = 1492

Por isso, fiquei louco porque o servidor DHCP não está informando minha máquina com Windows 7 a configuração da MTU como um dos itens que ela retorna na oferta de DHCP :

  • 54 Identificador do servidor DHCP = 192.168.1.1
  • 51 Tempo de concessão do endereço IP = 2 hours
  • 1 Máscara de sub-rede = 255.255.255.0
  • 15 Nome do domínio = example.local
  • 3 Roteador = 192.168.1.1
  • 6 Servidor de nome de domínio = 8.8.8.8 , 8.8.4.4 , 74.82.42.42

Nenhuma Interface MTU ! Então, a Ethernet da minha máquina está presa em 1500 bytes.

O servidor DHCP fez o que deveria fazer

Demorou mais, mas percebi que o DHCP Server só dava o que o solicitou . Durante meu Windows 7 DHCP Discover , o Windows 7 enumera a lista de todas as opções de DHCP que ele gostaria de retornar:

  • 1 Máscara de sub-rede
  • 15 nome de domínio
  • 3 Roteador
  • 6 Servidor de nomes de domínio
  • 44 NetBIOS sobre o servidor de nomes TCP / IP
  • 46 NetBIOS sobre o tipo de nó TCP / IP
  • 47 NetBIOS sobre o escopo TCP / IP
  • 31 Realizar a descoberta do roteador
  • 33 Rota estática
  • 121 Rota estática sem classe
  • 249 Rota estática sem classe (Microsoft)
  • 43 Informações específicas do fornecedor

O Windows 7 nem está pedindo para o MTU !

Deve saber o que está fazendo

O Windows deve ter um motivo porque não está pedindo o MTU; mas eu não sei o que é. No começo, achei que era porque estava usando Descoberta Máxima do MTU do Caminho . Mas PMTU só funciona para conexões TCP, usa a opção TCP MSS (Tamanho máximo do segmento) e exige que a opção MSS local esteja correta.

No meu caso, a configuração TCP MSS (que vem da opção MTU) está errada. É 1460 bytes

  1500 interface MTU
-   20 bytes IP header = 1480 bytes
-   20 bytes TCP header
= 1460 bytes MSS

que é muito alto.

Note: I can confirm Windows is using an MSS of 1460 bytes from a SYN packet, when a TCP connection is being established.

Se não for PathMTU, então o que?

O que o Windows 7 está pensando? Qual é o comportamento pretendido aqui? O que os desenvolvedores de pilha de rede da Microsoft deveriam pensar?

Agora finja que a minha Internet MTU é na verdade 1472 (que é), e finja que meu adaptador Ethernet realmente usa frames Ethernet 8,192 byte (o que faz). O que uma corporação deveria fazer? Eu deveria ir até todas as máquinas da empresa e digitar:

>netsh interface ipv4 set interface interface="Local Area Connection" mtu=1472 store=persistent

Isso não é razoável. E mesmo que fosse razoável, não é o que estou perguntando.

Estou tentando entender o que o Windows quer que aconteça. Estou tentando entender como deve se comportar. Estou tentando aprender alguma coisa aqui. Finja que meu gateway de Internet é um ATM de 576 bytes; Como faço para instruir máquinas Windows 7 que o MTU se eles querem enviar para a Internet é 576 bytes?

Leitura de bônus

por Ian Boyd 07.10.2013 / 02:20

1 resposta

4

O MTU do caminho não é somente TCP e não usa o MSS (embora, como você supõe, o MSS seja derivado do MTU). Qualquer salto que receba um pacote grande demais para encaminhar enviará um pacote ICMP fragmentation needed de volta para a origem. Isso faz parte da camada 3 e é independente do TCP.

O problema com o PMTU é que os pacotes ICMP de entrada são geralmente descartados ou não são encaminhados para a origem e, portanto, a origem não sabe reduzir o tamanho do pacote.

Como seu roteador sabe que o MTU do próximo salto é 1472, ele deve enviar pacotes PMTU para seus clientes. Você pode verificar isso com o wireshark e, se não estiver fazendo isso, será necessário corrigi-lo.

Você tem algumas soluções alternativas. Uma delas é definir a interface interna da MTU do roteador para 1472, o que significa que ela é acionada antes que o roteador faça qualquer processamento. A outra opção é (se você puder fazer isso com seu roteador) é ligar o bit DF para cada pacote. Essa é uma solução bastante brutal, já que qualquer pacote de tamanho completo terminará como dois pacotes separados, um pequeno e outro grande, com a sobrecarga resultante.

Em um ambiente corporativo, todas as três abordagens podem ser usadas, mas o hard setting mtu na interface LAN do roteador é bastante comum.

(Eu nunca encontrei uma instância onde o DHCP é usado para mediar o MTU, não seria o lugar certo na maioria dos casos, porque o MTU interno e o MTU de borda são diferentes, onde você pode usar quadros jumbo internamente, mas precisa reduzir ao tamanho normal para o tráfego de internet)

    
por 07.10.2013 / 02:44