Що відбувається, коли з'єднання з Інтернетом швидше швидкості запису на зберігання?


28

Якщо хтось спробував завантажити файл зі швидкістю 800 Мб / с (100 Мб / с) на жорсткий диск зі швидкістю запису 500 Мб / с (62,5 Мб / с), що буде? Чи обмежила система швидкість завантаження?


5
Це, і це було з моменту створення мереж, цілком поширена ситуація, коли ви перебуваєте в швидкій мережі, як, наприклад, в університеті поза напруженими годинами.
Пітер - Відновіть Моніку

4
Оскільки ви можете програмувати, ви можете легко спостерігати за цим самим. Напишіть простий сервер і клієнт TCP (ви повинні мати можливість знайти приклади для бібліотеки сокетів на вашу обрану мову), дозвольте сервісу доставляти дані якнайшвидше, а також змініть клієнта читати ці дані лише з заданою швидкістю (сон між прочитаними). Перевірте, чи отримані дані недоторкані. Ви навіть можете спостерігати за пакетами, надісланими за допомогою проводів або подібних.
Carsten S

3
Маючи досвід, описаний у публікації @ PeterA.Schneider, я можу вам сказати, що ви повинні врахувати буфери оперативної пам’яті операційної системи. Поки вони не заповняться, ви ефективно можете зберігати завантажені дані зі швидкістю оперативної пам'яті. (Зазвичай у тисячах мегабайт в секунду.)
Ніхто

@Nobody І, звичайно, завжди є безглузді канали, які складають Інтернет-магістраль, яка передає дані так швидко, що оперативна пам'ять вашого типового комп'ютера навіть не може підтримувати!
Корт Аммон - Відновіть Моніку

Ваш комп'ютер генерував би ICMP-запит, щоб повідомити, щоб він сповільнився. Однак на цих мізерних швидкостях ви також можете отримати SSD або M.2 ssd, і тепер ваша швидкість запису настільки висока 100 Мб / с буде легко. Деякі M.2 мають 1500 МБ / с запису. Помістіть 2 або більше в RAID, і ви можете багаторазово перевищувати цю швидкість. звичайний SSD може бути 300-450MB / s залежно від потужності та марки. storagereview.com/samsung_960_pro_m2_nvme_ssd_review
cybernard

Відповіді:


41

Багато протоколів, включаючи TCP, який є найбільш широко використовуваним протоколом в Інтернеті, використовують те, що називається управління потоком. Контроль потоку просто означає, що TCP забезпечить, щоб відправник не перевантажував приймач, надсилаючи пакети швидше, ніж він може спорожнити його буфер. Ідея полягає в тому, що вузол, що приймає дані, надішле якийсь зворотній зв'язок до вузла, який надсилає дані, щоб повідомити про його поточний стан. Отже, двосторонній зворотний зв'язок дозволяє обом машинам оптимально використовувати свої ресурси та запобігати виникненню проблем через невідповідність їх обладнання.

https://en.wikipedia.org/wiki/Flow_control_(data)


