跳转至内容
0
  • 主页
  • 版块
  • 最新
  • 标签
  • 热门
  • 主页
  • 版块
  • 最新
  • 标签
  • 热门
折叠
品牌标识
让每一次思考都有价值
  1. 让每一次思考都有价值
  2. 版块
  3. 记录与分享
  4. localhost和127.0.0.1到底啥区别

localhost和127.0.0.1到底啥区别

已定时 已固定 已锁定 已移动 记录与分享
2 评论 2 发布者 13 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
评论
  • 在新文章中评论
登录后评论
此文章已被删除。只有拥有文章管理权限的用户可以查看。
  • 小黑小 离线
    小黑小 离线
    小黑
    编写于 最后由 Jinhao 编辑
    #1
    目录
    一、先搞懂:localhost和 127.0.0.1 到底是啥?
    1. 127.0.0.1—— 实实在在的 “数字地址”​
    2. localhost—— 方便记忆的 “别名”​
    二、核心区别:从使用和原理上看不同
    1. 类型不同​
    2. 解析方式不同​
    3. 权限和使用场景的细微差异​
    三、实际应用:我在工作和生活中怎么用它们?
    1. 本地服务测试 —— 最常用的场景​
    2. 网络故障排查 —— 判断问题出在哪​
    3. 开发环境配置 —— 灵活适配需求​
    一、先搞懂:localhost和 127.0.0.1 到底是啥?
    1. 127.0.0.1—— 实实在在的 “数字地址”​

    在我看来,127.0.0.1 就像是电脑里一个固定的 “数字门牌号”。它是 IPv4 地址中专门保留给本机回环测试的地址,属于 A 类地址(范围 1.0.0.0 - 126.255.255.255,127 网段特殊保留)。​
    你可以把电脑想象成一栋房子,127.0.0.1 就是这栋房子里一个专门用于 “内部沟通” 的房间号。当我在浏览器里输入 127.0.0.1,或者在命令行里 ping 127.0.0.1 时,信号不会跑到外面的互联网,而是直接在电脑内部循环传输。​

    [示意1:127.0.0.1 的传输路径]

    我的操作(如ping 127.0.0.1)
        ↓
    电脑的网络协议栈(处理网络请求的“中转站”)
        ↓
    直接指向本机(不经过网卡、路由器等外部设备)
        ↓
    返回响应(告诉我们本机网络协议栈正常)
    

    比如有一次,我怀疑自己电脑的网络协议栈出了问题,就打开命令提示符,输入 ping 127.0.0.1。如果出现 来自 127.0.0.1 的回复:字节 = 32 时间 < 1ms TTL=128”这样的信息,就说明电脑内部的网络协议栈是正常的;要是出现超时,那大概率是协议栈出了故障,得赶紧排查。

    2. localhost—— 方便记忆的 “别名”​

    localhost则更像是 127.0.0.1 的 “外号”,是一个域名。它存在的意义就是为了方便我们记忆和使用,毕竟比起一串数字,localhost”这几个字母更容易记住。​
    不过,localhost和127.0.0.1也不是完全绑定的。在电脑的 hosts 文件(Windows 系统在 C:\Windows\System32\drivers\etc\hosts,Linux 和 macOS 在 /etc/hosts)里,我们可以修改localhost对应的 IP 地址。比如我曾经为了测试某个本地服务,就把localhost指向了 192.168.1.100(我电脑在局域网里的 IP),不过一般情况下,默认都是指向 127.0.0.1 的。​

    [示意2:localhost与 IP 的对应关系(默认情况)]

    localhost(域名)
        ↓
    查询hosts文件(系统首先查找的“地址簿”)
        ↓
    找到对应记录:127.0.0.1 localhost
        ↓
    指向127.0.0.1(最终还是落到这个数字地址上)
    

    举个例子,我在本地搭建了一个网站,用localhost:8080就能访问,和用 127.0.0.1:8080 访问的效果是一样的。但如果我修改了 hosts 文件,把localhost指向了其他 IP,那再用localhost访问就会指向新的 IP 了。


    二、核心区别:从使用和原理上看不同
    1. 类型不同​

    这是最根本的区别。127.0.0.1是IP地址,是网络中设备的数字标识,直接对应网络层的地址;而localhost是域名,属于应用层的概念,需要通过域名解析(先查 hosts 文件,再查 DNS 服务器,这里默认查 hosts)才能对应到具体的 IP 地址。​
    就像我家的地址,“XX 市 XX 区 XX 路 123 号” 是类似 IP 地址的具体位置,而 “我家” 就是类似localhost的别名,别人问我去哪,我说 “去我家”,大家都知道是那个具体地址,但 “我家” 本身不是一个具体的位置标识。

    2. 解析方式不同​

    当我使用127.0.0.1时,电脑不需要进行域名解析,直接就能识别这是本机的回环地址,直接进行内部通信;而使用localhost时,电脑首先会去查hosts文件,看里面有没有localhost对应的 IP 地址,如果有,就直接用对应的 IP;如果没有,才会去请求 DNS 服务器进行解析(不过默认情况下 hosts 文件里都会有localhost对应127.0.0.1的记录)。​
    曾经我在测试一个本地程序时,发现用localhost访问很慢,用127.0.0.1访问却很快。后来排查才发现,我之前不小心在 hosts 文件里给localhost加了其他解析记录,导致电脑在解析localhost时多走了几步流程,速度就慢了。把 hosts 文件恢复默认后,两者访问速度就一样了。

    3. 权限和使用场景的细微差异​

    在一些特殊场景下,两者的权限和使用会有细微不同。比如在某些操作系统的安全策略中,localhost可能会有更严格的访问控制;还有在一些编程框架里,使用localhost和127.0.0.1可能会有不同的默认配置。​
    比如我用 Java 的 Tomcat 服务器时,默认配置下,localhos只能本机访问,而如果绑定的是0.0.0.0(代表所有网卡的 IP),其他设备才能访问。但如果我把 Tomcat 绑定到127.0.0.1,和绑定到localhost的效果是一样的,都只能本机访问。不过如果我修改了localhost对应的 IP,那绑定localhost和绑定 127.0.0.1的效果就不一样了。


    三、实际应用:我在工作和生活中怎么用它们?
    1. 本地服务测试 —— 最常用的场景​

    作为一个程序员,我经常需要在本地搭建各种服务,比如 Web 服务器、数据库服务等,这时候localhost和127.0.0.1就派上大用场了。​
    比如我用 Python 的 Flask 框架写了一个简单的 Web 接口,运行起来后,控制台会提示Running on http://127.0.0.1:5000/ (Press CTRL+C to quit),这时候我在浏览器里输入http://localhost:5000/或者http://127.0.0.1:5000/,都能访问到这个接口,测试接口是否能正常返回数据。​
    再比如我本地安装了 MySQL 数据库,默认情况下,数据库服务会监听 127.0.0.1 的 3306 端口。我在本地用 Navicat 连接数据库时,主机地址填localhost或者 127.0.0.1,端口填 3306,再输入用户名和密码,就能连接到本地的 MySQL 数据库,进行建表、查询数据等操作。​

    [示意3:本地 Web 服务访问流程]

    我写的Flask程序(运行在本地,端口5000)
        ↓
    监听127.0.0.1:5000(等待请求)
        ↓
    我在浏览器输入localhost:5000或127.0.0.1:5000
        ↓
    请求在本机内部传输,到达Flask程序
        ↓
    程序返回响应,浏览器显示页面
    
    2. 网络故障排查 —— 判断问题出在哪​

    前面也提到过,ping 127.0.0.1 可以用来测试本机的网络协议栈是否正常。除此之外,结合localhost和 127.0.0.1,还能排查更多网络问题。​
    比如有一次,我在本地搭建了一个 Nginx 服务器,想通过localhost:80访问,但一直访问不了。我先 ping 127.0.0.1,发现能 ping 通,说明本机协议栈没问题;然后我又 ping localhost,也能 ping 通,说明 hosts 文件里localhost的解析是正常的。那问题可能出在 Nginx 的配置上,我去查 Nginx 的配置文件,发现端口号写错了,改成 80 后,再用localhost访问就正常了。​
    还有一次,我发现用localhost能访问本地服务,但用 127.0.0.1 却访问不了。这时候我就怀疑是 hosts 文件被修改了,打开 hosts 文件一看,果然localhost被指向了其他 IP,把记录改回 127.0.0.1 localhost后,127.0.0.1 就能正常访问了。

    3. 开发环境配置 —— 灵活适配需求​

    在开发过程中,有时候需要根据不同的环境配置不同的地址。比如我开发一个前端项目,本地开发时,接口请求需要指向本地的后端服务,这时候我就会在前端的配置文件里把接口基础地址设为http://localhost:8080/api,这样在本地运行前端项目时,请求就会发送到本地的后端服务。​
    当项目要部署到测试环境时,再把接口基础地址改成测试环境的服务器地址,比如 http://test-server:8080/api。这种配置方式很灵活,不用修改代码,只改配置文件就能适配不同的环境。​
    还有在 Docker 容器部署时,有时候容器内部需要访问宿主机的服务,这时候在容器里用localhost是访问不到宿主机服务的(因为容器里的localhost指的是容器本身),这时候就需要用宿主机在局域网里的 IP,或者在某些情况下,用127.0.0.1的特殊配置(比如 Docker 的 host 网络模式)来访问宿主机的服务。不过这属于比较复杂的场景,需要根据具体的 Docker 配置来调整。

    1 条评论 最后评论
    0
    • 十二十 离线
      十二十 离线
      十二
      编写于 最后由 编辑
      #2

      欢迎小黑哥哥

      1 条评论 最后评论
      0
      评论
      • 在新文章中评论
      登录后评论
      • 从旧到新
      • 从新到旧
      • 最多赞同


      • 登录

      • 没有帐号? 注册

      • 登录或注册以进行搜索。
      • 第一个评论
        最后一个评论