У термінах TCP/IP, як працює обмежувач швидкості завантаження в офісі?

Припустимо, офіс людей, вони хочуть, щоб обмежити HTTP завантаження до максимум 40% пропускної здатності своєї швидкості підключення до Інтернету, щоб він не блокує інший трафік.

Ми говоримо, що "це не підтримується вашим брандмауером", і вони кажуть про неминучість рядка "ми використовували, щоб ми могли це зробити з нашим Netgear/DLink/DrayTek".

Думаючи про це, завантаження виглядає так:

HTTP GET request
Server sends file data as TCP packets
Client acknowledges receipt of TCP packets
Repeat until download finished.

Швидкість визначається тим, наскільки швидко сервер відправляє дані до вас, і наскільки швидко ви його визнаєте.

Отже, щоб обмежити швидкість завантаження, у вас є два варіанти:

1) Попросіть сервер повільніше посилати вам дані - і я не думаю, що існує будь-яка функція протоколу для запиту в TCP або HTTP.

2) Підтверджуйте пакети більш повільно, обмежуючи швидкість завантаження, а також знищуйте швидкість завантаження.

Як пристрої виконують це обмеження? Чи існує стандартний спосіб?

8
Швидкість, що обмежує, наскільки швидкими отриманими пакетами дозволяється виходити з брандмауера в локальну мережу, призводить до більш повільних підтверджень і обробці перевантажень в стеку TCP-сервера, що передає, повертаючи швидкість передачі. Дякую. Я можу змусити його працювати так з тестінгом. Я відповів декільком відповідям, але я можу лише відзначити одну відповідь.
додано Автор TessellatingHeckler, джерело

5 Відповіді

Сам TCP реалізує контроль перевантаження.

Ці обмежувачі швидкості просто кинуть пакети за межі. TCP обробляє це, гарантуючи, що всі пакети надходять і всі надходять в порядок; клієнт не ACK для знятих пакетів, і вони повторно передаються сервером.

Стек TCP сервера буде повторно надіслати пакети, і він також набере трохи назад по швидкості відправки, оскільки він показує, що між ним і клієнтом є перевантаження. Це скорочуватиметься до тих пір, поки обмежувач швидкості знову не зменшить пакети і так далі.

11
додано
@ user606723 Якщо торренти є проблемою, ви повинні використовувати формувач пакетів на виході, щоб відкинути цей трафік. Це дозволить скоротити торрент від трекера і утримати інших людей, що завантажують один і той самий потік із затоплення вашого входу з з'єднаннями. Проблема вирішена.
додано Автор Code Bling, джерело
Так, так. Сервер може просто продовжувати викидати дані за вашим посиланням, насичуючи його до застосування QoS - але, якщо це хороший громадянин TCP, його швидкість надсилання встановить приблизну рівновагу зі швидкістю його дані фактично проходять через обмеження швидкості.
додано Автор Kar, джерело
@ user606723 Чому так, контроль за перевантаженням матиме складну боротьбу, коли тисячі з'єднань постійно ініціюються за допомогою швидкого запуску TCP, оскільки нові з'єднання нічого не знають про стан з'єднання, яке вони створюють. Хоча сотні активних зв'язків? Можливо, це призведе до уповільнення повільного домашнього посилання.
додано Автор Kar, джерело
Тому я повинен застосовувати норму політики QoS, яка обмежує швидкість витікання HTTP-трафіку через/LAN/інтерфейс? А потім просто відпустити TCP. "він також буде набирати назад трохи по його швидкості відправки" це інша частина я був відсутній.
додано Автор TessellatingHeckler, джерело
Так, TCP реалізує власний контроль за перевантаженням, але це не обов'язково є ефективним. Це знає кожен, хто має досвід роботи з торрентами. В основному, більшість реалізацій контролю перевантажень TCP розбиваються, коли в мережі є сотні активних з'єднань.
додано Автор aetaur, джерело
@ShaneMadden, це не нові з'єднання, які є проблемою. Це той факт, що алгоритм намагається періодично відновлювати швидкість. Як це робиться, інший потік почне виявляти втрату пакетів, сповільнювати .. інший буде прискорюватися .. круглий і круглий.
додано Автор aetaur, джерело

Найкращий опис, який я коли-небудь чув, що мав сенс притаманного методу TCP, був виключений з недавнього Підкаст Security Now . Щоб процитувати Стіва Гібсона:

так що закінчується тим, що є своєрідною системою, яка, з огляду на обмеження, я маю на увазі, це дійсно здається фанк і грубим. "

5
додано

Отже, щоб обмежити швидкість завантаження, у вас є два варіанти:

     

1) Надайте серверу повільніша передача даних, і я не думаю, що існує будь-яка функція протоколу для запиту в TCP або HTTP.      

