Roe*_*ler 89 networking ip localhost loopback
我想知道作出决定localhost的 IP 地址的由来是什么127.0.0.1。的“意义”是127什么?的“意义”是0.0.1什么?
Joh*_*n T 88
127 是子网掩码为 的 A 类网络中的最后一个网络号255.0.0.0。127.0.0.1是子网中第一个可分配的地址。127.0.0.0不能使用,因为那将是线号。但是对主机部分使用任何其他数字应该可以正常工作并恢复使用127.0.0.1. 127.1.1.1如果您愿意,可以通过 ping 自己尝试。他们为什么要等到最后一个网络号才实现这一点?我不认为它被记录在案。
hyp*_*lug 60
我能找到的关于 127 作为环回的最早提及是 1986 年 11 月由 Reynolds 和 Postel 撰写的RFC 990:
地址零将被解释为“这个”的意思,就像在“这个网络”中一样。
例如,地址 0.0.0.37 可以解释为表示该网络上的主机 37。
...
A类网络号127被赋予了“环回”功能,即更高层协议发送到网络127地址的数据报应该在主机内部环回。“发送”到网络 127 地址的数据报不应出现在任何网络的任何地方。
甚至早在 1981 年 9 月的RFC 790 中,0 和 127 就已经被保留了:
000.rrr.rrr.rrr 保留 [JBP] ... 127.rrr.rrr.rrr 保留 [JBP]
0 和 127 是 1981 年唯一保留的 A 类网络。0 用于指向特定主机,因此留下 127 用于环回。
我知道这不能回答问题,但这是我所能挖掘的最远的地方。为环回选择 1.0.0.0 可能更有意义,但这已经提供给 BBN 分组无线电网络。
Jos*_*Bui 25
Internet 的设计者真正了解硬件的工作原理,并且他们在设计时考虑了低级实现。
值 0、127 和 255 在 8 位汇编和机器语言编程中是特殊的,因为您可以使用“技巧”来测试这些值,并使用比其他整数执行速度更快的更小的指令分支到不同的代码。127 是最高的有符号 8 位整数,因此将其增加 1 将导致有符号溢出。同样,增加 255 将导致无符号溢出。仅仅将值 0 加载到寄存器中通常会在芯片上设置一个零标志。想象一下,网络程序在伪代码中是这样的:
if (value == 0) doLocal();
if (value == 127) doLoopback();
if (value == 255) doNetwork();
Run Code Online (Sandbox Code Playgroud)
虽然这取决于芯片,但当时大多数芯片可以分别用 2 个字、3 个字和 3 个字(总共 8 个字)对这些测试进行编码,而且这些特定测试都可能在每个 1 个时钟周期内执行。使用任何其他值可能每个需要 4 个字(总共 12 个字),代码大小增加 50%,执行时间也可能增加 50%。
因为在创建这些标准时,计算机速度很慢,而且通常仅限于 8 位寄存器。将数字与数字进行比较非常慢,特别是如果必须从后面获取这些数字,那么内存真的很慢。寄存器,即“板上 CPU”存储要快得多。
此外,那些旧计算机有特殊的、更快的指令来检测“等于零”、“不同于零”、“负/正整数”(符号是......猜猜看,最左边的位,现在看到与 127 的连接,即除了最左边的 = 符号外,所有二进制“1”的数字?)。
因此,这些是特殊数字,因为它们允许编程技巧以在频繁执行的操作中节省大量 CPU 周期。
您永远不会看到“IF CallerIP =”0”而是“IF NotZero(CallerIP)”指令。
您可以查看古老的汇编指令,如“BEQ、BNE”(6502 CPU)以获得更长的解释。也请查看此页面。
到底:
0、255 和 127 都可以用一个最快的指令来检查。甚至更高级的语言(如 C)具有“快捷方式”比较函数,编译器可以将这些函数内部优化为一条指令。
70 年代和 80 年代的程序员真的用超级稀缺的资源创造了宏伟的架构,在 IP 编号等标准的背后有很多想法和天才。
小智 5
如果您考虑 localhost 或环回 IP 地址的含义,您就会意识到您永远不想在主机外部看到该地址或该地址所属的网络。(在一个主机里面,太黑了,看不到它。向马克吐温道歉。)
因此,必须有人选择一个 IP 网络来表示这个 localhost 地址。我不记得是谁首先选择了它,但它在定期发布为“主机要求”的 IETF 征求意见中指定。
很久以前就完成了,当时没有人想到“浪费”整个 A 类地址的想法。
localhost 的效用是您可以使用硬编码的 IP 地址与自己对话。它早在域名系统出现之前就被使用了。您实际上可以使用任何 127.xxx 有效地址,但从来没有人使用过。您不能偷偷摸摸地将 127 用作真实网络,因为“路由器要求”RFC 不允许在任何互联网上路由该网络。