2
... в ідеалі. Bufferbloat означає, що ймовірно, що кілька комутаторів будуть зберігати і чекати, щоб переслати постійно зростаючу купу пакетів (що може дещо пом'якшити протокол передачі, який вимагає продовження періодичних ACK).
Ерік Тауерс

3
Ви можете відзначити, що це відрізняє TCP (так, він має контроль у своєму імені) від UDP, який із задоволенням продовжуватиме надсилати, незалежно від можливостей споживача.
Пітер - Відновіть Моніку

5
@Fabian Це все одно відбувається постійно. Кеш жорсткого диска ОС дозволяє «надсилати» дані на жорсткий диск набагато швидше, ніж це можна записати, заповнивши кеш-пам'ять в оперативній пам'яті та записуючи на диск якомога швидше. Отже, залежно від кількості (невикористаної) оперативної пам’яті на вашій машині, ОС може буферувати кілька десятків до сотень МБ файлу в оперативній пам’яті до того, як вона дістанеться до диска. Однак розмір кешу є компромісом, оскільки дані, які програма може вважати вже збереженими на диску, можуть не знаходитися протягом певного часу, що може призвести до несподіваної втрати даних у разі відмови (живлення) або подібного.
JimmyB

2
@Fabian: це ви можете побачити в діалоговому вікні копіювання файлів у Windows, починаючи з 8.1. У розширеному режимі він показує швидкість передачі, і ви можете помітити, що перша половина секунди або близько того дуже швидка, і якщо файл більший, ніж міг би бути переданий під час цього, то швидкість значно падає, до постійна ставка. Ця швидка швидкість на початку була обумовлена ​​кешем. Після її заповнення швидкість зменшується.
vsz

1
@EricTowers Ні, захист буфера відбувається лише тоді, коли вузьке з'єднання є вузьким місцем. (На жорсткому диску ви можете побачити форму захисного блоку, яка сповільнить інші операції на жорсткому диску, але це не вплине на інші мережеві з'єднання)
user253751

12

що б сталося?

  • Байти, які не вдається записати на жорсткий диск вчасно, десь будуть тимчасово забуферовані; дуже ймовірно, що деякі з них будуть буферизовані в додатку, який "перетворює" мережевий трафік в трафік жорсткого диска (тобто ваш браузер), а у випадках більш тривалого перевантаження - частини нижнього рівня стека (тобто мережева підсистема вашої PC) також мали б буфери на нижчих рівнях, які б заповнювались до повної.
  • Інформація про те, що дані надходять занадто швидко, потім певним чином поширюється назад до відправника. У випадку TCP / IP це означає, що є частина протоколу TCP, яка повідомляє відправника, що він повинен припинити надсилання. Сторінка Вікіпедії на TCP / IP каже, що найкраще, коли вона говорить:

    Його [TCP] відповідальність включає передачу повідомлень від кінця до кінця, незалежно від базової мережі, а також контроль помилок, сегментацію, контроль потоку, контроль заторів та ...

  • Зрештою, "система" (не обов'язково комп'ютер одержувача, а загальна система, що складається з відправника, мережі та одержувача) опосередковано "обмежуватиме" швидкість завантаження. Хоча в жодному разі не існує змінної швидкості в існуванні. І мережевий трафік, і трафік жорсткого диска є на основі блоку, тобто затримки між цими блоками набуватимуть досить довго (на більш швидкій стороні мережі), поки чиста "швидкість" (пропускна здатність) в середньому не буде такою, як повільна швидкість вашої Жорсткий диск.

Чи обмежила система швидкість завантаження?

Не буквально. Кілька десятків років тому комп'ютери дійсно спілкувалися з синхронними швидкостями (тобто модемами з фіксованими параметрами швидкості). Це, на деякому відносно низькому рівні, також відбувається сьогодні; тобто ваш DSL або кабельний модем, ймовірно, матимуть певну задану швидкість, з якою він спілкується зі своїм прямим фізичним компонентом висхідної лінії зв'язку. Але в 2017 році все це досить складно, що майже всі компоненти досить динамічні. У старі добрі часи модеми часто фізично могли говорити лише з певною швидкістю, і це навіть потрібно було встановити перед тим, як набрати номер. Існують (були) деякі мережеві протоколи на зразок банкомату, які намагалися отримати синхронну широкосмугову мережу, але вони вийшли не так добре, порівняно з TCP / IP.

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

Також зауважте, що у вашому прикладі може бути навіть більше учасників. Мережевий інтерфейс може мати ще багато роботи (інші підключення до ПК). Деяка частина мережі по дорозі може бути зайнята (член сім’ї займається серфінгом або переглядом відео). HDD може одночасно робити три великі записи файлів. Тому не було б сенсу спеціально встановлювати "швидкість", яка може бути обмежена.


2

Завантаження файлів (як правило) відбувається через протокол під назвою TCP. У TCP відправник не надсилає жодних даних, поки одержувач не готовий їх отримати.

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

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

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