понедельник, 21 октября 2013 г.

Определяем оптимальный MTU в Mac OS X и FreeBSD

Бывает так, что необходимо определить оптимальное значение MTU в сети, но вот сидеть и перебирать подходящие значения ручками как-то совсем уж неприлично. На помощь нам придёт всем известная утилитка ping !

Для определения оптимального значения вводим следующее "заклинание" в консоли:
ping -D -g 1500 -G 9000 -h 100 192.168.100.25
Разберём что есть что:
ping - ну это понятно, программка посылающая ICMP ECHO_REQUEST пакеты
-D     - запрещаем фрагментировать пакет, если он не "пролазит"
-g     - указываем минимальное значение сканируемого диапазона (с какого размера пакета начать перебор)
-G     - здесь указываем максимальное значение диапазона (до какого значения перебирать)
-h     - шаг перебора, по умолчанию значение 1 байт.

Запускаем это дело на выполнение и наслаждаемся выводом команды, должно быть что то вроде этого:
PING 192.168.100.25 (192.168.100.25): (1500 ... 9000) data bytes
1508 bytes from 192.168.100.25: icmp_seq=0 ttl=64 time=0.909 ms

1608 bytes from 192.168.100.25: icmp_seq=1 ttl=64 time=0.619 ms
1708 bytes from 192.168.100.25: icmp_seq=2 ttl=64 time=0.588 ms
1808 bytes from 192.168.100.25: icmp_seq=3 ttl=64 time=0.595 ms
1908 bytes from 192.168.100.25: icmp_seq=4 ttl=64 time=0.688 ms
2008 bytes from 192.168.100.25: icmp_seq=5 ttl=64 time=0.720 ms
2108 bytes from 192.168.100.25: icmp_seq=6 ttl=64 time=0.663 ms
-------------------------------------------------------
5808 bytes from 192.168.100.25: icmp_seq=43 ttl=64 time=0.979 ms
5908 bytes from 192.168.100.25: icmp_seq=44 ttl=64 time=0.966 ms
ping: sendto: Message too long
ping: sendto: Message too long

 Как только пошли сообщения ping: sendto: Message too long, можно останавливать выполнение программы и уменьшив шаг и соответственно минимальное и максимальное значения диапазона сузить область поиска.
Например у меня перестали проходить пакеты после значения 5908 байт, модифицирую команду до такого вида:
ping -D -g 5900 -G 6000 -h 10 192.168.100.25
и получаю такой вывод в консоли
PING 192.168.100.25 (192.168.100.25): (5900 ... 6000) data bytes
5908 bytes from 192.168.100.25: icmp_seq=0 ttl=64 time=1.218 ms

5918 bytes from 192.168.100.25: icmp_seq=1 ttl=64 time=0.860 ms
5928 bytes from 192.168.100.25: icmp_seq=2 ttl=64 time=0.950 ms
5938 bytes from 192.168.100.25: icmp_seq=3 ttl=64 time=0.991 ms
5948 bytes from 192.168.100.25: icmp_seq=4 ttl=64 time=0.805 ms
5958 bytes from 192.168.100.25: icmp_seq=5 ttl=64 time=1.005 ms
5968 bytes from 192.168.100.25: icmp_seq=6 ttl=64 time=0.864 ms
5978 bytes from 192.168.100.25: icmp_seq=7 ttl=64 time=1.013 ms
ping: sendto: Message too long
Далее ещё сужаем область поиска
ping -D -g 5970 -G 5980 -h 1 192.168.100.25
PING 192.168.100.25 (192.168.100.25): (5970 ... 5980) data bytes
5978 bytes from 192.168.100.25: icmp_seq=0 ttl=64 time=0.921 ms
5979 bytes from 192.168.100.25: icmp_seq=1 ttl=64 time=0.874 ms
5980 bytes from 192.168.100.25: icmp_seq=2 ttl=64 time=0.869 ms
ping: sendto: Message too long
и получаем значение 5980 байт.

Прибавляем к этому значению размер IP заголовка = 20 и ICMP = 8 байт и получаем максимальный (вероятно и оптимальный) MTU = 5980 + 20 +8 = 6008 байт.

Вот принципе и всё.

Комментариев нет:

Отправить комментарий