Почему localhost IP 127.0.0.1?

Я задался вопросом, каков источник решения сделать localhostIP-адрес 127.0.0.1. Из чего "значение" 127? из чего "значение" 0.0.1?

85
задан 31.08.2009, 05:28

5 ответов

127 последний номер сети в сети класса A с маской подсети 255.0.0.0. 127.0.0.1 первый присваиваемый адрес в подсети. 127.0.0.0 не может использоваться, потому что это было бы проводным числом. Но использование любых других чисел для части, относящейся к хосту должно хорошо работать и вернуться к использованию 127.0.0.1. Можно попробовать его сами путем проверки с помощью ping-запросов 127.1.1.1 если Вы хотели бы. Почему они ожидали до последнего номера сети для реализации этого? Я не думаю, что это документируется.

87
ответ дан 07.12.2019, 08:01

Самое раннее упоминание, которое я могу найти относительно 127 присвоение как обратная петля, является ноябрем 1986 RFC 990, созданный Reynolds и Postel:

Нуль адреса должен быть интерпретирован как значение "этого", как в "этой сети".

Например, адрес 0.0.0.37 мог быть интерпретирован как значение хоста 37 в этой сети.

...

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

Как раз когда рано как сентябрь 1981 RFC 790, 0 и 127 были уже зарезервированы:

000.rrr.rrr.rrr                 Reserved                     [JBP]
...
127.rrr.rrr.rrr                 Reserved                     [JBP]

0 и 127 были единственные зарезервированные Сети класса A к 1981. 0 использовался для того, чтобы указывать на определенный хост, так, чтобы оставленный 127 для обратной петли.

Я знаю, что это не отвечает на вопрос, но это еще, я мог вырыть. Возможно, имело больше смысла выбирать 1.0.0.0 для обратной петли, но это было уже дано Пакетной радиосети BBN.

56
ответ дан 07.12.2019, 08:01

Если Вы думаете о том, что localhost или петлевые средства IP-адреса, Вы понимаете, что никогда не хотите видеть, что адрес или сеть, что тот адрес принадлежит, за пределами хоста. (В хосте, это слишком темно для наблюдения его. Извинения Mark Twain.)

Так, кто-то должен был выбрать сеть IP для представления этого адреса localhost. Я не вспоминаю, кто сначала выбрал его, но это указано в Запросе IETF на Комментарии, который периодически выпускается как "Требования Хоста".

Это было сделано так давно, что идея "потратить впустую" весь адрес класса A не ввела ничей ум в то время.

Утилита localhost - то, что можно говорить с собой с помощью трудно кодированного IP-адреса. Это использовалось задолго до того, как была Система доменных имен. Вы могли на самом деле использовать любой из 127.x.x.x допустимые адреса, но никто никогда не делает. Вы не можете стащить и использовать 127 в качестве реальной сети, потому что "Требования Маршрутизатора" RFC запрещают когда-либо маршрутизацию что сеть в любом Интернете.

5
ответ дан 07.12.2019, 08:01

Во-первых, целое 127.x.x.x диапазон указывает на Ваш localhost.
127 в двоичном файле "01111111". "11111111" = 255 и 0 резервируются, таким образом, выбор очевиден :)

4
ответ дан 07.12.2019, 08:01

Разработчики Интернета действительно знали, как аппаратные средства работали, и они разработали с низкоуровневой реализацией в памяти.

Значения 0, 127 и 255 являются особенными в блоке на 8 битов и программировании машинного языка, потому что существуют "приемы", которые можно использовать для тестирования на эти значения и ответвление к другому коду с помощью меньших инструкций, которые выполняются быстрее, чем для других целых чисел. 127 самое высокое целое число на 8 битов со знаком, так постепенное увеличение его 1 вызовет переполнение со знаком. Точно так же постепенное увеличение 255 вызовет неподписанное переполнение. Просто загрузка значения 0 в регистр будет обычно устанавливать нулевой флаг на микросхеме. Предположите, что сетевая программа похожа на это в псевдокоде:

if (value == 0) doLocal();
if (value == 127) doLoopback();
if (value == 255) doNetwork();

Хотя это зависит от микросхемы, в те дни большинство микросхем могло закодировать эти тесты 2 словами, 3 словами и 3 словами соответственно (общие 8 слов), и далее те конкретные тесты были все вероятны выполнить в 1 такте каждого. Используя любое другое значение, вероятно, потребовал бы 4 слов каждый (общие 12 слов), 50%-е увеличение размера кода и вероятно 50%-е увеличение во время выполнения также.

23
ответ дан 07.12.2019, 08:01

Теги

Похожие вопросы