Компьютерные машины идентифицируются по имени хоста [имя хост-машины] и IP-адресу.
Нижеприведенная диаграмма кратко иллюстрирует это.
Аналогичным образом, у нас также есть общее имя для всех компьютерных систем, которое принято называть localhost. Здесь термин “localhost” связан с контекстом компьютерных сетей. Он играет жизненно важную роль на нашем пути разработчика или системного администратора. Существует множество вариантов использования “localhost”, таких, как тестирование приложений, документирование, тестирование производительности сети и блокировка сайта.
Давайте разберемся в этом подробнее.
Что такое локальный хост?
Localhost – это имя хоста, которое относится к компьютерной системе, на которой запущена вызывающая программа, что означает, что машина будет разговаривать сама с собой, когда мы вызываем localhost.
Это помогает нам проверить работу сетевых служб на машине даже во время сбоев сетевого оборудования. При использовании “localhost” доступ к сетевым службам осуществляется через логический сетевой интерфейс, называемый loopback. IP-адрес интерфейса loopback – 127.0.0.1.
Таким образом, localhost разрешается в 127.0.0.1 как часть разрешения имен.
Что такое адрес обратной петли?
Loopback – это логический сетевой интерфейс, присутствующий во всех операционных системах. Пакеты, переданные через этот интерфейс, возвращаются (зацикливаются) обратно на тот же интерфейс на той же машине. Следовательно, интерфейс называется loopback.
Согласно стандартам IETF для адресации IPv4, весь блок 127.0.0.0/8 выделен для целей loopback. По умолчанию интерфейс loopback настраивается после каждой установки сервера.
Давайте посмотрим на приведенный ниже фрагмент.
ip a show lo
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10
loop txqueuelen 1000 (Local Loopback)
RX packets 76238871 bytes 6955286874 (6.9 GB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 76238871 bytes 6955286874 (6.9 GB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
sudo cat /etc/hosts
127.0.0.1 localhost
127.0.1.1 sandbox1
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
Внутренняя обработка пакетов Loopback
Как правило, Loopback-пакеты отличаются от других IP-пакетов своими адресами. Обработка пакетов loopback с адресом loopback происходит на канальном уровне стека TCP/IP. Этот трафик будет проходить внутри самой компьютерной системы. Он не попадет на аппаратные сетевые карты, как другие IP-пакеты. Кроме того, существует правило, согласно которому маршрутизаторы не должны маршрутизировать loopback IP-адрес.
Например, когда мы запрашиваем адрес 127.0.0.1. Запрос не будет направлен в Интернет из-за первого октета (127). Здесь стек TCP/IP распознает запрос и направляет его обратно на ту же машину.
Ниже приводится краткая иллюстрация прохождения потока пакетов для localhost и других IP-пакетов.
ping -c 4 localhost
PING localhost (127.0.0.1) 56(84) bytes of data.
64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.035 ms
64 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=64 time=0.043 ms
64 bytes from localhost (127.0.0.1): icmp_seq=3 ttl=64 time=0.041 ms
64 bytes from localhost (127.0.0.1): icmp_seq=4 ttl=64 time=0.040 ms
--- localhost ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3075ms
rtt min/avg/max/mdev = 0.035/0.039/0.043/0.008 ms
ping -c 4 google.com
PING google.com (142.250.71.46) 56(84) bytes of data.
64 bytes from maa03s35-in-f14.1e100.net (142.250.71.46): icmp_seq=1 ttl=120 time=2.14 ms
64 bytes from maa03s35-in-f14.1e100.net (142.250.71.46): icmp_seq=2 ttl=120 time=2.18 ms
64 bytes from maa03s35-in-f14.1e100.net (142.250.71.46): icmp_seq=3 ttl=120 time=2.19 ms
64 bytes from maa03s35-in-f14.1e100.net (142.250.71.46): icmp_seq=4 ttl=120 time=2.20 ms
--- google.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3004ms
rtt min/avg/max/mdev = 2.147/2.180/2.203/0.051 ms
Тестирование приложения с использованием Localhost
Доступность службы приложения сначала происходит через сетевой интерфейс. Если служба приложения сопоставлена с физическим интерфейсом, она может быть доступна из внешнего мира. Аналогично, если приложение сопоставлено с логическим интерфейсом loopback, доступ к нему возможен только из данной конкретной компьютерной системы и невозможен из внешнего мира.
Всегда проще разрабатывать и тестировать код с локального сервера, чем с другого удаленного узла. Для этого в файле /etc/hosts мы сопоставим имя нашего производственного домена с новым адресом loopback (127.0.1.100). Записи в файле /etc/hosts имеют приоритет перед DNS.
В приведенном ниже фрагменте показан органичный ответ ping с локального сервера на удаленный веб-сервер LinuxCool. Сопоставление доменов показано во втором фрагменте.
Когда мы внимательно проверяем результат после сопоставления IP-адреса сегмента 127 с linuxcool.net в файле хоста, трафик направляется на сетевой интерфейс loopback.
ping -c 4 linuxcool.net
PING linuxcool.net (172.67.74.167) 56(84) bytes of data.
64 bytes from 172.67.74.167 (172.67.74.167): icmp_seq=1 ttl=59 time=34.5 ms
64 bytes from 172.67.74.167 (172.67.74.167): icmp_seq=2 ttl=59 time=34.5 ms
64 bytes from 172.67.74.167 (172.67.74.167): icmp_seq=3 ttl=59 time=34.5 ms
64 bytes from 172.67.74.167 (172.67.74.167): icmp_seq=4 ttl=59 time=34.5 ms
--- linuxcool.net ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3005ms
rtt min/avg/max/mdev = 34.521/34.529/34.541/0.227 ms
sudo cat /etc/hosts
127.0.0.1 localhost
127.0.1.1 sandbox1
127.0.1.100 linuxcool.net
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
ping -c 4 linuxcool.net
PING linuxcool.net (127.0.1.100) 56(84) bytes of data.
64 bytes from linuxcool.net (127.0.1.100): icmp_seq=1 ttl=64 time=0.074 ms
64 bytes from linuxcool.net (127.0.1.100): icmp_seq=2 ttl=64 time=0.094 ms
64 bytes from linuxcool.net (127.0.1.100): icmp_seq=3 ttl=64 time=0.042 ms
64 bytes from linuxcool.net (127.0.1.100): icmp_seq=4 ttl=64 time=0.055 ms
--- linuxcool.net ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3062ms
rtt min/avg/max/mdev = 0.042/0.066/0.094/0.020 ms
Заключение
Localhost – это стандартное имя системы, на которой работает наша программа, помогающая нам тестировать приложения и устранять неполадки в сети. Это достигается с помощью механизма локальной петли через сетевой интерфейс loopback. Это помогает нам тестировать программное обеспечение без зависимости от конфигурации сетевого оборудования. Как пользователю компьютера, необходимо иметь базовое представление о терминах localhost и loopback сетевых интерфейсов.