Предпосылка:
Сельское местоположение, не так много вариантов для высокоскоростного подключения к Интернету. Самым быстрым на сегодняшний день является спутниковый Интернет, но он дорогой (как оборудование, так и месячная стоимость, и имеет недостатки по времени ожидания), поэтому многие домохозяйства хотели бы поделиться им.
Само по себе это просто: настройте маршрутизатор с подсетью для каждого домашнего хозяйства (VLAN или физические порты), заблокируйте трафик между ними и настройте модем для маршрутизации в эти подсети или настройте двойной NAT.
Эта проблема:
То, как обычно работает TCP, означает, что каждое TCP-соединение будет более или менее получать 1/n доступной пропускной способности, где n - количество соединений. Таким образом, если одно домохозяйство / пользователь создает много подключений, они получат большую долю общего подключения. Это не особенно справедливо - с насыщенной связью каждое домохозяйство должно получить равную долю. С другой стороны, когда никто больше не использует соединение, должно быть возможно использовать всю полосу пропускания.
Например, скажем, есть 4 домохозяйства, использующие соединение со скоростью 12 Мбит / с. Если один из них загружает / передает / что-то еще, он должен иметь возможность использовать полные 12 Мбит / с (или достаточно близко). Если 2 домохозяйства используют соединение, они должны получать 6 Мбит / с каждое, независимо от того, загружает ли одно домохозяйство 1 файл, а другое 11. (без какого-либо управления пропускной способностью каждый файл будет загружаться со скоростью примерно 1 Мбит / с в этом случае) 3 домохозяйства. получить 4Mbit / s каждый и так далее.
Что я разработал до сих пор:
Лучшее место для реализации подобной политики (для нисходящего потока) - на другом конце узкого канала, т. Е. У провайдера. Очевидно, что в этом случае это невозможно, поэтому было бы хорошо иметь возможность как-то приблизиться к нему. Но как? Существуют ли готовые маршрутизаторы, которые поддерживают что-то подобное? Могу ли я настроить Linux или BSD box для этого? Это не должно быть пуленепробиваемым - неправильно работающий TCP-сервер или агрессивный UDP-сервис могут предположительно обойти все, что я могу сделать на моем конце - но это должно работать для общего случая большей части трафика, состоящего из большого количества RFC-совместимых TCP соединения.
Чтобы было ясно, я не говорю о приоритезации определенных приложений, а скорее о совокупном трафике к / от определенных устройств Ethernet или диапазонов IP-адресов. Предоставление некоторому трафику более высокого приоритета, чем другому трафику, кажется хорошо поддерживаемым, но ситуация менее ясна при попытке равномерно распределить пропускную способность для классов трафика.
В Интернете много плохо написанной / бездумно отрыгнутой / иным образом неинформированной информации о формировании трафика. Документация по аппаратному обеспечению маршрутизатора ужасно неопределенная, поэтому я, кажется, бегаю кругами.
Насколько я понимаю, способ заставить TCP вести себя таким образом - по сути моделировать немного более узкий канал, чем он есть на самом деле, и искусственно отбрасывать пакеты, чтобы заставить его отступить. Поэтому я думаю, что было бы довольно просто дать всем ровно 3 Мбит / с в приведенном выше примере, искусственно отбрасывая любые дополнительные пакеты. Это на самом деле не использует соединение эффективно, так как большую часть времени есть запасная емкость.
Есть ли способ сделать то, что я спрашиваю? Я поступаю неправильно? Я (или, скорее, домохозяйства в вопросах) желаю потратить деньги на это - будь то стандартный маршрутизатор / устройство по умеренной цене или универсальный пакет для запуска дистрибутива Linux или BSD.