Para o Windows 7, Windows Vista e Windows XP, a MTU para várias interfaces está disponível no próprio Windows usando netsh
.
Windows 7, Windows Vista
Para exibir a MTU atual no Windows 7 ou no 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
Observação: Neste exemplo, minha interface IPv6 de conexão de área local tem uma MTU tão baixa (1280) porque estou usando um tunnel service para obter conectividade IPv6 .
Você também pode alterar seu MTU (Windows 7, Windows Vista). De 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 sintaxe netsh
do 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
Observação: o Windows XP exige 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 de MTU de netsh
. Para isso você pode:
- siga as instruções em KB283165 - Como alterar o tamanho da MTU PPPoE no Windows XP
- use o Dr. TCP ( Nota: apenas Windows 2000 / XP)
Testado com o Windows XP Service Pack 3
Veja também
- Configurar o tamanho da unidade de transferência máxima (MTU) TCPIP no Vista
- Definindo o MTU no Windows Vista
- Alterar configurações de MTU Ajuda!
- KB283165 - Como alterar o tamanho da MTU PPPoE no Windows XP
- DSLReports - DrTCP
Breve discussão sobre o que é MTU, de onde os 28 bytes estão vindo.
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) tem um cabeçalho de 8 bytes (1 byte type
, 1 byte code
, 2 bytes checksum
, dados adicionais de 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 "faltantes" - é o tamanho dos cabeçalhos necessários para enviar um pacote de ping.
Quando você envia um pacote de ping, é possível especificar quantos dados de carga útil extras você deseja incluir. Nesse caso, se você incluir todos os 1472 bytes:
>ping -l 1472 obsidian
Em seguida, o pacote ethernet resultante ficará cheio para as guelras. 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 o 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 |
| |
| |
| |
| |
| |
+------------------------+
Esta fragmentação acontecerá nos bastidores, idealmente sem você saber.
Mas você pode ser malvado e dizer à rede que o pacote não pode ser fragmentado:
>ping -l 1473 -f obsidian
A sinalização -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 precisou ser fragmentado, a rede realmente envia um pacote ICMP informando que ocorreu uma fragmentação. Sua máquina recebe este pacote ICMP, é informado de qual foi o maior tamanho e deve parar de enviar pacotes muito grandes. Infelizmente, a maioria dos firewalls bloqueia esses pacotes ICMP "Path MTU discovery", portanto, sua máquina nunca percebe que os pacotes estão sendo fragmentados (ou pior: foram descartados porque não puderam ser fragmentados).
Isso é o que faz com que o servidor da Web não funcione. Você pode obter as respostas iniciais pequenas (< 1280 bytes), mas os pacotes maiores não podem passar. E os firewalls do servidor web estão mal configurados, bloqueando os pacotes ICMP. Então o servidor web não percebe que você nunca recebeu o pacote.
A fragmentação de pacotes não é permitida no IPv6, todos são necessários para (corretamente) permitir pacotes de descoberta de mtu ICMP.