Вимірювання одного способу затримки в мережі


20

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

Припустимо, два роботи знаходяться у двох приміщеннях, з'єднаних мережею з різними односторонніми затримками, як показано на малюнку нижче. Коли робот A надсилає повідомлення роботові B, йому потрібно 3 секунди, а коли робот B надсилає повідомлення роботові A, на його приїзд потрібна 1 секунда. Затримки ніколи не змінюються.

Роботи однакові і не мають спільного годинника, хоча вони можуть вимірювати час (наприклад, вони мають годинник). Вони не знають, хто з них - робот A (повідомлення якого затримані 3 секунди), а який - робот B (повідомлення якого затримуються на 1 секунду).

Протокол для виявлення часу туди і назад:

whenReceive(TICK).then(send TOCK)

// Wait for other other robot to wake up
send READY
await READY
send READY

// Measure RTT
t0 = startStopWatch()
send TICK
await TOCK
t1 = stopStopWatch()
rtt = t1 - t0  //ends up equalling 4 seconds

Чи є протокол, який визначає затримку подорожі в одну сторону? Чи можуть роботи виявити, хто з них має більш тривалу затримку відправки повідомлень?

Два робота одна асиметрична мережа


5
Див. Розділ Синхронізація годин в мережі з асиметричними затримками (що вимагає зробити щось можливе з типовою Інтернет-інфраструктурою). Я думаю, що з того, що ми бачили при обговоренні неправильних відповідей на це питання, відповідь на ваше запитання полягає в тому, що це неможливо.
Жил "ТАК - перестань бути злим"

Чи варто ми об'єднати питання, чи вони достатньо різні за ціллю, щоб залишатись окремими?
Крейг Гідні

Ні, це різні питання. У вашому запитанні встановлено, що неможливо в налаштуваннях на двох машинах із простою передачею повідомлення. Я сподіваюсь на рішення, засновані, скажімо, на інформації про затримку, яка буде доступна для деяких проміжних посилань на маршруті між клієнтом і сервером, і є якийсь спосіб поширити цю інформацію до клієнта.
Жил "ТАК - перестань бути злим"

3
Якби було це зробити, теорія відносності Ейнштейна не спрацювала, оскільки це залежить від того, що два спостерігачі, які поділяються між собою в космосі і мають невідомі однобічні затримки, не зможуть домовитися про належний час.
Пітер Шор

NTP дійсно дозволяє / реалізувати вимірювання цієї диференціальної затримки на основі машин, що надсилають один одному свій час, а не лише відстежувати час відправки / отримання власних повідомлень, але й інших серверів за допомогою вмісту msg, див. Відповідь на питання gilles
vzn

Відповіді:


14

Наступна діаграма із написаного мною блогу є наочним доказом того, що це неможливо:

Косий годинник ковзання точно компенсується асиметрією затримки

Зауважте, як час прийому пакетів з кожної сторони залишається однаковим, навіть коли однобічні затримки змінюються (і навіть стають негативними!). Перший пакет завжди доходить до сервера за 1,5 секунди на годиннику сервера, другий завжди досягає клієнта за 2 секунди на годиннику клієнта і т. Д. Зміст пакету та локальний час приходу - це єдине, на чому може базуватися протокол, вміст та час прибуття можуть бути постійними, оскільки асиметрія змінюється, змінюючи також початковий перекіс годинника.

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

Більш формально, ви не можете вирішити довжину ребер, якщо задати лише довжини циклів. Основа циклу має ступінь свободи, що відповідає n -н-1 невідомим перекосам годинника відносно одного з учасників. Ви завжди можете приховати затримки в одну сторону, навіть якщо учасників багато:н-1

Морська хвороба

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


Яка ваша думка з цього приводу? software.internet2.edu/owamp
CMCDragonkai

@CMCDragonkai Майте на увазі, що головоломка є більш обмежувальною, ніж реальність. На практиці у вас є такі варіанти, як вимірювання довжини волоконно-оптичних ліній, ведення журналів у проміжних точках, використання знань топології мережі, повільно перенесення годинника з одного місця на інше тощо. Наприклад, супутники GPS рухаються по відомих орбітах, і ви може використовувати це для усунення ступенів свободи при вирішенні. Тож на поверхні я не бачу жодних проблем з інструментом пінг в односторонній спосіб, доки він чи годинники, на які він покладається, експлуатують частину цієї солодкої солодкої інформації.
Крейг Гідні

