彻底明白ip地址,区分localhost、127.0.0.1和0.0.0.0

本文详细解释了IP地址的概念,包括其在网络通信中的作用、公有地址与私有地址的区别及应用场景,以及localhost、127.0.0.1、0.0.0.0和本机IP的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

通俗的了解IP地址是什么

对于IP地址,大家并不陌生,特别是在网络访问中我们会经常使用到(平时对域名如百度的www.baidu.com的访问,本质就是对域名所绑定的IP地址的访问),那么IP地址是什么呢?

首先,我们要知道网络中的相互访问其实就是在进行两者间的数据传递。就如同送快递一样,快递发出只有知道你的住址信息,才能将快递送到你的手中。而在网络访问时,只有知道你在网络中的地址信息,才能将数据发送到你的设备上。所以,IP地址就是你在网络中的地址信息。与你现实地址不同的是,你的现实地址使用文字表示,而你在网络中的地址(IP地址)是用二进制数字表示的。

简要的了解下公网与内网中的IP地址

一般我们会将网络划分公网(连Internet的)内网

公有IP地址

一般称公网中的IP地址为公有地址。公有地址由Inter NIC(因特网信息中心)负责,这些IP地址分配给注册并向Inter NIC提出申请的组织机构。公有地址是全球唯一的,公网中不可能存在两个相同的IP地址

范围:除了私有地址以外的地址,都属于公有地址

私有IP地址

一般称内网(即局域网)中的IP地址为私有地址。私有地址是非注册地址,用于组织机构内部使用。私有地址的范围如下:

  • A类IP地址中:10.0.0.0--10.255.255.255
  • B类IP地址中:172.16.0.0--172.31.255.255
  • C类IP地址中:192.168.0.0--192.168.255.255

私有地址与公有地址不同,并不是由Internet分配的,是不允许出现在Internet中的,我们在公网中是看不到私有IP地址的,并且公有地址也不会使用上述的三类地址。所以,私有地址是不能直接与Internet连接的。

而如果想用私有地址与Internet连接来访问公网,那该怎么做?这就需要将私有IP地址转换成公网IP地址,与外部连接。所以,我们平时使用的路由器中会装有一个叫做 NAT(网络地址转换) 的软件,我们的路由器中会至少会有一个有效的公网IPNAT会将我们的私有地址转成路由器中的公网IP与外部Internet连接。而同样的,因为使用的是路由器中的公共的公网IP来连接Internet,所以这个内网中的PC在Internet中显示的都是路由器的公共IP,这样做不仅提供了一定程度的安全,也可以有效的减缓可用的IP地址空间的枯竭问题。(像我们学校或者公司的内网一般都是这么做的)

另外还有一点,在同一个局域网内,IP地址是唯一的;但是在不同的局域网内,IP地址是可以重复出现的。

举个小例子:局域网A中,有个主机的IP地址192.168.10.128,那么绝不可能在局域网A中还有其他主机的IP地址192.168.10.128。但是在局域网B中却可以有主机的IP地址也是192.168.10.128
如果局域网A中的192.168.10.128主机局域网B中的192.168.10.128主机通信,不会冲突吗?不会,因为上述说过,它们最终都是使用路由器中的公网IP来连接外网的,而公网IP是全球唯一的。

localhost、127.0.0.1和0.0.0.0和本机IP的区别

localhost

localhost其实是域名,一般windows系统默认将localhost指向127.0.0.1,但是localhost并不等于127.0.0.1localhost指向的IP地址是可以配置的

127.0.0.1

首先我们要先知道一个概念,凡是以127开头的IP地址,都是回环地址(Loop back address),其所在的回环接口一般被理解为虚拟网卡,并不是真正的路由器接口。

所谓的回环地址,通俗的讲,就是我们在主机上发送给127开头的IP地址的数据包会被发送的主机自己接收,根本传不出去,外部设备也无法通过回环地址访问到本机。

小说明:正常的数据包会从IP层进入链路层,然后发送到网络上;而给回环地址发送数据包数据包会直接被发送主机的IP层获取,后面就没有链路层他们啥事了。

127.0.0.1作为{127}集合中的一员,当然也是个回环地址。只不过127.0.0.1经常被默认配置为localhostIP地址
一般会通过ping 127.0.0.1来测试某台机器上的网络设备是否工作正常。

0.0.0.0

首先,0.0.0.0是不能被ping通的。在服务器中,0.0.0.0并不是一个真实的的IP地址,它表示本机中所有的IPV4地址。监听0.0.0.0的端口,就是监听本机中所有IP的端口。

本机IP

本机IP通常仅指在同一个局域网内,能同时被外部设备访问和本机访问的那些IP地址(可能不止一个)。像127.0.0.1这种一般是不被当作本机IP的。本机IP是与具体的网络接口绑定的,比如以太网卡、无线网卡或者PPP/PPPoE拨号网络的虚拟网卡,想要正常工作都要绑定一个地址,否则其他设备就不知道如何访问它。

