В OS X я заметил, что для пакетов, которые не подтверждены ACK, система повторно передает их с уменьшенным размером пакета. Это можно увидеть на изображении ниже.
Можно ли включить такое же поведение и в системах Linux?
Похоже, это может быть поведение зондирования MTU. Цитата из статьи, которую я написал об обнаружении Path MTU:
Зондирование MTU работает путем первоначальной отправки небольших пакетов и, если они успешно подтверждены, постепенно увеличивая размер пакета, пока не будет найден правильный MTU пути.
В Linux мы можем изменить значение
/proc/sys/net/ipv4/tcp_mtu_probing
следующим образом:
- 0 - отключено (по умолчанию)
- 1 - Доступно только при обнаружении черной дыры PMTU
- 2 - Всегда включен, с использованием начального значения MSS
tcp_base_mss
Значение 1 будет использовать обычный процесс PMTUD, однако, если пакеты не подтверждаются, сработает проверка MTU и начнется повторная передача пакетов со значением MSS, равным значению
tcp_base_mss
(по умолчанию 512 байт). Предполагая, что эти пакеты получены конечным хостом и подтверждены успешно, размер пакета будет еще больше увеличиваться, а процесс повторяться. Преимущество этого метода зондирования заключается в том, что он вступает в игру только тогда, когда вы начинаете отправлять повторные передачи, поэтому весь другой трафик, ведущий к этой точке, отправляется с использованием MTU по умолчанию. Основными недостатками являются увеличенный объем повторно передаваемого трафика и тот факт, что может потребоваться некоторое время, чтобы дождаться повторных передач с более высоким MTU.Значение 2 просто вызывает постоянное зондирование MTU, поэтому все пакеты изначально будут отправляться с MSS, равным
tcp_base_mss
и постепенно увеличиваются в размерах, если они признаются. С помощью этого метода вам не придется ждать повторных передач, прежде чем сработает проверка MTU, однако ВСЕ исходящие пакеты изначально будут очень маленькими, что делает этот метод проверки гораздо менее эффективным, чем вариант 1.