О, у такому випадку ви могли б оновити свою відповідь можливими робочими ситуаціями тоді?
CMCDragonkai

@CMCDragonkai Досить їх у коментарях. Вони виходять за рамки головоломки.
Крейг Гідні

Одностороння затримка має значення, наприклад, для ігрових мереж. Крім того, всі кажуть, що це неможливо, але я можу легко вирішити головоломку на папері - коли ви синхронізуєте годинник, все, що вам потрібно зробити, - це виміряти затримку від А до В, відправивши час А на В, затримка A-> B дорівнює B's time - A's sent time, і B-> Буття, що дорівнюєlatency - A->B delay
Ламагеддон

1

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

АБСА1
БСБ1=1
АСА2=9
БСБ2=5
АБ можуть зрозуміти, коли інший робот отримав повідомлення щодо годинника.

Можливо, якщо ви зробите це щедрим питанням, хтось його зламає. До цього часу, кудо.


0

Я знайшов спосіб дізнатися, який вузол є хто (тобто у кого більша затримка повідомлень) та оцінити однобічну затримку подорожі. Хоча інші відповіді правильні, вони ТІЛЬКИ враховують пряме вимірювання годин, що, звичайно, не може працювати. Однак, як я доказую тут, це лише частина історії, оскільки тут працює мій алгоритм для вищезазначеного:

Припустимо, як у реальному житті:

  • Посилання кінцевої пропускної здатності b

  • Кожен вузол має унікальну адресу (наприклад, A і B)

  • Розмір пакету p набагато менший, ніж продукт із затримкою пропускної здатності *

  • Вузли А і В здатні заповнити канал

  • Вузли мають випадкову () функцію

Кожен вузол заповнює канал власними пакетами (позначеними відповідно А або В) АБО пересилає отримані пакети від інших вузлів наступним чином:

Always fill the channel with my own packets except:
if I receive a packet from another node then
   Randomly choose to 
          either forward that packet from the other node
          or discard that packet and forward my own packet

Інтуїтивне пояснення Оскільки продукт затримки * пропускної здатності * більший (оскільки затримка вище), A вдасться отримати більше пакетів, ніж B, тому кожен Вузол може знати, хто вони на діаграмі .

Крім того, при достатньому часі конвергенції, що працює вище алгоритму, відношення пакетів від A до B буде позначати фактичне відношення RTT затримки від A до B і, отже, бажане OTT .

РЕЗУЛЬТАТ МІЖУВАННЯ РЕЗУЛЬТАТИ Ось моделювання, яке доводить вищесказане і показує, як успішно конвергується до затримки на 3 секунди і B конвергується близько 1 секунди затримки:

Перші секунди моделювання

Наступні секунди моделювання

Пояснення фігур: Кожен рядок представляє 1 секунду часу (розмір пакета вибирається таким, щоб мати зрозумілість 1 секунди для передачі). Зауважте, що кожен вузол може запустити algo в будь-який час, не в певній послідовності чи часі. Стовпці такі:

  • NODE A отримує: те, що вузол A бачить у своїй приймальній стороні (це також P4 нижче)

  • NODE A вводить: який вузол A надсилає (зверніть увагу, що це A, або випадково A або B)

  • P1, P2, P3: Три пакети, які перебувають у транзиті (в порядку) між A і B (1 секунда передачі означає, що 3 пакети перебувають у транзиті з затримкою 3)

  • NODE B отримує: що B бачить у своїй приймальній стороні (це P3)

  • NODE B вводить: те, що B надсилає (зверніть увагу, що це B, або випадково A або B на альго)

  • P4: Пакет, який проходить транзитом від B до A (див. Також P1, P2, P3)

  • Лічильник A: Що A вважає для пакетів A, які він бачив

  • A рахує B: Що A вважається для B пакетів, які він бачив

  • B рахує A: Що B вважає для пакетів A, які він бачив

  • B рахує B: Що вважає B для B-пакетів, які він бачив

  • A-> B: затримка, яку A оцінює до B (відношення RTT 4 секунди на основі бачених пакетів)

  • B-> A: затримка, яку B оцінює до A (відношення RTT 4 секунди на основі бачених пакетів)

