З'єднання комп'ютерів через інтернет з динамічним IP


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

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

Як це виглядає в теорії?

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

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


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

Наш зовнішній адреса: 42.18.109.18

Наш внутрішній адреса: 118.204.0.2

Адреса нашого NAT: 118.204.0.1

З'єднання з нашого внутрішнього адреси 118.204.0.2, по якому йде запит на 21 порт. Цей запит потрапляє до NAT. В свою чергу він збереже у себе в таблиці, для нас відповідність внутрішнього IP 118.204.0.2 і порту номер 21. Тепер, він створить зовнішній порт, у якого буде номер, наприклад 51921 та адресу (42.18.109.18). Тепер NAT направить наш запит на FTP сервер до 21 порту. Сервер встановить, що запит був отриманий з IP адреси 42.18.109.18 і порту 51921. Таким чином цей порт став переадресатором, що визначає наш комп'ютер. Після закриття з'єднання, через кілька секунд, дані про зв'язок порту з даним комп'ютером будуть видалені.

soedinenie-kompyuterov-cherez-internet-1Багато програм, які встановлюють пряме з'єднання між двома комп'ютерами в мережі, вміють створювати такі з'єднання, які потім постійно утримуються.

Що отримуємо на практиці?

Вивчимо цю тему трохи ближче використовуючи, в якості прикладу, ICQ. Після запуску, встановлюється підключення до сервера аськи, і він відкриває на нашому комп'ютері порт, наприклад, це буде 5191. У іншого комп'ютера теж відкриється порт 5191. IP адреси і порти обох комп'ютерів в NAT можуть виглядати приблизно так:

Перший комп'ютер: 43.12.102.14:56742

Другий комп'ютер: 43.12.102.15:61782

Після визначення обох учасників, сервер повідомить кожному зовнішній IP з портом іншого комп'ютера. Потім, перший учасник виконає підключення до зовнішнього адресою другого і через NAT виконує переадресацію на внутрішній порт з номером 5191. Після підтвердження другим комп'ютером згоди на підключення, буде відкрито з'єднання і почнеться передача даних. Далі, по завершенню операції, з'єднання закриється і через 10 секунд NAT видалить цей порт з таблиці відповідностей, щоб використовувати його для інших зв'язків.

soedinenie-kompyuterov-cherez-internet-2

Укладання і реалізація

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

А як же бути з серверами? Якщо є бажання випробувати своїми силами цю фішку, але немає зовнішнього сервера, здатного визначати зовнішні IP у користувачів? В цій ситуації теж можна викрутиться скориставшись, наприклад, STUN серверами. Їх дуже багато і вони зустрічаються на кожному кроці. Серед них можна зустріти і публічні, безкоштовні варіанти. Такі сервера використовують протокол UDP, його можна зустріти в торрентах. А ще існують подібні сервера для роботи із протоколом TCP. Так що дерзайте і не зупиняйтеся на досягнутому і тоді обов'язково досягнете успіху!