Как долго фрагментированные фрагменты TCP хранятся на сервере TCP

10

Предположим, что данный фрагмент TCP фрагментирован на две IP-дейтаграммы, и что первая дейтаграмма поступает на сервер TCP, но вторая дейтаграмма никогда не поступает.

Через некоторое время сервер TCP отправляет подтверждение активности и определяет, что клиент активен. Что тогда делает TCP-сервер с этой первой дейтаграммой? Ожидание прибытия второй дейтаграммы или сброс первой дейтаграммы?

Randomblue
источник

Ответы:

8

После истечения времени ожидания повторной сборки фрагмента фрагмент удаляется; другой конец нужно будет повторно передать.

Этот тайм-аут обычно настраивается. В Linux это 30 секунд по умолчанию и управляется через /proc/sys/net/ipv4/ipfrag_time.

Майкл Хэмптон
источник
Является ли таймаут повторной сборки фрагмента относительно первого полученного фрагмента или таймер сбрасывается для каждого нового поступающего фрагмента?
Randomblue
2
Я думаю, что вы должны прочитать исходный код, чтобы ответить на этот вопрос окончательно.
Майкл Хэмптон
2

На этот вопрос нет однозначного ответа;

Если вы увидите эту статью об адаптивной ретрансляции, то увидите, что TCP использует RTT как фактор для расчета соответствующих задержек.

Это более подробная статья. По сути, не существует специального значения тайм-аута только для фрагментации.

Эта статья Cisco, тем не менее, указывает, что виртуальный межсетевой экран IOS XR имеет время ожидания по умолчанию 10 секунд для фрагментов со своим настраиваемым таймером. Я связываю это с тем, чтобы сказать, что ОС и устройства будут вести себя по-разному, и если вы передаете соединение через устройство, подобное этому, например, это может негативно повлиять на ваше соединение.

Было бы лучше соединить две машины одинаковой конфигурации с перекрестным соединением и начать тестирование оттуда, если вы хотите проверить влияние задержки фрагментации.

jwbensley
источник
Спасибо. Считаете ли вы, что время ожидания фрагмента в статье Cisco рассчитывается относительно первого полученного фрагмента или последнего полученного фрагмента?
Randomblue
Последний полученный фрагмент имеет больше смысла, чем первый, но я не знаю, на усмотрение Cisco в этом примере.
Jwbensley