Я задавался вопросом, каково происхождение решения сделать localhost
IP-адрес 127.0.0.1
. В чем смысл 127
? в чем смысл 0.0.1
?
networking
localhost
ip
loopback
Роуи Адлер
источник
источник
Ответы:
127 - последний номер сети в сети класса A с маской подсети
255.0.0.0
.127.0.0.1
это первый назначаемый адрес в подсети.127.0.0.0
не может быть использован, потому что это будет номер провода. Но использование любых других номеров для части хоста должно работать нормально и вернуться к использованию127.0.0.1
. Вы можете попробовать это самостоятельно, пингуясь,127.1.1.1
если хотите. Почему они ждали до последнего номера сети, чтобы реализовать это? Я не думаю, что это задокументировано.источник
Самое раннее упоминание, которое я могу найти относительно назначения 127 как петли, - ноябрь 1986 RFC 990, созданный Рейнольдсом и Постелом:
Еще в сентябре 1981 года RFC 790 , 0 и 127 уже были зарезервированы:
0 и 127 были единственными зарезервированными сетями класса А к 1981 году. 0 использовался для указания на конкретный хост, поэтому оставалось 127 для обратной петли.
Я знаю, что это не отвечает на вопрос, но это так далеко, как я мог копать. Возможно, было бы более разумно выбрать 1.0.0.0 для обратной связи, но это уже было передано BBN Packet Radio Network.
источник
Разработчики Интернета действительно знали, как работает оборудование, и они разрабатывали с учетом низкого уровня реализации.
Значения 0, 127 и 255 являются особыми в 8-битной сборке и программировании на машинном языке, поскольку есть «хитрости», которые можно использовать для проверки этих значений и перехода к другому коду с использованием меньших инструкций, которые выполняются быстрее, чем для других целых чисел. 127 - старшее 8-разрядное целое число со знаком, поэтому увеличение его на 1 вызовет переполнение со знаком. Аналогично, увеличение 255 вызовет переполнение без знака. Простая загрузка значения 0 в регистр обычно устанавливает нулевой флаг на чипе. Представьте, что сетевая программа выглядит так в псевдокоде:
Хотя это зависит от чипа, в те дни большинство чипов могли кодировать эти тесты с помощью 2 слов, 3 слов и 3 слов соответственно (всего 8 слов), и, кроме того, все эти конкретные тесты, скорее всего, выполнялись по 1 такту каждый. Использование любого другого значения, вероятно, потребует 4 слова каждое (всего 12 слов), увеличение размера кода на 50% и, вероятно, увеличение времени выполнения на 50%.
источник
Если вы думаете о том, что означает локальный IP-адрес или петлевой IP-адрес, вы понимаете, что никогда не хотите видеть этот адрес или сеть, к которой принадлежит этот адрес, за пределами хоста. (Внутри хозяина слишком темно, чтобы увидеть это. Извинения Марку Твену.)
Итак, кто-то должен был выбрать IP-сеть для представления этого адреса локального хоста. Я не помню, кто первым выбрал его, но это указано в Запросе комментариев IETF, который периодически выдается как «Требования к хосту».
Это было сделано так давно, что идея «тратить» весь адрес класса А в то время никому не приходила в голову.
Утилита localhost заключается в том, что вы можете общаться с самим собой, используя жестко запрограммированный IP-адрес. Он использовался задолго до появления Системы доменных имен. На самом деле вы можете использовать любой из действительных адресов 127.xxx, но никто этого не сделает. Вы не можете красться и использовать 127 как реальную сеть, потому что RFC «Требования к маршрутизатору» запрещает когда-либо маршрутизировать эту сеть в любом Интернете.
источник
Во-первых, весь диапазон 127.xxx указывает на ваш локальный хост.
127 в двоичном виде это "01111111". «11111111» = 255 и 0 зарезервированы, поэтому выбор очевиден :)
источник
Потому что, когда эти стандарты были созданы, компьютеры работали медленно и обычно ограничивались 8-битными регистрами. Сравнение чисел с числами было очень медленным, особенно если эти числа нужно было извлечь из спины, тогда ДЕЙСТВИТЕЛЬНО медленная память. Регистрируется, то есть память «CPU on board» была намного быстрее.
Более того, у этих старых компьютеров были специальные, более быстрые инструкции для определения «равно нулю», «отличается от нуля», «отрицательное / положительное целое число» (где знак был ... угадайте, какой самый левый бит теперь видит связь с 127 это число со всеми двоичными числами «1», кроме крайнего левого знака «=»?).
Поэтому это были специальные числа, потому что они позволяли программировать хитрость, чтобы сэкономить много циклов ЦП на часто выполняемых операциях.
Вы никогда не увидите команду «IF CallerIP =« 0 », а только инструкцию« IF NotZero (CallerIP) ».
Вы можете проверить древние инструкции по сборке, такие как «BEQ, BNE» (6502 CPU) для более подробных объяснений. Также проверьте эту страницу .
В конце:
0, 255 и 127 можно проверить с помощью одной самой быстрой инструкции. Еще более высокоуровневые языки, такие как C, имеют функции сравнения "shortuct", которые компилятор может внутренне оптимизировать в одну инструкцию.
Программисты 70-х и 80-х годов действительно создавали великолепные архитектуры с супер-дефицитными ресурсами, за такими стандартами, как IP-нумерация, много мыслей и гениальности.
источник