Як ми можемо бачити, як обидва вузли сходяться і залишаються навколо їхньої справжньої затримки (насправді ми не бачимо, що для A потрібно більше секунд, щоб сходитись, але це конвергує таку ж поведінку, що і B)

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

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

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

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


3
Я не думаю, що це працює. Оскільки пропускна здатність однакова, Єдина відмінність, яку бачать A і B, полягає в тому, що, якщо вони почалися одночасно, B зачекав би 3s перед отриманням будь-яких даних, а A зачекав 1s. Але у них немає спільного годинника, тому вони не знають, що вони почали одночасно. Може бути, A нічого не чує протягом 10 секунд, тому що він почав запускати протокол першим.
Девід Річербі

Немає потреби запускатись одночасно, будь-хто може запуститись у будь-який час. Просто обоє мають працювати деякий час. Дякую, що ви знайшли час для перегляду, але прочитайте ще раз. Це статистичний метод і передбачає конвергенцію. Я не кажу, що я на 100%, це абсолютно правильно, оскільки я не імітував, але просто зроблений вами коментар на мою думку не застосовується. Можливо, це пояснює ідею загальніше: якщо ви приймаєте, що продукт пропускної здатності * затримка відрізняється для двох посилань, то одне посилання насправді міститиме більше пакетів - і це може бути
почуте альго

Я не думаю, що я зрозумів неправильно, але це можливо. Чи згодні ви, що пропускна здатність однакова, тому і А, і В отримують дані з однаковою швидкістю? Якщо так, то чи не обидва вони сходяться в абсолютно одне і те ж?
Девід Річербі,

Так, звичайно, вони отримують з однаковою швидкістю, це не означає, що вони сходяться однаково. У мережі є пакети A і B. Питання полягає в тому, яке співвідношення бачених пакетів A і B. Зараз я запустив просте моделювання, і я постійно отримую упередження. Щоб отримати ідею, оскільки я думаю, я не можу розмістити всю цю справу, припустимо, що b таке, що 1 пакет займає одну секунду передачі. Тоді завжди є 4 пакети в дорозі. Застосовуючи алгоритм і бум, нам вдалося виміряти OTT, уникаючи синхронізованих методів синхронізованих годин / подій, які не працюють із методами статистичної конвергенції!
користувач3134164

Яка «частка пакетів A проти B»?
Жил 'ТАК - перестань бути злим'

0

Це відповідь на @ user3134164, але занадто великий для коментаря.

ПххRхх

  • R1=(1-R2)×(1-П2)R2=(1-R1)×(1-П1)1-R21-П2
  • R1R2R11-R1R21-R2

Ось чому я вважаю, що це вас нікуди не приведе. Будь ласка, вкажіть будь-яку помилку, яку я могла допустити під час цих міркувань.


Ласкаво просимо до інформатики ! Ваша відповідь виглядає добре, але, як ви заявляєте, насправді глибокий коментар до зауваження @ user3134164. Я думаю, ви можете вирішити це питання наступними способами 1) Спробуйте розширити свою відповідь таким чином, що це також відповідь на власне питання. або 2) Створіть нове запитання, яке по суті заявляє про ключове неправильне уявлення з коментаря та самовідповіді користувача3134164 з відповіддю на це. Який із вас підходить, залежить від вас. Я думаю, можливо, поставити нове запитання - це гарна ідея, але, можливо, ви можете розширити більше, ніж я думаю. Запитайте, чи є у вас додаткові запитання.
Дискретна ящірка

Звичайно, @ user3134164 також вільний "просувати" коментар у питання,
Дискретна ящірка

"Px ймовірність того, що робот x обирає власні пакети, коли отримує один з пакетів інших роботів", походить від комп'ютерної функції random (), як у припущенні - наприклад, для двох типів пакетів це буде завжди 0,5. Якщо функція випадкового () є достатньо рівномірною, то можна обчислити "фактичне відношення RTT затримки від A до B". За вашим визначенням R, я думаю, що R1 = (1-R2) * 0,5, тому співвідношення відомо. Тож я все ще вважаю, що моя відповідь справно працює. Дуже дякую, що знайшли час, щоб заглянути.
користувач3134164
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.