Найти тему
ИнфоКомм

TCP/IP (Часть 3) TCP Options

Автор: Александр Коленко

Привет, дорогой читатель!

Страница регистрации в академии
Страница регистрации в академии

Зарегистрируйтесь и получите доступ к бесплатному контенту. А также будьте в курсе нового учебного контента. Ссылка на учебную платформу:

Академия ИНФОКОММ

infocomm.space

Благодарность автору
Благодарность автору

Если материал полезен, то есть способ отблагодарить меня. Любая сумма будет отличной наградой и стимулом писать полезный контент для Вас.

Купить кофе автору

В данной части поговорим немного про TCP Options!
Мы уже затрагивали такую опцию как
Window Scale во второй части серии статей про TCP/IP стек. Давайте теперь коснемся других опций для полного понимание, какие задачи еще решает TCP при установлении соединения и в процессе приема/передачи трафика.

-4

Начнем с опции Maximum segment size (далее MSS).
MSS - это максимальный размер TCP сегмента. Максимальный размер равен 1460 байт. Как он высчитывается? Формула простая:

MSS=IP MTU-IP header-TCP header, где IP MTU это значение задаваемое на исходящем интерфейсе.

-5

Если на всем пути между клиентом и сервером не используется дополнительная инкапсуляция к примеру 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):

Рисунок 1
Рисунок 1
Рисунок 2
Рисунок 2

На первом рисунке мы видим, что icmp c размером полезной нагрузки равным 1473 не проходит, а вот 1472 проходит. Вывод: 1472 байта граничное значение при котором не происходит дропа. IP MTU можно вычислить прибавив к граничному значению 28 байт (20 байт - IP заголовок, 8 байт - заголовок icmp). IP MTU=1472+28=1500 байт.
Если вы хотите вычислить на каком именно из промежуточных устройств занижено IP MTU, то делаем так:

Определяем трассу
Определяем трассу

Далее по порядку пингуем сетевые узлы:

1. Проверяем первый узел (наш шлюз по умолчанию):

-9

И первый же узел нам сообщает, что его IP MTU ограничен размером 1500 байт.

Мы можем посмотреть информацию о настройках IP MTU на своем локальном компьютере. В моем случае ОС - Windows 10:

-10

Давайте проведем эксперимент и понизим MTU, к примеру на 10 байт и посмотрим, что произойдет.

-11
-12

Вот, что получилось

-13

1462- граничное значение. Прибавляем 28 байт и получаем 1490 - наш MTU на адаптере Wi-Fi

И тут мы проверим правило которое я описывал выше:

MSS=IP MTU-IP header-TCP header, где IP MTU это значение задаваемое на исходящем интерфейсе.

попытаемся открыть сайт Яндекса.

-14

Так открылся... Смотрим дамп трафика и удостоверяемся, что наш браузер принял во внимание при расчете MSS тот факт, что IP MTU =1490

-15

В дампе мы видим, что наше приложение (браузер) согласовывает с Яндекс свой максимальный MSS=1450.Если бы не уменьшили на 10 байт IP MTU он бы был 1460.

В следующей статье расскажу про временные метки, RTT и как эти параметры используются при вычислениях RTO таймеров. Про RTO писал в первой части серии статей.

Быстрые ссылки на предыдущие статьи:

1.TCP/IP (Часть 1) просто о сложном;

2.TCP/IP (Часть 2) просто о сложном.

Сетевая аналитика:

Пассивный и активный перехват сетевого трафика

Перечень использованной литературы:
1. Сети TCP/IP (Дуглас, Камер);

2.Анализ пакетов. Практическое руководство по использованию Wireshark (Крис Сандерс);

3.Атака сетей на уровне протоколов (Джеймс Форшоу).