Рубріки: Теорія

Що таке 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 легше вимовляти та запам’ятовувати, іноді йому може відповідати localhost.localdomain

Внутрішня обробка пакетів Loopback

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

Так, якщо дані надійдуть на 127.0.0.1, з першим октетом стек TCP/IP ідентифікує їх і надішле назад на локальний комп’ютер.

Таким чино виходить «петля» цифрового потоку даних. На системах Unix мережевий інтерфейс loopback називається lo  або lo0.

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

Адреса зворотної петлі — це адреса, яка використовується петлевими інтерфейсами.

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

За допомогою loopback (через «продзвон» тестовими пакетами утилітою ping) можна виконувати тестування функцій IP-стеку.

Маршрутизація через hosts

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

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

На платформі Linux ви його побачите в каталозі /etc/hosts, у Windows ОС він розташований у c:\Windows\System32\drivers\etc\hosts.

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

Якщо ви відкриєте вміст файлу, то побачите, приблизно, наступне:

# localhost name resolution is handled within DNS itself.
# 127.0.0.1       localhost
# ::1             localhost

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

Для чого використовується 127.0.0.1

З використанням адреси 127.0.0.1 фізичне устаткування (модем, мережевий адаптер, маршрутизатор тощо) потрібно, так як інтерфейс реалізується лише на рівні драйвера в ядрі використовуваної ОС.

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

У деяких іграх, які розраховані на велику кількість користувачів (наприклад, Minecraft), localhost можна використовувати, щоб розмістити сервер на власному ПК.

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

Як отримати доступ до 127.0.0.1

Отримати доступ 127.0.0.1 дуже просто. Для цього:

  • відкрийте браузер і введіть в адресний рядок 127.0.0.1;
  • натисніть клавішу Enter.

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

Буває, що під час підключення до 127.0.0.1 можуть виникати проблеми.

Досвідчені користувачі діляться порадами, як цього уникнути:

  • відключіть Skype (нічого не потрібно буде змінювати в налаштуваннях);
  • запустіть XAMPP від ​​імені адміністратора;
  • встановіть сервіси Apache та MySQL натисканням на червоні хрестики у стовпці Service;
  • запустіть Apache та MySQL.

Все має спрацювати! Без проблем заходимо як на 127.0.0.1, так і на localhost.

Використання тестів для програмного забезпечення через Localhost

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

Якщо служба програмного забезпечення пов’язана з фізичним інтерфейсом, для неї можливий доступ із зовнішнього оточення. Відповідно, якщо програма пов’язана з логічним інтерфейсом loopback , до нього дозволено доступ із локальної системи, а доступ із зовнішнього світу неможливий.

Займатися розробкою та тестуванням коду з локального вузла набагато швидше та простіше, ніж з будь-якого віддаленого сервера. Щоб прив’язати ім’я домену до нової адреси loopback(скажімо, 127.0.1.100) у файлі /etc/hosts залишаємо відповідний запис, який матиме пріоритет перед службою DNS.

Чим localhost відрізняється від 127.0.0.1?

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

Давайте розберемося, чому краще використовувати 127.0.0.1, а не localhost.

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

Відповідно, коли ми використовуємо ім’я домену, то він перетворюється на IP-адресу (процес називається резолвінг). Ця процедура задається командою resolving nslookup і можлива завдяки розподіленій системі для отримання інформації про домени (DNS).

Працюючи з локальним ПК застосовується мітка, доменне ім’я хоста — localhost. Це доменне ім’я також резолвується в якусь IP-адресу.

Існують спеціальні стандарти, які описують його та закріплють як домен верхнього рівня (ви можете написати, наприклад — мій_сайт_про_котів.localhost).

Коли запускається якийсь сервіс (Nginx, база даних — PostgreSQL, mySQL тощо), він слухає по певному порту IP-адресу (ця пара називається сокет). У специфікації RFC6761 можна побачити опис того, на яку IP-адресу має перетворитися localhost — це loopback-адреса.

Нагадаємо, loopback-інтерфейс для комп’ютера — це віртуальний інтерфейс, реалізований на рівні TCP-стека, завдяки якому операційна система розуміє, що всі пакети залишаються всередині (звідси і назва loop — петля, back — повернення).

У специфікації RFC5735, де описаний loopback-інтерфейс, йдеться, що це мережа з діапазоном 127.0.0.0/8. Тобто не одна IP-адреса 127.0.0.1, а мільйони хостів.

