13098

Localhost: що це таке і як він використовується у розробці

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

Що таке localhost?

 

Localhost (локальний хост) — це спеціальне зарезервоване ім'я для приватних IP-адрес. Його можна відкрити на будь-якому комп'ютері, і для цього не потрібно навіть картка мережі або підключення до інтернету.

Якщо мережа складається з одного хоста, то його адреса буде такою: 127.0.0.1. У шостій версії протоколу (IPv6) з доменним ім'ям комп'ютера пов'язана інша адреса: ::1/128 (0:0:0:0:0:0:0:1), що прив'язується до мережного інтерфейсу loopback у протоколі TCP/IP.

Часто localhost і 127.0.0.1 вживаються як синоніми, але це не зовсім коректно. З точки зору функціональності вони дійсно виконують одну і ту ж задачу: наприклад, якщо на одній вкладці браузера ви перейдете на адресу localhost, а на другій - на 127.0.0.1, то отримаєте ідентичний результат. Але якщо подивитися трохи глибше, то перша — це мітка, а друга — точна адреса.

localhost oic

 

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

Як виконується внутрішнє оброблення пакетів Loopback

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

Насправді це так: коли дані надходять на 127.0.0.1, стек TCP/IP їх розпізнає і відправляє далі, а повертає на локальний ПК. Таким чином, виходить своєрідна «петля» інформаційного потоку. Також варто додати, що на операційних системах Unix мережевий інтерфейс loopback називається по-іншому: lo або lo0.

Адреса зворотної петлі

За визначенням, адреса зворотної петлі — це адреса, яку використовують у роботі петлеві інтерфейси. За допомогою loopback ви можете розгортати на своєму персональному комп'ютері повноцінні сервери та запускати веб-програми, щоб випробувати їхню роботу в реальних умовах. Тобто, простими словами, якщо ви запустили на своєму ПК веб-сервер, при переході за посиланнями http://127.0.0.1/ або http://localhost/ браузер буде відкривати сторінку сайту вашого пристрою.

Також за допомогою loopback ви маєте можливість тестувати функції IP-стеку свого пристрою. Для цього використовується спеціальна утиліта ping, через яку надсилаються тестові пакети даних.

Для чого використовується файл hosts

Hosts - це системний файл, який є у всіх операційних системах, що працюють на базі Windows та Unix. З його допомогою можна легко перевірити відповідність localhost та IP-адреси.

На платформі Linux файл hosts розташований у каталозі /etc/hosts, а Windows за адресою c:\Windows\System32\drivers\etc\hosts.

При відкритті hosts можна побачити такий вміст:

font

Це означає, що для підключення до localhost на даному комп'ютері можна використовувати адреси 127.0.0.1 або :: 1, оскільки обидва вони асоційовані з цим пристроєм.

Насправді, hosts є попередником технології DNS і сьогодні практично не використовується у великих мережах.

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

Де можна використовувати 127.0.0.1

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

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

Також localhost може використовуватися в розрахованих на багато користувачів іграх для створення сервера на власному комп'ютері. Наприклад, такий підхід застосовується в Minecraft, Counter-Strike, Dota та багатьох інших великих франшизах.

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

Запуск 127.0.0.1 та виправлення можливих проблем

Для отримання доступу до 127.0.0.1 достатньо виконати три прості дії:

  • відкрити браузер;
  • увести до пошукового рядка 127.0.0.1;
  • натиснути на введення.

Щоб не запам'ятовувати та не вводити цифри вручну, можна використовувати мітку localhost. При підключенні до локального сервера можна зіткнутися з помилками. Ось кілька порад, які допоможуть їх уникнути:

  1. Вимкніть Skype, якщо його було встановлено на пристрій.
  2. Запустіть XAMPP від імені адміністратора.
  3. Встановіть на комп'ютер сервіси Apache та MySQL.
  4. Запустіть Apache та MySQL, якщо це не відбулося автоматично.

Після цього все має працювати коректно.

Тестування програмного забезпечення через localhost

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

Для прив'язки доменного імені з новою адресою loopback, наприклад 127.0.1.001, в hosts потрібно додати відповідний запис, який матиме пріоритет перед DNS.

У чому різниця між localhost та 127.0.0.1

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

В основі роботи Інтернету лежать IP-протоколи. Вони здатні ідентифікувати всі хости в мережі IP-адресою, що, власне, і дає можливість здійснювати маршрутизацію пакетів даних. Відповідно, всі пристрої мережі працюють не з іменами доменів, а саме з IP-адресами. При використанні мітки localhost, яка є доменом, виконується резолвінг - процес його перетворення на IP-адресу. Ця процедура здійснюється за допомогою команди resolving nslookup і доступна завдяки розподіленій системі DNS.

Після цього, при запуску будь-якого сервісу, наприклад, бази даних або Nginx, він слухає IP-адресу по певному порту. Така пара називається сокетом. У специфікації RFC 6761 ви можете відстежити, на яку саме IP-адресу перетворюється localhost — це буде loopback-адреса. При цьому специфікації RFC 5735, де описаний loopback-інтерфейс говориться, що це не одна конкретна IP-адреса, а ціла мережа з діапазоном 127.0.0.0/8, яка може включати мільйони різних хостів. Наприклад, loopback також може використовувати адресу 127.1.1.1 та багато інших.

З цього випливає основна проблема використання мітки в конфігураціях — у такому разі ми отримуємо неоднозначність того, в якій саме IP-адреса буде резолвуватись localhost. На практиці, в більшості операційних систем перетворення дійсно здійснюється в 127.0.0.1, але це лише одна з можливих адрес, і вам нічого не заважає використовувати, наприклад, 127.11.11.11.

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

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

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

У чому різниця між 0.0.0.0 і 127.0.0.1

IP-адреса 0.0.0.0 є ідентифікатором спеціального призначення, який виступає як адреса-заповнювач і визначає маршрут за замовчуванням. Отже, якщо пристрій користувача не буде підключений до мережі з протоколом TCP/IP, йому надається ідентифікатор 0.0.0.0. Якщо подивитися трохи глибше, то адреса 0.0.0.0 може означати недійсний, невідомий або непридатний хост, і охоплює всі IPv4 адреси на локальному пристрої. У ситуаціях коли хост має дві адреси: 192.168.1.1 і 10.1.2.1, а сервер слухає 0.0.0.0, він буде доступний для обох адрес.

Також адреса 0.0.0.0 може використовуватися програмним забезпеченням, яке працює через TCP/IP, для вказівки моніторингу мережного трафіку по всіх IP-адресах, які призначені мережевим інтерфейсам.

Бувають ситуації, коли конфіг робочої станції для роботи в мережі TCP/IP налаштовано коректно, але в заголовку протоколу відображається адреса 0.0.0.0. Щоб позбавитися цієї проблеми можна виконати такі дії:

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

Завершення

За допомогою локального хоста розробники можуть тестувати клієнт-серверну архітектуру програми на комп'ютері без підключення до інтернету, виявляти помилки в мережі та налаштовувати сторонні послуги. При цьому, щоб уникнути більшості помилок, рекомендуємо вказувати в конфігураціях точну IP-адресу 127.0.0.1, а не мітку localhost.