Як працює одноранговий через Інтернет?


15

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

Якщо припустити, що у нас є така схема:

  1. Computer-A, IP 192.168.1.2 (шлюз за замовчуванням 192.168.1.1)

  2. Computer-B, IP 192.168.1.3 (шлюз за замовчуванням 192.168.1.1)

  3. Маршрутизатор-C, IP 192.168.1.1 (зовнішній IP 1.1.1.1)

  4. Маршрутизатор-D (зовнішній IP 2.2.2.2)

Комп'ютер-A, Computer-B і Router-C належать до однієї локальної мережі. Маршрутизатор D хоче надіслати дані на Computer-A, але це не може зробити, не пройшовши через Router-C.

Тепер Router-C буде пересилати пакети до Computer-A, якщо порт призначення 1000, і пересилатиме пакети до Computer-B, якщо порт призначення 2000. Але, безумовно, єдиним пристроєм, який знає цей механізм маршрутизації, є сам Router-C! Навіть Комп'ютер-А, ні Комп'ютер-Б не дізнаються про це, правда?

Отже, Router-D може відправити пакет на Computer-A, якщо він надсилає пакет Router-C через порт 1000, але як Router-D знати, щоб відправити пакети через порт 1000, а не сказати порт 1001?

Як програми однорангових програм, такі як Bittorrent, можуть пройти цю проблему? Єдине рішення, про яке я можу придумати, - це маршрутизатор D надсилати пакет до Router-C через усі порти, таким чином, щоб він перейшов до Computer-A, але чи є краще рішення?

Відповіді:


9

Ваша плутанина випливає з деяких неправильних припущень.

Але, безумовно, єдиним пристроєм, який знає цей механізм маршрутизації, є сам Router-C! Навіть Комп'ютер-А, ні Комп'ютер-Б не дізнаються про це, правда?

Що, чому? Тоді чому маршрутизатор налаштований пересилати ці порти до цих IP-адрес? Вам потрібно налаштувати клієнт P2P для використання певного порту, а потім налаштувати маршрутизатор на відповідність.

але як Router-D знати, щоб відправити пакети через порт 1000, а не сказати порт 1001?

Оскільки ви налаштовуєте клієнт P2P для використання конкретного порту (стандартного або нестандартного для цього протоколу).

Єдине рішення, про яке я можу придумати, - це маршрутизатор D надсилати пакет до Router-C через усі порти, таким чином, щоб він перейшов до Computer-A, але чи є краще рішення?

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

Хм, але Bittorrent не змінює поведінку роутера? Оскільки деякий механізм маршрутизації міг бути динамічним, як це було показано на superuser.com/a/187190/78897, як Computer-A може знати про це?

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

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

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


Якщо ви використовуєте таку програму, як SmartSniff або TCPView для контролю ваших з'єднань, ви помітите, що підключення P2P, як правило, матимуть порт, який ви налаштували (або за замовчуванням для клієнта) в якості пункту призначення вхідних з'єднань, або як за замовчуванням, або як за замовчуванням / випадковий порт для джерела та навпаки для вихідних з'єднань.


Хм, але Bittorrent не змінює поведінку роутера? Оскільки деякий механізм маршрутизації міг бути динамічним, як це було показано на superuser.com/a/187190/78897 , як Computer-A може знати про це?
Пейс’єр

Переадресація порту. Ви заздалегідь налаштували його.
UtahJarhead

@Pacerier Якщо і маршрутизатор, і додаток p2p використовують UPnP , переадресація портів може здійснюватися динамічно. У цьому випадку так, Bittorrent дійсно змінює поведінку маршрутизатора.
zero2cx

@ zero2cx, чи все-таки потрібно робити одноранговий, не змінюючи поведінку роутера?
Пейс’єр

