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

今天,遇到了一个问题,是关于套接字(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.* 网段的计算机才能访问你的服务端程序。

相关推荐