Para Windows 7, Windows Vista e Windows XP, o MTU para várias interfaces está disponível no próprio Windows usando netsh
.
Windows 7, Windows Vista
Para mostrar o MTU atual no Windows 7 ou Windows Vista, em um prompt de comando:
C:\Users\Ian>netsh interface ipv6 show subinterfaces
MTU MediaSenseState Bytes In Bytes Out Interface
---------- --------------- --------- --------- -------------
1280 1 24321220 6455865 Local Area Connection
4294967295 1 0 1060111 Loopback Pseudo-Interface 1
1280 5 0 0 isatap.newland.com
1280 5 0 0 6TO4 Adapter
E para interfaces IPv4:
C:\Users\Ian>netsh interface ipv4 show subinterfaces
MTU MediaSenseState Bytes In Bytes Out Interface
---------- --------------- --------- --------- -------------
1500 1 146289608 29200474 Local Area Connection
4294967295 1 0 54933 Loopback Pseudo-Interface 1
Nota: Neste exemplo, minha interface IPv6 de conexão de área local possui uma MTU (1280) tão baixa porque estou usando um serviço de encapsulamento para obter conectividade IPv6 .
Você também pode alterar seu MTU (Windows 7, Windows Vista). Em um prompt de comando elevado :
>netsh interface ipv4 set subinterface "Local Area Connection" mtu=1492 store=persistent
Ok.
Testado com o Windows 7 Service Pack 1
Windows XP
A netsh
sintaxe para o Windows XP é um pouco diferente:
C:\Users\Ian>netsh interface ip show interface
Index: 1
User-friendly Name: Loopback
Type: Loopback
MTU: 32767
Physical Address:
Index: 2
User-friendly Name: Local Area Connection
Type: Etherenet
MTU: 1500
Physical Address: 00-03-FF-D9-28-B7
Nota: O Windows XP requer que o serviço Roteamento e Acesso Remoto seja iniciado antes que você possa ver detalhes sobre uma interface (incluindo MTU):
C:\Users\Ian>net start remoteaccesss
O Windows XP não fornece uma maneira de alterar a configuração da MTU de dentro netsh
. Para isso você pode:
Testado com o Windows XP Service Pack 3
Veja também
Breve discussão sobre o que é MTU, de onde vêm os 28 bytes.
Sua placa de rede (Ethernet) tem um tamanho máximo de pacote de 1,500 bytes
:
+---------+
| 1500 |
| byte |
| payload |
| |
| |
| |
+---------+
A parte IP do TCP / IP requer um cabeçalho de 20 bytes (12 bytes de sinalizadores, 4 bytes para o endereço IP de origem, 4 bytes para o endereço IP de destino). Isso deixa menos espaço disponível no pacote:
+------------------------+
| 12 bytes control flags | \
| 4 byte from address | |- IP header: 20 bytes
| 4 byte to address | /
|------------------------|
| 1480 byte payload |
| |
| |
| |
+------------------------+
Agora, um pacote ICMP (ping) possui um cabeçalho de 8 bytes ( dados adicionais de 1 byte type
, 1 byte code
, 2 byte checksum
, 4 bytes):
+------------------------+
| 12 bytes control flags | \
| 4 byte from address | |
| 4 byte to address | |- IP and ICMP header: 28 bytes
|------------------------| |
| 8 byte ICMP header | /
|------------------------|
| 1472 byte payload |
| |
| |
| |
+------------------------+
É aí que estão os 28 bytes "ausentes" - é o tamanho dos cabeçalhos necessários para enviar um pacote de ping.
Ao enviar um pacote de ping, você pode especificar a quantidade de dados de carga útil extra que deseja incluir. Nesse caso, se você incluir todos os 1472 bytes:
>ping -l 1472 obsidian
Em seguida, o pacote Ethernet resultante estará cheio até as brânquias. Cada último byte do pacote de 1500 bytes será preenchido:
+------------------------+
| 12 bytes control flags | \
| 4 byte from address | |
| 4 byte to address | |- IP and ICMP header: 28 bytes
|------------------------| |
| 8 byte ICMP header | /
|------------------------|
|........................|
|........................|
|. 1472 bytes of junk....|
|........................|
|........................|
|........................|
|........................|
+------------------------+
Se você tentar enviar mais um byte
>ping -l 1473 obsidian
a rede terá que fragmentar esse pacote de 1501 bytes em vários pacotes:
Packet 1 of 2
+------------------------+
| 20 bytes control flags | \
| 4 byte from address | |
| 4 byte to address | |- IP and ICMP header: 28 bytes
|------------------------| |
| 8 byte ICMP header | /
|------------------------|
|........................|
|........................|
|..1472 bytes of payload.|
|........................|
|........................|
|........................|
|........................|
+------------------------+
Packet 2 of 2
+------------------------+
| 20 bytes control flags | \
| 4 byte from address | |
| 4 byte to address | |- IP and ICMP header: 28 bytes
|------------------------| |
| 8 byte ICMP header | /
|------------------------|
|. |
| 1 byte of payload |
| |
| |
| |
| |
| |
+------------------------+
Essa fragmentação acontecerá nos bastidores, idealmente sem você saber.
Mas você pode ser mesquinho e dizer à rede que o pacote não pode ser fragmentado:
>ping -l 1473 -f obsidian
O sinalizador -f significa não fragmentar . Agora, quando você tenta enviar um pacote que não cabe na rede, você recebe o erro:
>ping -l 1473 -f obsidian
Packet needs to be fragmented but DF set.
O pacote precisa ser fragmentado, mas o sinalizador Não fragmentar foi definido.
Se em algum lugar ao longo da linha um pacote precisar ser fragmentado, a rede realmente enviará um pacote ICMP informando que ocorreu uma fragmentação. Sua máquina obtém esse pacote ICMP, é informado qual era o maior tamanho e deve parar de enviar pacotes muito grandes. Infelizmente, a maioria dos firewalls bloqueia esses pacotes ICMP "Path MTU discovery", para que sua máquina nunca perceba que os pacotes estão sendo fragmentados (ou pior: descartados porque não podiam ser fragmentados).
É isso que faz com que o servidor da web não funcione. Você pode obter as respostas iniciais pequenas (<1280 bytes), mas pacotes maiores não conseguem passar. E os firewalls do servidor da Web estão configurados incorretamente, bloqueando os pacotes ICMP. Portanto, o servidor da web não percebe que você nunca recebeu o pacote.
A fragmentação de pacotes não é permitida no IPv6, todos são obrigados a (corretamente) permitir pacotes de descoberta ICMP mtu.