12630

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.