linux之localhost&127.0.0.1&及本机地址的区别

本文介绍了一次解决套接字绑定问题的经历,详细解释了如何从只能本地访问的状态调整为外部网络也可访问的过程,并深入探讨了socket的工作原理及不同IP地址的应用场景。

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

今天,遇到了一个问题,是关于套接字(socket)的。

大概是这样,一个应用程序启动,从它的log来看,它提示我可以通过访问http://127.0.0.1:9990/console/index.html来打开控制画面。

于是我尝试着从本地windows机去访问下面的URL

http://192.168.100.25:9990/console/index.html,但是怎么也访问不了。关了防火墙,也没有用。

 

因为我对这个一点都不敏感,所以最后还是同事帮我解决的说是端口被绑在了127.0.0.1上,所以只支持本地访问。外面是没有办法访问的,后来修改了配置文件,将绑定的IP从127.0.0.1改成了192.168.100.25.

这样改完后,可以正常访问。于是拓展学习了一下。。。。。。。。。

 

socket(套接字)

它是网络通信过程中端点的抽象表示,包含进行网络通信必需的五种信息:连接使用的协议,本地主机的IP地址,本地进程的协议端口,远地主机的IP地址,远地进程的协议端口。

Socket可以看成在两个程序进行通讯连接中的一个端点,是连接应用程序和网络驱动程序的桥梁,Socket在应用程序中创建,通过绑定与网络驱动建立关系。此后,应用程序送给Socket的数据,由Socket交给网络驱动程序向网络上发送出去。计算机从网络上收到与该Socket绑定IP地址和端口号相关的数据后,由网络驱动程序交给Socket,应用程序便可从该Socket中提取接收到的数据,网络应用程序就是这样通过Socket进行数据的发送与接收的。


网络通讯地址(IP+PORT)

 

localhost

localhost 是个域名,不是地址,它可以被配置为任意的 IP 地址,不过通常情况下都指向 127.0.0.1(ipv4)和 [::1](ipv6),性质跟 “www.baidu.com” 差不多。不能直接绑定套接字,必须先gethostbyname转成IP才能绑定。

 

127.0.0.1
127.0.0.1 是绑定在 loopback 接口上的地址,如果服务端套接字绑定在它上面,你的客户端程序就只能在本机访问。
loopback 是一个特殊的网络接口(可理解成虚拟网卡),用于本机中各个应用之间的网络交互。
[root@localhost configuration]# ifconfig
eno16780032: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.100.25  netmask 255.255.255.0  broadcast 192.168.100.255
        inet6 fe80::250:56ff:feb0:1174  prefixlen 64  scopeid 0x20<link>
        ether 00:50:56:b0:11:74  txqueuelen 1000  (Ethernet)
        RX packets 158463  bytes 180993677 (172.6 MiB)
        RX errors 0  dropped 345  overruns 0  frame 0
        TX packets 87686  bytes 15009155 (14.3 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 0  (Local Loopback)
        RX packets 11620  bytes 2163371 (2.0 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 11620  bytes 2163371 (2.0 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

 

本机地址

如果主机中存在多个网卡,分别连接不同的物理网络,比如 192.168.0.1/255.255.255.0 和 192.168.1.1/255.255.255.0,那么当你的服务端套接字绑到 192.168.0.1 这个地址上时,位于 192.168.1.* 网段的其他计算机是无法连接的,只有位于192.168.0.* 网段的计算机才能访问你的服务端程序。

 

### 关于 `localhost` IP 地址 `127.0.0.1` 的配置与解释 #### 什么是 `localhost`? `localhost` 是计算机网络中的一个标准主机名,用于指代本机。它通常被解析为环回(loopback)IP地址 `127.0.0.1` 或 IPv6 地址 `::1`[^1]。 #### 如何配置或查看 `localhost` 与 `127.0.0.1` 的关联? 在 Linux 系统中,`/etc/hosts` 文件定义了本地主机名到 IP 地址的映射关系。可以通过编辑此文件来配置或验证 `localhost` 是否正确绑定到了 `127.0.0.1`。 以下是 `/etc/hosts` 文件的一个典型条目: ```plaintext 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 ``` 如果需要确认当前系统的设置,可以运行以下命令: ```bash cat /etc/hosts ``` 这会显示 `/etc/hosts` 文件的内容,从而帮助判断 `localhost` 是否已正确定义并绑定至 `127.0.0.1`[^1]。 #### 测试 `localhost` 到 `127.0.0.1` 的连通性 为了进一步验证 `localhost` 的功能,可执行如下操作: 1. 使用 `ping` 命令测试连接: ```bash ping -c 4 localhost ``` 2. 如果希望更深入地了解 DNS 查询行为,还可以借助 `host` 工具进行域名反向解析测试: ```bash host 127.0.0.1 ``` 输出应类似于以下内容: ```plaintext 1.0.0.127.in-addr.arpa domain name pointer localhost. ``` 以上方法均有助于确保 `localhost` 正确对应到环回地址 `127.0.0.1`[^2]。 #### 应用场景说明 当应用程序尝试访问 `http://localhost` 或其他基于 `localhost` 的服务时,实际上是在调用同一台机器上的资源而非远程服务器。这种机制对于开发人员尤其重要,在调试阶段能够显著减少外部依赖带来的不确定性[^3]。 此外,在电子邮件传输过程中,即使目标收件人的邮箱位于另一物理位置,发送方邮件服务器仍可能先通过内部循环路径处理消息后再转发出去&mdash;&mdash;这一流程同样涉及对 `localhost` 及其相关联 IP 地址的理解应用[^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值