Почему существует 127.0.0.1 и кто вообще выбрал число 127
127.0.0.1 знают почти все, кто хоть раз запускал что-нибудь на своем компьютере.
Но обычно на этом знание заканчивается: это localhost, компьютер обращается сам к себе.
А вот если спросить, почему для этого используется именно 127, ответ уже не такой очевидный.
Причем здесь есть одна деталь, которая ломает популярную версию этой истории.
127 действительно не была изначально назначена как адрес localhost.
Начнем с самого числа
В ранней версии IPv4 существовала так называемая классовая адресация.
Адресное пространство делили на Class A, Class B и Class C. У Class A номер сети занимал первый октет, а остальные три октета предназначались для адресов внутри сети.
И одним из номеров Class A была сеть 127.
Но в RFC 790 от 1981 года она просто находится среди зарезервированных сетей. Назначения loopback там еще нет.
То есть последовательность была такой:
127 → зарезервировали
↓
позже
↓
127 → назначили для loopbackСам RFC 790 фиксирует факт резервирования, но не объясняет, почему для него выбрали именно число 127. Поэтому утверждать конкретную причину выбора без дополнительного исторического источника было бы неправильно.
Когда появился loopback
В RFC 990, опубликованном в 1986 году, сеть 127 уже имеет конкретное назначение: loopback. Документ прямо указывает, что датаграмма, отправленная на адрес сети 127, должна вернуться внутрь хоста и не должна появляться в какой-либо внешней сети.
И вот здесь появляется знакомый нам адрес:
127.0.0.1Но специальным является не этот один адрес.
Специальной стала вся сеть 127.
В современной записи это:
127.0.0.0/8Диапазон получается огромным:
127.0.0.0
127.0.0.1
127.0.0.2
...
127.255.255.255Всего 16 777 216 адресов.
Зачем столько?
Здесь как раз и появляется причина, по которой 127.0.0.1 выглядит странно.
127 исторически была номером целой Class A сети, а не отдельным IP-адресом. В RFC 790 Class A описывается как сеть с 7-битным номером сети и 24-битной локальной частью.
Поэтому когда сеть 127 позднее назначили для loopback, речь шла о соответствующем адресном пространстве целиком.
127.0.0.1 - только один адрес из него.
Например:
127.0.0.2и:
127.20.30.40тоже находятся в loopback-диапазоне. Современные документы описывают специальным именно блок 127.0.0.0/8, хотя обычно реализации используют для loopback 127.0.0.1/32.
Последняя 1 сама по себе специального значения не имеет.
И вот здесь обычно возникает ошибка
Если посмотреть на адрес:
127.0.0.1легко решить, что в нем зашифрована какая-то логика:
127 = localhost
0 = ...
0 = ...
1 = компьютерНет.
Особый смысл имеет принадлежность адреса к 127.0.0.0/8.
То есть правило можно упростить до:
127.x.x.x → loopbackА 127.0.0.1 стал наиболее привычным конкретным адресом для этой цели.
Поэтому последнюю единицу не стоит воспринимать как идентификатор «себя».
Так почему именно 127?
Здесь важно не смешивать два разных вопроса.
Почему 127.0.0.1 работает как адрес самого компьютера?
Потому что сеть 127 была назначена для loopback.
Почему первоначально зарезервировали именно 127?
RFC 790 сообщает, что сеть 127 зарезервирована, но не объясняет мотив этого выбора. Позднее RFC 990 уже прямо назначает ей функцию loopback.
Поэтому точнее сказать не «мы знаем, почему выбрали 127», а «мы знаем, что 127 сначала была зарезервирована, а затем получила назначение loopback; причина первоначального резервирования в RFC 790 не указана».
Это как раз тот случай, когда отсутствие ответа лучше не заменять красивой легендой.
RFC 1122 позднее закрепил для 127.*.*.* статус внутреннего loopback: такие адреса не должны появляться за пределами хоста.
Получается две разные вещи:
почему 127 была зарезервирована?
в RFC 790 причина не указана
почему 127 используется для loopback?
это закреплено в последующих стандартах
А откуда взялся именно 127.0.0.1?
Поскольку для loopback используется весь блок 127.0.0.0/8, технически подходят и другие адреса внутри него.
Например:
127.0.0.2или:
127.1.2.3Но обычно loopback реализуется именно через:
127.0.0.1Это прямо отмечено в RFC 3330 и RFC 5735.
Поэтому фраза «127.0.0.1 - это мой компьютер» удобна, но технически она упрощает картину.
Точнее сказать: это конкретный адрес из специального диапазона IPv4, предназначенного для loopback.
Именно поэтому существуют 127.0.0.2, 127.1.2.3 и другие адреса с первым октетом 127.
Почему не изменили это позже?
127.0.0.0/8 уже было закреплено как специальный блок IPv4 для loopback. RFC 1122 требует, чтобы адреса такого вида не появлялись за пределами хоста, а последующие документы сохраняют то же назначение блока.
Поэтому историческое решение просто продолжило использоваться.
Что в итоге произошло
В старой системе IPv4 существовали Class A сети.
127 оказалась среди зарезервированных сетей.
В 1986 году сеть 127 назначили для loopback.
Позже именно 127.0.0.1 стал обычным конкретным адресом, который используют для этой цели.
Вот почему сегодня эти четыре цифры воспринимаются почти как синоним слова «локальный компьютер».
Но никакой отдельной магии в 127.0.0.1 нет.
Не существует специального правила, по которому последняя 1 означает «это я». Изначально вообще речь шла не об одном адресе, а о целой сети 127.
Самое точное объяснение выглядит немного скучнее популярной легенды:
в IPv4 была зарезервирована сеть 127, позднее ее назначили для loopback, а 127.0.0.1 стал наиболее привычным адресом внутри этого диапазона.
Почему первоначально выбрали именно число 127? По RFC 790 мы этого не знаем.
И, пожалуй, это единственная часть истории, где честный ответ действительно звучит лучше красивой выдумки.
Комментарии
Чтобы оставить комментарий, войдите в аккаунт.