Автор: Александр Коленко
Привет, дорогой читатель!
Зарегистрируйтесь и получите доступ к бесплатному контенту. А также будьте в курсе нового учебного контента. Ссылка на учебную платформу:
Если материал полезен, то есть способ отблагодарить меня. Любая сумма будет отличной наградой и стимулом писать полезный контент для Вас.
В данной части поговорим немного про TCP Options!
Мы уже затрагивали такую опцию как Window Scale во второй части серии статей про TCP/IP стек. Давайте теперь коснемся других опций для полного понимание, какие задачи еще решает TCP при установлении соединения и в процессе приема/передачи трафика.
Начнем с опции Maximum segment size (далее MSS).
MSS - это максимальный размер TCP сегмента. Максимальный размер равен 1460 байт. Как он высчитывается? Формула простая:
MSS=IP MTU-IP header-TCP header, где IP MTU это значение задаваемое на исходящем интерфейсе.
Если на всем пути между клиентом и сервером не используется дополнительная инкапсуляция к примеру GRE, то IP MTU обычно равен 1500 байт.
Бывает и так, что не красиво уходящий из компании сетевой админ преднамеренно занижает IP MTU на пограничном маршрутизаторе тем самым вызывая дополнительную фрагментацию IP пакетов, что в свою очередь сильно влияет на производительность канала.
У TCP есть инструмент для выявления пониженного IP MTU на трассе - Path MTU Discovery (PMD) писал о нем в этой статье, но далеко не всегда он отрабатывает:
1.Приложение может не поддерживать использование этой опции;
2. PMD требуется отправить в адрес инициатора сессии ICMP сообщение - Destination Unreachable, Fragmentation Needed + указать какой MTU необходимо использовать. Очень часто, межсетевые экраны запрещают это по умолчанию. Ибо должен быть открыт доступ к защищаемым ресурсам по icmp. ICMP часто закрывают, для усложнения процесса скана со стороны ботнета. Конечно закрытие ICMP не спасет от более продвинутого скана типа: SYN, FIN, Xmas сканирования, но теория информационной безопасности базируется на том, что все по максимуму должно быть закрыто;
3.Если на одном из транзитных роутеров запретить ICMP трафик (что часто делают провайдеры) — система перестанет работать. Возникнет Path MTU Discovery Black Hole. Отправитель перестанет получать обратную связь и будет продолжать слать пакеты стандартного размера, которые один из узлов обработать не в состоянии.
Какой же выход?
- Опытным путем проверить максимальный IP MTU на трассе и вручную поправить в сторону увеличения (если это была диверсия =), в сторону уменьшения (если вы используете туннелирование или на транзитный устройствах не вашей зоны ответственности по какой-то причине занижен IP MTU).
Чтобы определить оптимальное значение MTU для нашего сетевого адаптера, подключенного к сети Интернет, необходимо узнать значение, используемое на оборудовании поставщика.
Для этого выполняем ping с запретом фрагментации сетевых пакетов (-f) и выставлением определенного размера пакета (-l):
На первом рисунке мы видим, что icmp c размером полезной нагрузки равным 1473 не проходит, а вот 1472 проходит. Вывод: 1472 байта граничное значение при котором не происходит дропа. IP MTU можно вычислить прибавив к граничному значению 28 байт (20 байт - IP заголовок, 8 байт - заголовок icmp). IP MTU=1472+28=1500 байт.
Если вы хотите вычислить на каком именно из промежуточных устройств занижено IP MTU, то делаем так:
Далее по порядку пингуем сетевые узлы:
1. Проверяем первый узел (наш шлюз по умолчанию):
И первый же узел нам сообщает, что его IP MTU ограничен размером 1500 байт.
Мы можем посмотреть информацию о настройках IP MTU на своем локальном компьютере. В моем случае ОС - Windows 10:
Давайте проведем эксперимент и понизим MTU, к примеру на 10 байт и посмотрим, что произойдет.
Вот, что получилось
1462- граничное значение. Прибавляем 28 байт и получаем 1490 - наш MTU на адаптере Wi-Fi
И тут мы проверим правило которое я описывал выше:
MSS=IP MTU-IP header-TCP header, где IP MTU это значение задаваемое на исходящем интерфейсе.
попытаемся открыть сайт Яндекса.
Так открылся... Смотрим дамп трафика и удостоверяемся, что наш браузер принял во внимание при расчете MSS тот факт, что IP MTU =1490
В дампе мы видим, что наше приложение (браузер) согласовывает с Яндекс свой максимальный MSS=1450.Если бы не уменьшили на 10 байт IP MTU он бы был 1460.
В следующей статье расскажу про временные метки, RTT и как эти параметры используются при вычислениях RTO таймеров. Про RTO писал в первой части серии статей.
Быстрые ссылки на предыдущие статьи:
1.TCP/IP (Часть 1) просто о сложном;
2.TCP/IP (Часть 2) просто о сложном.
Сетевая аналитика:
Пассивный и активный перехват сетевого трафика
Перечень использованной литературы:
1. Сети TCP/IP (Дуглас, Камер);
2.Анализ пакетов. Практическое руководство по использованию Wireshark (Крис Сандерс);
3.Атака сетей на уровне протоколов (Джеймс Форшоу).