Кто выбрал 127.0.0.1 в качестве локального хоста и почему? Какой смысл это имеет?

21

Я почти уверен, что все здесь знают значение 127.0.0.1. Но почему это ВСЕГДА localhost? Кто выбрал этот произвольный IP? Почему был выбран этот IP? Почему не что-то более простое, такое как 1.0.0.0? Есть ли какое-то особое значение для 127.0.0.1?

Джеймс Грэм
источник
3
Ищите и вы найдете RFC
SpacemanSpiff
@SpacemanSpiff RFC?
Джеймс Грэм
4
RFC ( Request For Comments ) являются основными строительными блоками Интернета. Смотрите мой ответ ниже для более.
Майкл Хэмптон

Ответы:

41

Джон Постел выбрал 127.

До того, как Управление по присвоению номеров в Интернете вступило во владение ( RFC 3232 ) во время его смерти ( RFC 2468 ), он был «царем» интернет-адресов и назначений портов, по сути выдвинув себя для этой задачи. ( RFC 349 )

Еще в начале 1980 - х лет, когда IPv4 , как мы знаем , что это было первым быть хэшированными, существующие сети были даны адресные блоки класса «А» в 32-разрядном адресном пространстве , которое вступит в силу в 1983 году ( RFC 801 ). Как начальные, так и 127 заданные вами назначения, а также первые определения IP-адресов «класса A», «класса B» и «класса C» были впервые опубликованы в RFC 790 Постеля . (Обратите внимание, что «классы» были заменены CIDR в RFC 1519 , теперь RFC 4632. )

В RFC 790 Постел определил 127 как «зарезервированный».

      127.rrr.rrr.rrr                 Reserved                     [JBP]

Его первое формальное определение появляется в RFC 990 , где оно определяется следующим образом:

Сетевой номер 127 класса А назначается функцией «обратной петли», то есть дейтаграмма, отправляемая по протоколу более высокого уровня на адрес сети 127, должна зацикливаться внутри хоста. Ни одна датаграмма, «отправленная» на сетевой адрес 127, никогда не должна появляться ни в одной сети.

И снова в RFC 1060 :

(g) {127, <любой>}

Внутренний адрес обратной связи хоста. Никогда не должен появляться за пределами хоста.

Таким образом, любой адрес в пределах 127.0.0.0/8 должен рассматриваться как петлевой и направляться обратно на локальный хост.

Текущий список адресов специального назначения IPv4 - RFC 6890 , который устарел RFC 5735 , который, в свою очередь, устарел RFC 3330 . RFC 5735 гласит:

127.0.0.0/8 - этот блок назначен для использования в качестве петлевого адреса узла Интернета. Датаграмма, отправленная протоколом более высокого уровня на адрес в любом месте этого блока, возвращается обратно в хост. Обычно это реализуется с использованием только 127.0.0.1/32 для обратной петли. Как описано в [RFC1122], раздел 3.2.1.3 , адреса внутри всего блока 127.0.0.0/8 нигде законно не появляются ни в одной сети.

Наконец, в любой подсети IPv4 самый низкий адрес не может использоваться, поскольку он представляет сетевой маршрут. Таким образом, первым используемым адресом в подсети, и, следовательно, наиболее часто встречающимся, является 127.0.0.1.

Майкл Хэмптон
источник
28

Из RFC :

127.0.0.0/8 - этот блок назначен для использования в качестве петлевого адреса узла Интернета. Датаграмма, отправленная протоколом более высокого уровня на адрес в любом месте этого блока, должна вернуться обратно в хост. Обычно это реализуется с использованием только 127.0.0.1/32 для обратной связи, но никакие адреса в этом блоке никогда не должны появляться ни в одной сети [RFC1700, стр. 5].

Из википедии :

Как и для всех IP-адресов, определение синонимичного имени хоста просто облегчает жизнь пользователям - и localhost - это первоочередная задача создания псевдонимов сетей.

Также обратите внимание, что 127 в двоичном виде это 01111111 , обратное и инвертированное значение 1 ( 00000001 )

oɔɯǝɹ
источник
4
Спасибо! Я бы проголосовал. Но, увы, моя репутация - это репутация ребенка.
Джеймс Грэм
7
Э-э, 10000000 (128)это notоф 01111111 (127). «Противоположность» не является побитовой операцией и не имеет смысла в таком контексте.
Крис С
Я подозреваю, что побитовые значения адресов являются косвенными и не имеют никакого авторитетного значения при выборе 127, являющегося сетевым блоком обратной связи.
Мэтью Ифе
6
@Mlfe побитовое значение 127 не является косвенным: это «последний» адрес класса A, у которого у всех ведущий бит
равен