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

Что такое 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: 

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

Обучение Power BI – какие онлайн курсы аналитики выбрать

Сегодня мы поговорим о том, как выбрать лучшие курсы Power BI в Украине, особенно для…

13.01.2024

Work.ua назвал самые конкурентные вакансии в IТ за 2023 год

В 2023 году во всех крупнейших регионах конкуренция за вакансию выросла на 5–12%. Не исключением…

08.12.2023

Украинская IT-рекрутерка создала бесплатный трекер поиска работы

Unicorn Hunter/Talent Manager Лина Калиш создала бесплатный трекер поиска работы в Notion, систематизирующий все этапы…

07.12.2023

Mate academy отправит работников в 10-дневный оплачиваемый отпуск

Edtech-стартап Mate academy принял решение отправить своих работников в десятидневный отпуск – с 25 декабря…

07.12.2023

Переписки, фото, история браузера: киевский программист зарабатывал на шпионаже

Служба безопасности Украины задержала в Киеве 46-летнего программиста, который за деньги устанавливал шпионские программы и…

07.12.2023

Как вырасти до сеньйора? Девелопер создал популярную подборку на Github

IT-специалист Джордан Катлер создал и выложил на Github подборку разнообразных ресурсов, которые помогут достичь уровня…

07.12.2023