Loopback — виртуальный сетевой интерфейс, который направляет трафик обратно на то же устройство, минуя физическую сеть. Адрес 127.0.0.1 (для IPv4) и ::1 (для IPv6) зарезервированы под loopback стандартом RFC 5735 и RFC 4291 соответственно. Пакет, отправленный на 127.0.0.1, обрабатывается в ядре ОС и возвращается отправителю без выхода на физический интерфейс.
Как работает Loopback
На уровне сетевого стека ОС loopback — это псевдоинтерфейс lo (Linux) или «Loopback Adapter» (Windows). Он не привязан к аппаратной сетевой карте и существует всегда, независимо от сетевых настроек. Скорость передачи по loopback ограничена только производительностью ядра ОС — типично 10–40 Гбит/с на современных серверах, без накладных расходов физического уровня.
Диапазон 127.0.0.0/8 (16 млн адресов) целиком зарезервирован под loopback, хотя реально используются только 127.0.0.1 и иногда другие адреса этой подсети для тестирования многосвязных приложений. В Linux добавить дополнительный loopback-адрес: ip addr add 127.0.0.2/8 dev lo.
История
Концепция loopback появилась вместе с сетевым стеком ARPANET в конце 1970-х. RFC 1122 (1989) «Requirements for Internet Hosts» зафиксировал 127.0.0.1 как обязательный loopback-адрес для всех IPv4-реализаций. Для IPv6 адрес ::1 определён в RFC 2460 (1998). Имя «localhost» как DNS-псевдоним для 127.0.0.1 стандартизировано в RFC 6761 (2013).
Применение Loopback
- Тестирование сетевых приложений — проверить, что сервис запущен и принимает соединения:
curl http://127.0.0.1:8080. - Межпроцессное взаимодействие (IPC) — базы данных (MySQL, PostgreSQL) по умолчанию слушают 127.0.0.1, разрешая подключения только с того же хоста.
- Безопасность — сервисы, не предназначенные для внешнего доступа (Redis, Memcached), следует биндить только на loopback, исключая доступ из сети.
- Loopback в маршрутизаторах — сетевые устройства используют loopback-интерфейс с уникальным IP для идентификации в протоколах BGP и OSPF: этот IP всегда доступен, пока роутер работает, даже если физический интерфейс упал.
На что обращать внимание
Частая ошибка при настройке VDS: привязка веб-сервера к 0.0.0.0 вместо нужного интерфейса открывает порт на все адреса, включая публичный IP. Проверить биндинги: ss -tlnp или netstat -tlnp. Если Redis или MySQL слушает 0.0.0.0:6379 — это уязвимость. Правильная конфигурация: bind 127.0.0.1 в redis.conf и bind-address = 127.0.0.1 в my.cnf.
В Docker loopback-адрес 127.0.0.1 относится к сети контейнера, а не хоста. Для доступа к сервисам хоста из контейнера используют специальный адрес: host.docker.internal (Windows/Mac) или IP docker0-интерфейса (Linux, обычно 172.17.0.1).
Loopback vs Unix Domain Socket
Для межпроцессного взаимодействия на одном хосте существуют две альтернативы loopback TCP: Unix Domain Sockets (UDS) и loopback 127.0.0.1. UDS работает через файловую систему (/var/run/mysql.sock) и в 2–5 раз быстрее TCP/loopback при небольших сообщениях — нет накладных расходов TCP-заголовков и сетевого стека. Nginx → PHP-FPM и Nginx → Gunicorn рекомендуется соединять через UDS: fastcgi_pass unix:/var/run/php-fpm.sock. Loopback TCP предпочтителен, когда возможен переезд сервиса на другой хост без изменения кода (просто смените 127.0.0.1 на внешний IP).