localhost、127.0.0.1 和 本机IP 三者的区别

8 篇文章 0 订阅
6 篇文章 0 订阅

localhost

首先 localhost 是一个域名,在过去它指向 127.0.0.1 这个IP地址。在操作系统支持 ipv6 后,它同时还指向ipv6 的地址 [::1]
在 Windows 中,这个域名是预定义的,从 hosts 文件中可以看出:

# localhost name resolution is handled within DNS itself.
#   127.0.0.1       localhost
#   ::1             localhost

而在 Linux 中,其定义位于 /etc/hosts 中:

127.0.0.1    localhost

注意这个值是可修改的,比如把它改成

192.068.206.1    localhost

然后再去 ping localhost,提示就变成了

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

127.0.0.1

127.0.0.1 这个地址通常分配给 loopback 接口。loopback 是一个特殊的网络接口(可理解成虚拟网卡),用于本机中各个应用之间的网络交互。只要操作系统的网络组件是正常的,loopback 就能工作。Windows 中看不到这个接口,Linux中这个接口叫 lo:


#ifconfig
eth0    Link encap:Ethernet hwaddr 00:00:00:00:00:00
            inet addr :192.168.0.1 Bcase:192.168.0.255 Mask:255.255.255.0
           ......
lo        Link encap:Local Loopback
           inetaddr: 127.0.0.1 Mask: 255.0.0.0
           ......

可以看出 lo 接口的地址是 127.0.0.1。事实上整个 127.* 网段都算能够使用,比如你 ping 127.0.0.2 也是通的。
但是使用127.0.0.1作为loopback接口的默认地址只是一个惯例,比如下面这样:

#ifconfig lo 192.168.128.1
#ping localhost   #糟糕,ping不通了
#ping 192.128.128.1  # 可以通
#ifconfig lo
lo        Link encap:Local Loopback
           inetaddr: 192.168.128.1 Mask: 255.255.255.0
           ......

如果随便改这些配置,可能导致很多只认 127.0.0.1 的软件挂掉。

本机IP

确切地说,“本机地址”并不是一个规范的名词。通常情况下,指的是“本机物理网卡所绑定的网络协议地址”。由于目前常用网络协议只剩下了IPV4,IPX/Apple Tak消失了,IPV6还没普及,所以通常仅指IP地址甚至ipv4地址。一般情况下,并不会把 127.0.0.1当作本机地址——因为没必要特别说明,大家都知道。
本机地址是与具体的网络接口绑定的。比如以太网卡、无线网卡或者PPP/PPPoE拨号网络的虚拟网卡,想要正常工作都要绑定一个地址,否则其他设备就不知道如何访问它。

● localhost 是个域名,不是地址,它可以被配置为任意的 IP 地址,不过通常情况下都指向 127.0.0.1(ipv4)和 ::1
● 整个127.* 网段通常被用作 loopback 网络接口的默认地址,按惯例通常设置为 127.0.0.1。这个地址在其他计算机上不能访问,就算你想访问,访问的也是自己,因为每台带有TCP/IP协议栈的设备基本上都有 localhost/127.0.0.1。
● 本机地址通常指的是绑定在物理或虚拟网络接口上的IP地址,可供其他设备访问到。
● 最后,从开发度来看
○ localhost是个域名,性质跟 “www.baidu.com” 差不多。不能直接绑定套接字,必须先gethostbyname转成IP才能绑定。
○ 127.0.0.1 是绑定在 loopback 接口上的地址,如果服务端套接字绑定在它上面,你的客户端程序就只能在本机访问。

错误信息 "Could not connect to Redis at 127.0.0.1:6379:由于目标计算机积极拒绝,无法连接" 表示在尝试通过网络连接到本地 Redis 服务器时遇到了障碍。这个错误通常由以下几个原因引起: ### 1. **Redis服务未运行** 可能是Redis服务器进程没有启动,或者它已经停止了。检查系统中的Redis服务状态,如果服务已关闭,请按照您的操作系统说明启动服务。 ### 2. **防火墙阻止访问** 您的系统防火墙可能配置为了禁止对端口6379的访问。您需要调整防火墙规则允许从所有来源访问该端口,或者将Redis添加至防火墙例外列表。 ### 3. **权限限制** Redis服务可能没有足够的权限来监听指定的端口。检查Redis的服务账户是否有启动、读取、写入等所需的文件系统权限。 ### 4. **端口号冲突** 如果您在同一台机器上运行了其他服务并使用了端口6379,那么Redis将无法在该端口下启动。确认端口是否已经被占用,并相应地更改Redis配置。 ### 解决步骤: #### 步骤一:确认Redis服务状态 - 对于基于Linux的操作系统,您可以使用命令 `redis-server --daemonize yes` 启动Redis服务。确保Redis安装目录下的 `redis.conf` 配置文件设置正确,尤其是 `port` 和 `bind` 参数应该指向希望使用的端口和绑定地址(通常是localhostIP地址)。 #### 步骤二:检查防火墙配置 - 使用 `sudo ufw status` 或 `sudo firewall-cmd --list-all` 检查当前防火墙规则。 - 如果使用的是iptables,请检查 `iptables -L` 输出,确保没有阻拦特定端口的规则存在。 - 如果防火墙阻止了特定端口,则需要添加允许规则,例如对于iptables可以使用 `sudo iptables -A INPUT -p tcp --dport 6379 -j ACCEPT` 来允许端口6379的TCP流量进入。 #### 步骤三:验证权限 - 确保运行Redis服务的用户拥有正确的权限去读写数据和监听端口。这通常涉及到修改 `/etc/sudoers` 文件,确保服务运行用户能够执行必要的操作。 #### 步骤四:确认端口无冲突 - 查看正在运行的所有服务及其占用的端口,确保Redis服务不会与其他服务冲突。 - 如果发现冲突,可能需要调整某些服务的配置以释放端口资源。 ### 相关问题: 1. 是否有其他服务正在监听端口6379? 2. 系统防火墙是否允许所有来源访问端口6379? 3. Redis服务运行用户的权限是否足够高,能执行必要的操作? --- 记得在执行任何涉及系统安全性的操作时,务必谨慎行事,以免意外地打开不必要的入口点给恶意攻击者。始终确保了解并熟悉所作更改的潜在影响。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值