0.0.0.0和回送IP地址有什么区别?


19

从《计算机网络》一书中:

主机启动时使用IP地址0.0.0.0(最低地址)。它的意思是“此网络”或“此主机”。

... 保留所有形式为127.xx.yy.zz的地址用于回送测试。发送到该地址的数据包不会放在网上。它们在本地处理,并被视为传入数据包。这允许在发送方不知道其编号的情况下将数据包发送到主机,这对于测试非常有用。

如果我是正确的话,则环回IP地址是指当前主机。

那么0.0.0.0和回送IP地址有什么区别?


评论不作进一步讨论;此对话已转移至聊天
罗恩·莫平

Answers:


36

该声明:

IP地址0.0.0.0 [...]表示“此网络”或“此主机”。

有误导性。它不是“或”,而是“此网络上的主机”。

RFC1122开始

{0,0}

             This host on this network.  MUST NOT be sent, except as
             a source address as part of an initialization procedure
             by which the host learns its own IP address.

环回地址(实际上是127.0.0.0/8网络中的任何地址)在同一RFC中的解释方式如下:

{127,任何}

             Internal host loopback address.  Addresses of this form
             MUST NOT appear outside a host.

因此,回送地址和全零地址都可以称为“此主机”,但实际上它们的用法非常不同:

  • 可以在网络上观察到0.0.0.0地址,但只能在DHCP / BOOTP过程中观察到,并且只能作为源地址。

  • 127.0.0.0/8中的任何地址都无法在网络上的任何位置查看,只能用于:

    • 测试主机的TCP / IP堆栈。

    • 同一主机上的两个应用程序可以一起通信。

127.XXX地址附加到回送接口。这样的接口没有连接的底层(即,它没有连接到链路层)。数据包在Internet层中得到处理和响应。因此,此数据包实际上无法到达主机外部的任何内容。

但是从0.0.0.0发送的数据包通常由网络堆栈处理,除了没有路由决定,它绑定到正在初始化的接口,因此它从该接口发送出去并经过链路层(可以是而不是以太网),然后在网络上。


因此,换句话说,0.0.0.0从主持人的角度来看就是“自我”。 127地址不是对主机的引用,而是对外部主机的模拟(即使它实际上不是外部主机)。那是对的吗 ?RFC还声明“其源地址未定义单个主机的数据报-例如,零地址,环回地址”。网络,但可以作为不同事物的参考-自我和某种“测试”主机。
Sergiy Kolodyazhnyy

您的报价来自ICMP部分。它指出无法将ICMP无法到达发送到0地址。这样的ICMP响应将必须发送到0地址,这将违反规则“除作为源地址外,不得发送”。此外,除了作为广播的BOOTP / DHCP进程的一部分外,不能使用0地址,因此发送广播的ICMP错误消息毫无意义。
JFL

@SergiyKolodyazhnyy编辑了答案
JFL

12

如果我是正确的话,则环回IP地址是指当前主机。

否。发送到环回地址的流量会在主机内部循环。您可以将流量发送到回送地址作为目标地址,然后再读取它。这在测试中很有用。

那么0.0.0.0和回送IP地址有什么区别?

0.0.0.0/8网络中的地址不能用作目标地址。唯一实际的用途是当主机没有地址并且要求诸如DHCP服务器之类的地址来为其分配地址时,将其用作源地址。


有一个IANA IPv4专用地址注册表,列出了所有特殊地址块,并且具有指向定义每个那些地址块的RFC的链接。


评论不作进一步讨论;此对话已转移至聊天
罗恩·莫平
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.