@Pacerier, якщо ви хочете мати NAT (декілька систем, що діляться з'єднанням), то вам слід якось налаштувати маршрутизатор, щоб знати, де робити з'єднання (ну, технічно ви могли просто зробити, щоб усі провели все з'єднання з усіма портами, як ви запропонували, але що було б у кращому випадку жахливо). Це можна зробити статично (налаштувати IP-адреси та порти) або динамічно (UPnP).
Synetech

4

Ваше запитання стосується серця Інтернету та самого визначення маршруту. У вашому прикладі маршрутизатор D надсилає дані на комп'ютер A на основі двох приміщень:

  • Повідомлено надсилати дані на комп’ютер А.
  • Це вже оброблені дані з комп’ютера А.

Здається, ваш сценарій передбачає перший варіант - Маршрутизатор D хоче відправити на Комп'ютер А. Але як це дістатися? Це відбувається завдяки використанню таблиць маршрутизації, які спільно використовуються маршрутизаторами.

Маршрутизатор C регулярно надсилає оновлення всім маршрутизаторам, про які знає - включаючи маршрутизатор D - про те, що він "знає" мережу "192.168. ігноруйте це.) Отже, маршрутизатор D вже знає, що маршрутизатор C знає цю мережу.

Отже, коли дані призначені для комп’ютера A, він спочатку адресується мережею. Отже, маршрутизатор D запитує: "Мені потрібно знайти мережу 192.168. * Я це знаю? Ні. Чи я знаю когось іншого, хто це робить? Так. Маршрутизатор C робить. Як дістатися до маршрутизатора C? Через свій 2.2. 2.2 інтерфейс. "

Потім маршрутизатор D надсилає дані до маршрутизатора C. Маршрутизатор C отримує їх і каже: "О, у мене є дані маршрутизатора D, але це для мережі 192.168. Чи знаю я цю мережу? Так, через мою мережу 192.168.1.1" І тоді пересилає його.

Існує ще якась робота для вирішення IP-адреси та MAC-адреси, але я висвітлюю маршрутизацію, як не, а не ARP та локальні мережі.

Ви помітите своє перше припущення - віддалений маршрутизатор повинен знати механізм маршрутизації - тут не грає. Маршрутизатор D не хвилює, чи маршрутизатор C використовує EIGRP, RIP, RIPv2, OSPF або інше. Важливо лише те, що він отримав оновлення. (Звичайно, важливо , як вони отримали оновлення, щоб забезпечити підтримку обох в синхроні. Але знову ж таки, це інша проблема.)

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

Продовжуючи ваш приклад, маршрутизатор C передасть дані по порту 1000 (за вашим сценарієм), тому що можливо, на комп'ютері A очікуються дані на цьому конкретному порту. Але це знає лише тому, що маршрутизатор D надіслав його на порт 1000. А маршрутизатор D надсилає його лише на той порт, тому що джерело даних передав його маршрутизатору D на цьому порту.

Я не розумію, що ваше включення програм bittorrent або P2P відображає питання, яке ви задаєте. Ті ж пояснення застосовувалися б. Маршрутизатори також можуть бути налаштовані за допомогою запуску порту, який асоціює певний пристрій (або IP) з певним портом. Такий, що, коли трафік надходить у порт 1234, маршрутизатори знають надсилати дані на пристрій ABCD. Зазвичай це пов'язано з вихідним портом TCP. тобто якщо я надішлю трафік через порт 7890, маршрутизатор знає, що надходить трафік буде на порт 1234 і надішле мені його.

Але запуск порту не пов'язаний з (віддаленими) рішеннями про маршрутизацію - натомість це стосується внутрішньої таблиці MAC / IP, яку маршрутизатор використовує для локальної мережі.

Оновлення / редагування : для подальшої відповіді та уточнення після коментаря. Маршрутизатор D знає комп'ютер A лише за його IP-адресою (192.168.2.2). Але маршрутизатор C знає комп'ютер A за його IP-адресою та за MAC-адресою. MAC (Media Access Control) - це унікальний (зазвичай ...) 48-розрядний ідентифікатор, який визначається міжнародним стандартом. Кожен пристрій, підключений до локальної мережі (дротовий та бездротовий), повинен мати унікальну MAC-адресу.

Маршрутизатор (маршрутизатор C) асоціює IP-адресу та MAC-адресу разом у таблиці (таблиця MAC-адреси). Отже, коли трафік надходить у маршрутизатор C, і маршрутизатор усвідомлює свою "локальну" для нього, він здійснює пошук таблиці MAC-адрес. Потім маршрутизатор буквально змінює інформацію про адресацію кадру.

Він реконструює (переписує) інформацію про місце 2 рівня, щоб мати MAC-адресу призначення комп’ютера A, але зберігає інформацію про IP-адресу (рівень 3) такою ж.

Якщо маршрут НЕ знає MAC-адресу. Або не має зв’язку IP-MAC у своїй таблиці, він робить щось, що називається ARP (протокол вирішення адреси), щоб запитати "ВОЙ, всі в цій мережі. У вас є ця MAC-адреса?" Або іноді - «Усі, яка ваша MAC-адреса?»). Відповідний пристрій / пристрої реагують і маршрутизатор створює свою таблицю IP-MAC.


Отже, Router-D надсилає пакет Router-C через порт 60000 (попередньо налаштований), Router-C отримує пакет, але як він знає, що цей пакет повинен бути перенаправлений на Computer-A?
Печер'є

1
Маршрутизатор D вже знає кінцеве місце призначення - Комп'ютер А. Він (Маршрутизатор D) знає Комп'ютер А лише за його IP-адресою: 192.168.2.2. Але, маршрутизатор C знає, що комп'ютер A знає два способи: IP-адресу (192.168.2.2) і щось, що називається його MAC-адреса. Я оновлю відповідь додатковою інформацією.
Джон

2

Запуск порту. Як веб-сервер надсилає вам веб-сторінку після того, як ви її просили? Тому що ви це просили. Коли ви його запитуєте, маршрутизатор знає, що очікує відповіді, і коли він її отримає, він пересилає її на відповідний ПК. Деякі програми написані, щоб викликати відкриття в очікуванні сигналу від певного ПК, навіть якщо він насправді не на шляху.

Деякі моделі мають центральний сервер, який використовується для базової комунікації. Наприклад:

  • Client1 входить із сервером для двостороннього зв’язку.
  • Client2 підписується на те саме.

Тепер сервер знає всі файли, які є у Client1 та Client2.

  • Client2 каже: "Я хочу файл X від Client1" на Сервер.
  • Сервер повідомляє Client1 "Client2 хоче файл X".
  • Клієнт 1 надсилає сміттєвий фрагмент даних до загальнодоступної IP-адреси Client2, встановлюючи тригеринг порту, щоб він відкрив порт для відповіді від Client2.
  • Клієнт2 надсилає свій початковий сигнал до публічної IP-адреси клієнта1.

Client1 просто обдурив маршрутизатор, щоб відкрити цей порт для Client2.

У деяких випадках, таких як BitTorrent або оригінал Napster (iirc), вам доведеться переслати порт на маршрутизаторі, щоб він працював оптимально.

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


Наскільки вони знають, які порти використовувати ... Ви налаштовуєте клієнта на прослуховування на певному порті. Ваш клієнт повідомляє рою (як у випадку з BitTorrent), на якому порту ви перебуваєте, щоб інші клієнти знали, до чого підключитися. Ваш комп'ютер сказав їм.
UtahJarhead

Я думаю, ти відповів під час написання мого першого доповнення. Правильно?
UtahJarhead

але як ПК знає механізм маршрутизації, коли саме роутер це робить? Деякий механізм міг бути динамічним, як це було показано в superuser.com/a/187190/78897
Pacerier

Ні, не потрібно знати маршрутизацію. Щоб більшість клієнтів P2P працювали належним чином, вам потрібно правильно настроїти переадресацію портів на маршрутизаторі. Без цього ви можете спілкуватися лише з іншими клієнтами, з якими ви вперше спілкуєтесь. Вони не можуть ініціювати розмову. Я коротко торкнувся цього у своїй відповіді (другий до останнього абзацу)
UtahJarhead

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