Я знаю, что могу формировать выходной трафик с помощью tc
или аналогичного инструмента. Однако я хочу формировать входной трафик сейчас — на самом деле, я хочу приоритизировать загрузку файлов определенного типа через медленное соединение с потерями.
Я знаю, что причина tc
может формировать только исходящий трафик: сам хост не имеет прямого контроля над объемом входящего трафика. С другой стороны, в TCP встроены некоторые меры, которые не позволяют трафику TCP переполнять медленное соединение. Так могу ли я что-то исказить в заголовке TCP, чтобы удаленный хост подумал, что мое соединение медленнее, чем он думает?
Предположим, что я могу установить соответствующую отметку на обоих типах соединений с помощью iptables
. Есть ли способ уменьшить входную полосу пропускания соединений первого типа, но только если присутствуют соединения второго типа?
решение1
То, о чем вы говорите, — это явное уведомление о перегрузке TCP (http://en.wikipedia.org/wiki/Явное_уведомление_о_перегрузке.) Я не думаю, что то, что вы ищете, технически возможно, поскольку к тому времени, как пакет будет получен самим сервером Linux, вы уже получили пакеты и пытаетесь настроить их постфактум.
Реалистично, если вам нужно QOS или формирование трафика, это должно быть сделано на вашем провайдере upstream, а не на принимающей стороне. Другими словами, все формирование трафика выполняется на стороне источника, а не на стороне назначения.
решение2
Для этого есть очень хорошие решения, к сожалению, ни одно из них не доступно бесплатно на Linux. Задержка или отбрасывание пакетов работает очень, очень плохо. Вы можете сделать это, если вам нужно, но результаты в лучшем случае адекватны. К тому времени, как вы получили пакет, он уже израсходовал входящую полосу пропускания, которую вы пытаетесь защитить.
Правильный способ сделать это — исказить объявления исходящего окна TCP, объявляя меньшее окно на другой стороне. Существуют аппаратные и программные реализации, которые делают это, но, насколько мне известно, ни одно из них не доступно бесплатно на Linux.
Этотсценарийобъясняет один из способов сделать это и содержит очень подробные комментарии, поясняющие теорию и ограничения.