segunda-feira, 18 de fevereiro de 2008

Path MTU Discovery (PMTUD)

Se durante uma comunicação alguma estação enviar pacotes IP maiores do que a rede pode suportar, ou seja, maiores que o menor MTU (Maximum Transmission Unit) do caminho, então será necessário que haja algum mecanismo para avisar que esta estação deverá diminuir o tamanho dos pacotes para que a comunicação ocorra com sucesso.


O processo interativo de envio de pacotes em determinados tamanhos, a resposta dos roteadores intermediários (possivelmente com pacotes do tipo ICMP Packet Too Big) e a adequação do tamanho dos pacotes posteriores é chamada de Path MTU Discovery ou PMTUD. No entanto, este processo pode não ser tão simples quanto parece pois, devido a má configuração dos equipamentos de rede intermediários, podem ocorrer problemas neste mecanismo. Os principais problemas estão relacionados à má configuração dos roteadores intermediários (por exemplo, configurando um bloqueio para todos os tipos de mensagens ICMP), a utilização de endereçamento IP inválido (que impede que os roteadores enviem o ICMP Packet Too Big para origem e consequentemente o ajuste do MTU na origem) ou até mesmo bugs no software dos equipamentos envolvidos na comunicação.

Para determinar o MTU de um caminho (dentre outras coisas) podemos utilizar o software scamper, que funciona em plataforma *BSD, Linux, SunOS ou Mac OS X. O mecanismo proposto para determinar o MTU do caminho e mais detalhes sobre esta ferramenta podem ser encontrados neste artigo publicado pela USENIX em 2005. Abaixo está a saída de um comando disparado na tentativa de inferir o MTU do caminho:
host:~/$ sudo ./scamper -c "trace -M" -i 201.6.0.2
traceroute from 192.168.x.y to 201.6.0.2
1 201.6.197.110 0.983 ms [mtu: 1500]
2 201.6.192.1 13.632 ms [mtu: 1500]
3 201.6.0.2 13.320 ms [mtu: 1500]
Outra dica interessante sobre o MTU é o artigo de Ivan Pepelnjak, The Never-Ending Story of IP Fragmentation, cuja leitura é extremamente recomendada.

Um comentário:

Marcelo B. Miola disse...

All,

Além do scamper, o software tracepath também oferece a funcionalidade para descobrir o PMTU:

http://linux.about.com/library/cmd/blcmdl8_tracepath.htm

Vale a pena conferir!