localhost 和 127.0.0.1有什么区别
在测试本地环境是否安装好 Tomcat 的时候我们经常使用localhost:8080 或者 127.0.0.1:8080 来测试。那么这两个到底有什么区别呢?
April 22, 2024
0 words
0 read

在测试本地环境是否安装好 Tomcat 的时候我们经常使用localhost:8080 或者 127.0.0.1:8080 来测试。那么这两个到底有什么区别呢?

💡

localhost 的含义

我们可以这样理解 localhost 的含义:在本机中用以指向本机自身,主要用来访问计算机本身运行的网络服务,换句话说就是可以通过访问 localhost 实现利用网络协议自己与自己通信。

💡

在测试和开发中,我们经常使用 localhost 来测试本机上运行的服务。

127.0.0.1 的含义

127.0.0.1 也是 ip 地址。但是它属于一种特殊的 ip 地址。它是 IPv4议中定义的回环(loopback)地址范围内,该范围是从 127.0.0.0127.255.255.255。这个地址被用于指向执行网络请求的本地计算机,也就是说,它使得计算机可以向自己发送网络请求。在大多数情况下,127.0.0.1 被用作回环地址的标准。

那么以上述定义来看,localhost 和 127.0.0.1 的作用其实是一样的。那么它们到底有什么区别呢?

localhost 和 127.0.0.1有什么区别

百度结果

上面的结果来自 csdn 博客,阅读量高达 10 万+。博客中描述 localhost 不经过网卡传输。

那么如何判断是否经过网卡呢?

我们可以使用 tcpdump 命令。

tcpdump

tcpdump 是一款网络分析工具,它可以抓取通过网络接口传输的数据包的详细信息。换句话说 tcpdump 是一款抓包工具。那么我们就可以利用它来抓去有关 localhost 的数据包了。

首先,我们在终端内输入 ping -c 1 localhost 这个命令的意思是 ping 1 次 localhost

然后使用 tcpdump -i lo0 icmp 抓个包,结果如下图。

tcpdump -i lo0 icmp 命令的意思抓取 lo0 回环网卡上协议为 icmp 的数据包。ping 命令属于 icmp 协议。

💡

可以很清楚的看到有数据包返回。所以,csdn 上那篇文章讲述的 localhost 不经过网卡是错误的。

本机上的/etc/hosts 文件的配置是什么意思?

在本机上运行 nslookup locahost 查看 localhost 对应的 IP 地址,得到结果如下。

nslookup locahost :用于查询域名系统(DNS)以获取主机名对应的IP地址,或者获取IP地址对应的主机名

💡

上图中的属性解释如下:

  • "Non-authoritative answer" 表示这个回答不是来自权威的DNS服务器,而是本地DNS服务器提供的。

  • "Name: localhost" 表示查询的主机名是localhost。

  • "Address: 127.0.0.1" 表示localhost对应的IP地址是127.0.0.1。

这个输出表明localhost在本地主机上对应的IP地址是127.0.0.1。

我们打开本地的/etc/hosts 文件并进行修改

将箭头指向的 IP 地址修改为 127.0.0.2,然后保存。

再次使用 ping localhost 查看对应的 ip 地址,如下图

我们可以看到现在对应的 IP 已经是修改之后的 127.0.0.2 了。

那么假如我们使用114.114.114.114来作为 dns 服务器进行查询,结果如下:

上图结果说明,114.114.114.114 没有找到 localhost 这个主机名对应的 IP 地址,返回了"NXDOMAIN"(No Such Domain)的响应代码。由此我们知道标准的 dns 服务是没有把 localhost 解析到 127.0.0.1 的。

总结

这篇文章总结的很好。

我经过手动测试的出的结果

  1. localhost 经过网卡

  2. localhost 与 127.0.0.1 的映射关系在本机的/etc/hosts 中存放,我们可以修改验证

  3. 标准的 dns 服务器是不会把 localhost 解析为 127.0.0.1的。

  4. 用到的两个命令

    1. nslookup

      1. 用于查询域名系统(DNS)信息

      2. 查询 localhost 对应的主机名:nslookup localhost

      3. 在特定的 dns 服务器上查询 localhost 对应的主机名:nslookup localhost 114.114.114.114

      4. 查询 IP 对应的主机:nslookup 127.0.0.1

    2. tcpdump

      1. 抓包

      2. sudo tcpdump -i any :抓取所有网络接口的包

      3. sudo tcpdump -i eth0 :抓去指定网卡的数据包 ,指定 eth0

      4. sudo tcpdump -i eth0 -w out.pcap :抓包数据保存到 out.pcap 文件

      5. tcpdump -i lo0 icmp:抓取 lo0 回环网卡上协议为 icmp 的数据包

最后,感谢任总@plantegg提供这么优质的实验。多说一句,CSDN 是上的帖子还是的手动验证一下比较好,要不胡说八道的太多。

More Articles
See All