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.* 网段的计算机才能访问你的服务端程序。