Імітація повільного підключення до Інтернету


188

Я знаю, що це якесь дивне питання. Оскільки я зазвичай розробляю програми на основі "припущення", що всі користувачі мають повільний інтернет. Але хтось думає, що існує спосіб програмного моделювання повільного підключення до Інтернету, тож я можу "побачити", як працює програма у різних "швидкостях з'єднання"?

Мене не хвилює, якою мовою користуються. І я не шукаю зразків коду чи нічого, просто цікавлюсь логікою, що стоїть за ним.

Відповіді:


109

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

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

ДОБАВЛЕНО : Ця стаття в блозі Павла Дончева про Software Technologies показує, як створити спеціально змодельовані швидкості: Обмеження швидкості підключення до Інтернету за допомогою Fiddler .


6
Привіт, я написав невеликий посібник щодо імітації повільного інтернет-зв’язку, який може бути корисним: developertipoftheday.com/2010/12/… - повне розкриття інформації - це мій власний блог, але про всяк випадок, коли це допомагає, оскільки я все для поширення добре слово
фіддлера

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

@SamSaffron, Вибачте, щоб викопати такий старий пост, але чи знаєте ви будь-які інші інструменти, які допомагають у моделюванні повільних стартів?
Аніш Рамасвамі

@AnishRam Найкращий вибір - використовувати dummynet / ipfw, що постачається з bsd та сім'єю, freebsd, osx тощо barkingiguana.com/2009/12/04/…
Сем Сафрон

@AnishRam Також див. Netem linuxfoundation.org/collaborate/workgroups/networking/netem може імітувати купу умов за допомогою iproute2.
Філіп Рік

154

Починаючи з Chrome 38, ви можете це зробити без плагінів. Просто натисніть на оглянути елемент (або F12гарячу клавішу), потім натисніть на "переключити мод пристрою", введіть тут опис зображенняі ви побачите щось подібне:

введіть тут опис зображення

Серед багатьох інших функцій він дозволяє імітувати певне підключення до Інтернету (3G, GPRS)

PS для людей, які намагаються обмежити швидкість завантаження. На жаль, наразі це неможливо.

PS2 тепер вам нічого не потрібно перемикати. Панель дроселювання доступна прямо з мережевої панелі.введіть тут опис зображення

Зауважте, що натискаючи кнопку No дроселювання, ви можете створити власні параметри дроселювання.

введіть тут опис зображення


2
Тепер утилізація інструментів Chrome Dev обмежує швидкість завантаження та завантаження. Але це обмежує лише поточну сторінку в Chrome, тому ви не можете використовувати її для тестування своєї сторінки в інших браузерах. Для цього вам потрібно скористатися іншими інструментами, такими як Fiddler.
Леонід Василев

3
Варто відзначити, що в даний час WebSockets не заглушені
mseddon

Дроселювання завантаження працює не в декількох версіях Chrome, включаючи останню версію (70.0). На трекері є звіт про помилку .
Метт

На мій досвід, найбільшою причиною повільності в Інтернеті є невмілий DNS кабельних провайдерів, який не в змозі вирішити рекламні сервери або CDN. Іноді вся сторінка залишається порожньою, поки спроба їх вирішити не вдасться або не припиниться. Чи може Chrome це імітувати?
StackOverthrow

45

1
Кондиціонер мережевих посилань підтримує Apple (так що він стабільний і надійний), але це стосується лише симулятора Xcode.
Бен Уілер

4
@BenWheeler Нещодавно випробував це, безумовно, застосовується система широко, навіть localhost
aromero

2
Я можу підтвердити, що кондиціонер Network Link дійсно застосовується до всього мережевого стеку.
Фред Волмер

14

На машинах Linux можна використовувати wondershaper

apt-get install wondershaper

$ sudo wondershaper {interface} {down} {up}

{down} і {up} - пропускна здатність у кбіт / с

Так, наприклад, якщо ви хочете обмежити пропускну здатність інтерфейсу eth1 до 256kbps висхідної лінії зв'язку та 128kbps низхідній лінії зв'язку,

$ sudo wondershaper eth1 256 128

Щоб очистити межу,

$ sudo wondershaper clear eth1 

13

Я використовував http://www.netlimiter.com/, і він працює дуже добре. Не тільки обмежують швидкість для окремих процесів, але й показують фактичні швидкості передачі.


Більшість інших інструментів забезпечують контроль пропускної здатності за допомогою штучної затримки, що, здається, не стосується netlimiter, що є хорошою справою. Однак врешті-решт це комерційний інструмент (з пробною версією) і доступний лише під Windows.
Олександр Стельмачонек

6

Є проксі-сервери TCP, такі як iprelay і Sloppy, які формують пропускну здатність, щоб імітувати повільні з'єднання. Ви також можете робити пропускну здатність та імітувати втрати пакетів, використовуючи засоби фільтрації IP, такі як ipfw та iptables.


Дякую, я погляну на iprelay та Sloppy joe.

Дякую, ipfw чудово працює. Ось короткий посібник, який я побачив, що було корисним: barkingiguana.com/2009/12/04/…
Eric Nguyen


4

Використовуйте веб-проксі налагодження з функціями дроселювання, як-от Чарльз або Фіддлер .

Ви знайдете їм корисні веб-розробки взагалі. Основна відмінність полягає в тому, що Чарльз є безкоштовним, а Fiddler - безкоштовним.


Ви запускаєте його як проксі. Браузер автоматично підключається до нього, і він пересилає запити на ваш веб-додаток.
Бен М