Наприклад, адреса 127.1.1.1 — тут теж може використовуватися loopback. Звідси випливає важлива проблема застосування localhost у конфігураціях — ми маємо неоднозначність щодо того, на яку адресу буде перетворено localhost.

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

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

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

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

Таблиця мережевих адрес та типів використання

IP-адреси, що виділяються Сфера застосування
0.0.0.0/8 Поточна мережа
10.0.0.0/8 Мережі для приватного користування
14.0.0.0/8 Мережа загальнодоступних даних
24.0.0.0/8 Мережі кабельного телебачення
39.0.0.0/8 Зарезервований діапазон, підлягає розподілу
127.0.0.0/8 Для луп-пакетів (інтерфейс Loopback)
128.0.0.0/16 Зарезервовано, підлягає розподілу
169.254.0.0/16 Для комунікацій у межах одного сегмента місцевої мережі чи магістральної лінії
172.16.0.0/12 Приватні мережі
191.255.0.0/16 Зарезервовано, підлягає розподілу
192.0.0.0/24 Зарезервовано, але підлягає розподілу
192.0.2.0/2 Тестова мережа
192.88.99.0/24 Повторна трансляція 6to4 Anycast
192.168.0.0/16 Мережі для приватного користування
198.18.0.0/15 Тестування пристроїв мережного з’єднання
223.255.255.0/24 Зарезервовано, підлягає розподілу
224.0.0.0/4 Багатоадресна розсилка, що зазвичай використовується в симуляціях і іграх, розрахованих на велику кількість користувачів, а також при поширенні відео.
240.0.0.0/4 Зарезервовано для використання у майбутньому

Чим відрізняються 0.0.0.0 та 127.0.0.1?

Якщо клієнтські пристрої (лептоп, планшет, смартфон тощо) не підключені до мережі з протоколом TCP/IP, їх мережевий ідентифікатор показується — 0.0.0.0.

IP-адреса 0.0.0.0 – це один з ідентифікаторів спеціального призначення. Він виступає як адреса-заповнювач, визначає маршрут за замовчуванням.

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

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

Якщо робоча станція в цілому налаштована для роботи в мережі TCP/IP коректно, але, при цьому, в заголовку протоколу значиться 0.0.0.0, для усунення проблеми та отримання дійсної адреси можна виконати такі дії:

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

Висновок

Сподіваємося, тепер ви отримали чітке уявлення про те, що таке localhost і loopback, а також зрозуміли, чому потрібно намагатися використовувати адресу IP 127.0.0.1 замість доменного імені.

Використання localhost дозволяє веброзробникам тестувати клієнт-серверну архітектуру на локальному ПК, без підключення до інтернету, а також виявляти несправності в мережі та налаштовувати різні сервіси.

Для закріплення отриманих знань рекомендуємо подивитися відео англійською, в якому йдеться про те, що таке localhost, що означає адреса 127.0.0.1 , а також тут також викладено теорію про loopback в TCP/IP: 

Останні статті

Айтівець Міноборони США понабирав кредитів і хотів продати рф секретну інформацію

32-річний розробник безпеки інформаційних систем Агентства національної безпеки Джарех Себастьян Далке отримав 22 роки в'язниці…

30.04.2024

Простий та дешевий. Українська Flytech запустила масове виробництво розвідувальних БПЛА ARES

Українська компанія Flytech представила розвідувальний безпілотний літальний апарат ARES. Основні його переваги — недорога ціна…

30.04.2024

Запрошуємо взяти участь у премії TechComms Award. Розкажіть про свій потужний PR-проєкт у сфері IT

MC.today разом з Асоціацією IT Ukraine і сервісом моніторингу та аналітики згадок у ЗМІ та…

30.04.2024

«Йдеться про потенціал мобілізації»: Україна не планує примусово повертати українців із ЄС

Україна не буде примусово повертати чоловіків призовного віку з-за кордону. Про це повідомила у Брюсселі…

30.04.2024

В ЗСУ з’явився жіночий підрозділ БПЛА — і вже можна проходити конкурсний відбір

В Збройних Силах України з'явився жіночий підрозділ з БПЛА. І вже проводиться конкурсний відбір до…

30.04.2024

GitHub на наступному тижні випустить Copilot Workplace — ШІ-помічника для розробників

GitHub анонсував Copilot Workspace, середовище розробки з використанням «агентів на базі Copilot». За задумкою, вони…

30.04.2024