2) Підтверджуйте пакети більш повільно, обмежуючи швидкість завантаження, а також знищуйте швидкість завантаження.

3) Ваш пристрій маршрутизатора/брандмауера розміщує вхідні дані у сегмент QoS і лише спорожняє цей сегмент за потрібною швидкістю. Вхідні дані будуть адаптуватися до цієї швидкості, оскільки комп'ютери всередині будуть бачити лише отримання підтвердження на цій швидкості. Крім того, випадковий (цілеспрямовано) скинутий пакет дійсно добре працює для уповільнення з'єднання.

При спробі знайти пристрій, який обробляє це, шукайте QoS (якість обслуговування) у конфігурації/документації. Для цього також зручні коробки Linux (або BSD).

3
додано
@TessellatingHeckler Так, це все. Крім того, "вибух" не повинен бути дуже великим вибухом, за допомогою en.wikipedia.org/ wiki/Повільний запуск .
додано Автор Tom, джерело
Це майже має сенс - тому техніка полягає в тому, щоб обмежити швидкість підтверджень і зробити це, прикидаючись пристроєм ЛВС, який сервер посилає повільніше, ніж він насправді? Отже, спочатку вибухне з'єднання, а не після цього?
додано Автор TessellatingHeckler, джерело

Ви використовуєте брандмауер або пристрій, що підтримує обмеження якості QoS (якість обслуговування).

Ви могли б побудувати систему Linux, щоб діяти як офісний шлюз, і використовувати її для формування трафіку для досягнення цієї мети. Просто потрібно встановити декілька мережевих адаптерів, а потім кожна машина вказує на шлюз.

Як бонус, ви можете налаштувати проксі-сервер на ньому, щоб також полегшити трафік. Щось на зразок кальмара. Можливо, це також можуть бути роздачі пристроїв маршрутизації під ключ.

2
додано
@TessellatingHeckler: Метод, який мені подобається, також дозволяє використовувати ECN, який фактично робить команду відправляючого сервера сповільнювати роботу без падіння пакетів. Цей метод полягає у застосуванні обмежувача швидкості, такого як RED, до пакетів залишення в інтерфейсі LAN, замість того, щоб намагатися використовувати вхідний фільтр на інтерфейсі WAN.
додано Автор Jason Down, джерело
Він може формувати трафік, де ви можете керувати ним. Немає можливості сказати віддаленому серверу обмежити швидкість, з якою ви отримуєте дані, але ви можете знизити його в точці входу. В іншому випадку вам доведеться поговорити зі своїм провайдером про формування трафіку в їхній мережі.
додано Автор YetAnotherRandomUser, джерело
Крім того, проксі-сервер може також полегшити деякі затори. Але в іншому випадку вам доведеться формувати його в точці входу.
додано Автор YetAnotherRandomUser, джерело
Як QoS допомагає? До того часу, коли ваш пристрій може застосувати QoS до завантаження, вхідний трафік вже потрапив через інтернет-з'єднання і потенційно заблокував його під час цього. QoS може застосовуватися до вихідного трафіку, але він не може нічого робити з вхідного трафіку, оскільки до того часу, коли він бачить трафік, занадто пізно.
додано Автор TessellatingHeckler, джерело
Моїм оригінальним питанням було: здається, ви не можете формуватися на вході, тому що будь-який контроль, який ви можете застосувати, відбувається після того, як трафік пройшов через вузьке місце, як з цим може мати справу будь-яка технологія? "Застосувати QoS, наприклад, у Linux" і "використовувати формування трафіку" може бути практично що робити, але я шукав пояснення того, як це може допомогти. (тепер у деяких відповідях є деякі).
додано Автор TessellatingHeckler, джерело

Протокол HTTP не надає можливості для обмеження використовуваної смуги пропускання, і навіть якщо це станеться, це буде налаштування на стороні клієнта, на якому мережеві адміністратори не можуть мати ніякого контролю.

Обмеження пропускної здатності (також відоме як "Якість обслуговування") зазвичай управляється на маршрутизаторах/брандмауерах, які обробляють весь вхідний і вихідний трафік в/з мережі; ті, які підтримують цю функцію, зазвичай дозволяють налаштовувати такі політики, як "дозволяти будь-якому одному клієнтському комп'ютеру використовувати не більше 10% всієї доступної смуги пропускання", або "надавати пріоритет SMTP над FTP, щоб повідомлення електронної пошти могли перетікати навіть тоді, коли хтось виконує важку завантаження ".

Як саме це виконується, залежить від використовуваного маршрутизатора/брандмауера, але найпростішим способом є просто викинути пакети, які перевищують налаштовані межі; TCP гарантує, що вони отримають повторну передачу, і в кінцевому підсумку зможуть пройти через вузьке місце.

2
додано