小例子剧场(帮助理解本机IP、127.0.0.1和0.0.0.0)

现在有两台pc在同一个局域网内,分别为pc1与pc2,pc1上有一个网卡,IP地址为192.168.10.128

  • pc1中sever监听127.0.0.1,则pc1中的client可以连上127.0.0.1192.168.10.128连不上;而pc2中client都连不上。
  • pc1中sever监听192.168.10.128,则pc1中的client可以连上192.168.10.128127.0.0.1连不上;而pc2中client能连上192.168.10.128
  • pc1中sever监听0.0.0.0,则pc1中的client可以连上127.0.0.1192.168.10.128,pc2中的client能连上192.168.10.128
`127.0.0.1` `0.0.0.0` 是 IPv4 协议中两个特殊的地址,分别用于不同的网络通信场景,以下是它们的详细解析区别: --- ### **1. `127.0.0.1`(本地回环地址)** - **定义**: `127.0.0.1` 是 IPv4 的**本地回环地址**(Loopback Address),用于在本地主机内部进行网络通信测试。 - **作用**: - 允许程序通过 TCP/IP 协议与**本机**上的其他服务或进程通信,而无需经过物理网卡。 - 常用于开发调试(如测试 Web 服务器、数据库连接等)。 - **特点**: - 仅限本机访问,外部网络无法连接。 - 绑定到 `127.0.0.1` 的服务只能由本机发起请求(如 `http://127.0.0.1:8000`)。 - **示例**: ```python # 启动一个仅本机可访问的 Flask 服务 from flask import Flask app = Flask(__name__) @app.route("/") def home(): return "Hello, Localhost!" if __name__ == "__main__": app.run(host="127.0.0.1", port=5000) # 外部无法访问 ``` --- ### **2. `0.0.0.0`(监听所有可用接口)** - **定义**: `0.0.0.0` 是一个特殊的**非路由地址**,表示“所有可用的网络接口”。 - **作用**: - 用于服务监听时,表示接受来自**任何网络接口**(包括本机、局域网、公网)的连接。 - 常用于服务器部署(如 Web 服务器、API 服务等)。 - **特点**: - 绑定到 `0.0.0.0` 的服务可被本机、局域网或公网访问(需配置防火墙路由)。 - 如果服务器有多个网卡(如以太网、Wi-Fi),`0.0.0.0` 会监听所有网卡的流量。 - **示例**: ```python # 启动一个可被外部访问的 Flask 服务 from flask import Flask app = Flask(__name__) @app.route("/") def home(): return "Hello, World!" if __name__ == "__main__": app.run(host="0.0.0.0", port=5000) # 外部可通过服务器IP访问 ``` --- ### **关键区别** | **特性** | **`127.0.0.1`** | **`0.0.0.0`** | |------------------------|------------------------------------|-----------------------------------| | **访问范围** | 仅限本机 | 所有网络接口(本机、局域网、公网) | | **用途** | 本地开发、测试 | 服务器部署、对外提供服务 | | **安全性** | 高(外部无法访问) | 低(需配合防火墙控制访问) | | **绑定后的监听行为** | 仅响应本机请求 | 响应所有接口的请求 | --- ### **常见问题** 1. **为什么绑定 `0.0.0.0` 后外部无法访问?** - 可能原因: - 防火墙阻止了端口(如 Windows Defender、iptables)。 - 服务器未配置公网 IP 或 NAT 路由。 - 云服务商的安全组规则限制(如 AWS 安全组、阿里云安全组)。 2. **如何选择绑定地址?** - 开发测试:用 `127.0.0.1`(避免外部干扰)。 - 生产环境:用 `0.0.0.0`(需配合防火墙限制 IP 访问)。 3. **`0.0.0.0` `::`(IPv6)的关系?** - `0.0.0.0` 是 IPv4 的“所有接口”,而 `::` 是 IPv6 的等效地址(如 `app.run(host="::", port=5000)`)。 4. **为什么 `ping 0.0.0.0` 会失败?** - `0.0.0.0` 是监听地址,不是可路由的目标地址,无法直接 ping 通。 5. **多网卡环境下 `0.0.0.0` 的行为?** - 服务会监听所有网卡的流量。例如,服务器有 `192.168.1.100`(内网) `203.0.113.45`(公网),绑定 `0.0.0.0` 后,两者均可访问服务。 --- ### **代码示例对比** ```python # 仅本机可访问 app.run(host="127.0.0.1", port=5000) # 访问:http://127.0.0.1:5000 # 所有接口可访问(需防火墙放行) app.run(host="0.0.0.0", port=5000) # 访问:http://本机IP:5000 或 http://局域网IP:5000 ``` --- ### **总结** - **`127.0.0.1`**:本地测试专用,安全隔离。 - **`0.0.0.0`**:对外提供服务,需配合网络配置安全策略。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值