断网了,还能ping通 127.0.0.1 吗?为什么?

实践是检验真理的唯一标准,直接动手拔网线
ping127.0.0.1.png
说明断网后,ping 127.0.0.1,是ping成功的。
凡事就怕个为什么?那么为什么能ping通呢?
首先我们这里需要两个知识点:

1.什么是ping?

ping 使用的是 ICMP(Internet Control Message Protocol)协议。ICMP 协议位于 OSI 模型的第三层,即网络层。它是 IP 协议的一个部分,用于在 IP 主机、路由器之间传递控制消息和差错报告,从而支持故障诊断、拥塞控制以及路径 MTU 发现等功能。ping 命令通过发送 ICMP Echo Request 报文到目标主机,并等待接收 ICMP Echo Reply 报文来测试两台主机间的连通性和网络延迟等信息。

ping这个知识点是一项大工程,这里只需要知道基本就行。

这里我们知道ping命令用的是ICMP协议,而ICMP协议位于网络层。
icmp.jpg
ICMP和IP都属于网络层,但是ICMP传输数据最终也要靠IP协议。可以看到,ICMP报文存在于IP报文的数据段
ping数据的发送流程:应用层->经过传输层(但是不做任何处理)->网络层(ICMP报文封装到IP里面)->Mac地址数据链路层 -> 物理层
所以ping某个IP可以简单理解为向这个IP发送一份数据。

2.什么是 127.0.0.1?

127.0.0.1是一个特殊的 IPv4 地址,被称为回送地址(Loopback Address)或者本地环回地址。这个地址在每一台计算机上都是预留给本机使用的。
RFC 1122 明确指出“内部主机环回地址。这种形式的地址不得出现在主机之外。” 因此,拾取定向到 127.0.0.1 的流量的路由器应该立即丢弃数据包。这可确保没有专门用于主机上的流量进入 Internet。

3.断网了还能 ping 通 127.0.0.1?

断网的情况下,网卡已经不工作了,ping 环回地址却一切正常,说明ping环回地址走的不是网卡。
如果我们ping www.baidu.com,数据是走网卡出去的。
当我们将数据包发送到127.0.0.1,它不会通过网络接口卡(NIC)发送到网络上,而是直接由操作系统内核处理并返回给发送者。因此,无论网络是否连接,我们都可以ping通127.0.0.1。
127.0.0.1 这个地址通常分配给 loopback接口。loopback 是一个特殊的网络接口(可理解成虚拟网卡),用于本机中各个应用之间的网络交互。只要操作系统的网络组件是正常的,loopback 就能工作。Windows 系统看不到这个接口,Linux中这个接口叫 lo:
当ping发现目标IP是外网IP时,会从网卡发出。

当ping发现目标IP是环回地址时,会选择LoopBack。

4.127.0.0.1和localhost还有0.0.0.0有区别吗?

localhost 是个域名,不是地址,它可以被配置为任意的 IP 地址,不过通常情况下都指向 127.0.0.1(ipv4)和 ::1

在 Linux 中,其定义位于/etc/hosts中:
etchost.png
注意这个值是可修改的,比如我把它改成
192.068.206.1 localhost
然后再去 ping localhost,提示就变成了

 ping localhost (192.168.206.1) 56(84) bytes of data.

localhost是个域名,性质跟 “www.baidu.com” 差不多。不能直接绑定套接字,必须先gethostbyname转成IP才能绑定。
0.0.0.0 是一个特殊的IP地址,它在不同上下文中有不同的含义:
在网络编程和系统服务中:当一个服务器程序绑定到 0.0.0.0 时,表示该服务会在所有可用的网络接口上监听连接请求,无论是哪个IP地址。这意味着服务对来自任意接口的请求都可响应,适用于想要在不确定具体IP或希望服务对整个网络都可见的场景。
作为源IP地址:在某些情况下,如某些应用程序或配置中,你可能会看到 0.0.0.0 用作源IP地址。这通常表示该数据包或请求没有指定特定的源IP地址,或者在某些解释中,它可能意味着“任意”或“默认”源地址,具体的含义依赖于上下文。
在路由表中:在路由表项中,目的地为 0.0.0.0 的默认路由(default route)表示任何没有更具体匹配项的目的地数据包都应该通过这条路由转发。这是一种通用路由,用于将流量导向互联网或其他未明确指定的网络。

总结来说,0.0.0.0 主要作为一种通配符地址使用,表示“所有IP地址”或“默认”,其确切的行为依据它在何种情境下被使用而定。

5.总结

127.0.0.1 是环回地址
localhost是域名,但默认等于 127.0.0.1。
ping 0.0.0.0在linux系统上会转为ping 127.0.0.1,在windows失败。

ping 环回地址和 ping 本机地址,在linux系统上是一样的,走的是LoopBack网卡,所以断网了也能 ping 通环回地址。
但是实测在windows系统上是ping本机地址和ping环回地址是不一样的。

END
本文作者: 文章标题:断网了,还能ping通 127.0.0.1 吗?为什么?——拆解大厂校招面试题
本文地址:https://blog.orangi.cn/default/ping.html
版权说明:若无注明,本文皆White's Blog原创,转载请保留文章出处。
最后修改:2024 年 07 月 10 日
如果觉得我的文章对你有用,请随意赞赏