O adaptador Ethernet do meu computador usa quadros Ethernet de 1.500 bytes. Normalmente, isso significa que o MTU da minha conexão local é de 1500
bytes.
Mas minha conexão (IPv4) com a Internet tem alguma sobrecarga. Isso significa que meu MTU real ao me comunicar com a Internet é 1492
. Isso está causando todos os problemas regulares existentes na interface MTU mal configurada.
O roteador pode corrigi-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 o MTU é 1492
. Se solicitado, o servidor DHCP responderá com a opção 26 do DHCP:
- 26 Interface MTU =
1492
Por isso, estava me deixando louco por que o servidor DHCP não está informando à minha máquina Windows 7 a configuração da MTU como um dos itens retornados na oferta 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 de domínio =
example.local
- 3 roteador =
192.168.1.1
- 6 Domain Name Server =
8.8.8.8
,8.8.4.4
,74.82.42.42
Sem interface MTU ! Portanto, a Ethernet da minha máquina está presa em 1500
bytes.
O servidor DHCP fez o que deveria fazer
Demorou mais tempo para escavar, mas percebi que o servidor DHCP apenas fornece o que o cliente solicitou . Durante o meu Windows 7 DHCP Discover , o Windows 7 enumera a lista de todas as opções de DHCP que ele gostaria que fossem retornadas:
- 1 Máscara de sub-rede
- 15 nome de domínio
- 3 roteador
- 6 Servidor de nomes de domínio
- 44 Servidor de nomes NetBIOS sobre TCP / IP
- 46 Tipo de nó NetBIOS sobre TCP / IP
- 47 Escopo NetBIOS sobre TCP / IP
- 31 Executar 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 o MTU !
Deve saber o que está fazendo
O Windows deve ter uma razão pela qual não está solicitando o MTU; mas eu não sei o que é. No começo eu pensei que era porque estava usando o Path Maximum MTU Discovery . Mas PMTU
funciona apenas para conexões TCP, usa a opção TCP MSS
(Maximum Segment Size) e requer que a MSS
opção local esteja correta.
No meu caso, a configuração TCP MSS (que vem da opção MTU) está incorreta. Isto é1460 bytes
1500 interface MTU
- 20 bytes IP header = 1480 bytes
- 20 bytes TCP header
= 1460 bytes MSS
que é muito alto.
Nota : Posso confirmar que o Windows está usando um MSS de 1460 bytes de um
SYN
pacote, quando uma conexão TCP está sendo estabelecida.
Se não o 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 achavam que deveria acontecer?
Agora finja que meu Internet MTU é realmente 1472 (o que é) e finja que meu adaptador Ethernet realmente usa 8,192
quadros Ethernet de byte (o que faz). O que uma corporação deveria fazer? Devo 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 algo aqui. Finja que meu gateway da Internet é um caixa eletrônico de 576 bytes; como instruo as máquinas com Windows 7 que o MTU se elas desejam enviar para a Internet é de 576 bytes?