Для Fiddler він має обидва режими роботи всередині / зовні браузера.
Кен Д

4

Крім того, для імітації повільного з'єднання на деяких * nixes, ви можете спробувати використовувати ipfw . Більше інформації надає відповідь Бен Ньюмена на це питання Quora


2

Використовуйте такий інструмент, як TCPMon . Це може підробити повільний зв'язок.

В основному, ви запитуєте його саме таку річ, і він просто пересилає такий же запит на реальний сервер, а потім затримує відповідь лише встановленою кількістю байтів.


2

Ви можете використовувати NetEm (Network Emulation) як проксі-сервер для емуляції багатьох мережевих характеристик (швидкість, затримка, втрата пакету тощо). Він керує мережею за допомогою iproute2 пакета і ввімкнено в ядрі більшості дистрибутивів Linux.

Він управляється програмою tcкомандного рядка (з пакету iproute2 ), але є також деякі графічні інтерфейси для веб-інтерфейсу для NetEm, наприклад PHPnetemGUI2 .

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

Для вашої програми це абсолютно прозоро, ви можете налаштувати операційну систему на використання проксі-сервера NetEm, тому всі з'єднання з цієї машини пройдуть через NetEm. Або ви можете налаштувати лише свою програму, щоб використовувати її як проксі.

Я використовую його для тестування продуктивності програми Android у різних емульованих низькопродуктивних мережах.


1

Mac OSX з 10.10 має додаток під назвою Murus Firewall , який діє як графічний інтерфейс для pf, заміною ipfw.

Він дуже добре працює для загальної системи або домену, що залежить від домену. Я просто зміг скористатися нею, щоб перенести швидкість завантаження між 300 Кбіт / с і 30 Мбіт / с, щоб перевірити, як налаштовується потоковий відеоплеєр.


0

Існує також інший інструмент під назвою WIPFW - http://wipfw.sourceforge.net/

Це трохи стара школа, але ви можете використовувати її для імітації більш повільного зв'язку. Це на базі Windows, і цей інструмент дозволяє адміністратору відстежувати, скільки трафіку отримує маршрутизатор з певної машини або, наприклад, скільки трафіку WWW він пересилає, наприклад.


0

Оновлення цього (через 9 років після того, як його запитали), як відповідь, яку я шукав, не згадувалося:

Firefox також має попередні налаштування для швидкості з'єднання. Знайдіть їх на вкладці Network Monitor інструментів розробника. За замовчуванням - "Без дроселювання".

Найповільнішим є GPRS ( швидкість завантаження: 50 Kbps, швидкість завантаження: 20 Kbps, мінімальна затримка (мс): 500 ), починаючи від "хорошого" та "регулярного" 2G, 3G і 4G до DSL і WiFi ( швидкість завантаження: 30Mbps, завантаження швидкість: 15 Мбіт / с, мінімальна затримка (мс): 2 ).

Детальніше в документах Інструменти розробника .


0

Для Linux може бути корисним наступний перелік робіт:

Особисто, хоча Dummynet хороший, я вважаю NetEm найбільш універсальним для моїх випадків використання; Мене зазвичай цікавить ефект затримок, а не пропускна здатність (тобто проблеми з підключенням до Wi-Fi), і це дуже просто емуляція випадкових втрат / пошкодження пакетів і т. Д. Це також дуже доступно і безкоштовно (на відміну від апаратної Linktropy ).

З іншого боку, для Windows, незграбність є приголомшливою. Я також хотів би додати, що (щодо веб-сайтів) заглушка веб-переглядача не є точним методом емуляції мережевих проблем у реальному житті (я вважаю, що "TKK" прокоментував декілька причин, чому вище).

Сподіваюся, це допоможе комусь!


0

Один поширений випадок формування єдиного TCP-з'єднання насправді може бути зібраний з подвійних пар socatта cpipeв UNIX-манері, як це:

socat TCP-LISTEN:5555,reuseaddr,reuseport,fork SYSTEM:'cpipe -ngr -b 1 -s 10 | socat - "TCP:localhost:5000" | cpipe -ngr -b 1 -s 300'

Це моделює з'єднання з пропускною спроможністю близько 300Кб / с від вашої служби в :5000і до приблизно 10 кілобайт / с і прослуховує :5555вхідні з'єднання. Застереження : Зауважте, що це за з'єднання , тому кожне окреме TCP-з'єднання отримує цю суму.

Пояснення: Зовнішня (зліва) socatпрослуховує дані параметри на :5555сервері розгалуження. Перша cpipeкоманда в SYSTEM:...опції потім вимикає дані, що потрапили в сокет: 5555 (і виходить з першого, зовнішнього socat), щонайменше 10 кбіт / с. Ці дані потім пересилаються за допомогою іншого, socatякий підключається localhost:5000(там, де послуга, яку ви хочете сповільнити, має прослуховуватися). Дані від localhost:5000 цього вводиться у праву cpipeкоманду, яка (з заданими значеннями) зменшує її до приблизно 300 кБ / с.

Важливий варіант -ngrдля cpipe. Це змушує cpipe не жадібно читати з вхідного файлового дескриптора. В іншому випадку ви можете застрягти з даними в буферах, не пересилаючи їх і чекаючи відповіді.

Використання більш поширеного bufferінструменту замістьcpipe , можливо, також можливо.

(Подяки: Це засновано на рецепті "double-tee" Крістофа Лора з socatдокументації)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.