контроль (замедление) загрузки на стороне сервера - PullRequest
1 голос
/ 18 июня 2009

Я бы хотел контролировать объем / скорость загрузки со своей стороны - и со стороны сервера (чтобы быть вежливым). ... Это не о "моем собственном менеджере загрузок".

Давайте представим: я позволяю моему сыну загружать максимум 500 МБ / день с utube, и все же он инициирует сеанс для загрузки фильма HD 10 ГБ. (Не обязательно аб. Родительский контроль, но технически это хороший пример).

У меня вопрос: как ограничить. Я хочу написать драйвер, который будет контролировать это на уровне TCP (IP?). Можно ли на уровне TCP?

Я знаю, что могу справиться с этим локально (например, сузив окно TCP, которое я объявляю серверу, или просто закрыв соединение после XXX байт).

Но что я действительно хочу - это сказать (сказать) утубе вежливо: (после того, как соединение было установлено и загрузка продолжается): не пытайтесь изо всех сил сжать этот фильм на маленькие сегменты, и создайте много заторов на н / ж - все готово.

Я бы хотел избежать ненужных н / ж с любой стороны; в основном я хотел бы иметь возможность (на уровне TCP) сказать другому концу: вот и все, на сегодня мы закончили. Пожалуйста, не пытайтесь доставить весь фильм, я не заинтересован в просмотре остального фильма (сегодня). (Так что utube просто перестанет загрязнять полосу пропускания мгновенно).

Может быть, вас больше смущает, но, надеюсь, прояснит, Вот выдержка из «Полного руководства по сетевому программированию в Linux», стр.31: (Говоря о 6-битной части заголовка TCP: URG, ACK, PSH, RST, SYS, FIN): "" ... возникают ситуации, когда данные должны передаваться вне диапазона. ... Это то, вступает ли бит URG в игру. Рассмотрим соединение, которое пользователь желает прервать , например ... "(и т. Д.).

Это, наверное, то, что я ищу: отправьте утубе "URG" с "ABORT". Единственное, что мне непонятно из этого текста - это «АБОРТ». Это "RST"? или что?

Пожалуйста, подтолкните меня немного в правильном направлении.

1 Ответ

0 голосов
/ 18 июня 2009

Вы можете использовать существующую инфраструктуру QoS для управления трафиком в вашей системе Linux.

Лучший способ сделать это - использовать команду iproute tc (или tcng ), чтобы создавать разные очереди и устанавливать ограничения для каждого И, чтобы использовать iptables для классификации пакетов в один из существующих очередей. Это даст вам большую гибкость и меньше кода для написания :-) (что может или не может быть то, что вы хотите). Я нашел инструмент , который предположительно делает весь этот процесс проще.

Примеры здесь и здесь .

Возможно, вы также захотите взглянуть на Shaperd , чтобы увидеть пример кода (если он немного староват), который использует libipq , который позволяет создавать очереди пакетов в пространстве пользователя (которое был заменен libnetfilter_queue).

Если вы используете не Linux, а Windows, вам может понадобиться API QoS или существующее программное обеспечение, которое сделает это за вас, например Traffic Shaper

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...