在前几天使用VMware虚拟机和开发板进行通信的时候有个有意思的现象,记录一下,结合我所了解到的希望对你有所帮助,欢迎指正!
先描述一下连接情况
PC机网口和开发板网口直连,PC机虚拟机通过桥接模式连接PC机的物理网卡,因为没有路由器实现DHCP,手动配置IP如下:
目的是为了实现虚拟机上的TCP server程序可以和开发板上的TCP client程序进行通信,但是我发现三者可以互相ping通,但是开发板上的client程序连接虚拟机server设定的IP和port(127.0.0.1和8888)的时候会被拒绝,通过telnet测试也是被拒绝,一开始我是没有想过这个IP配置的问题,因为在之前写过的TCP通信代码中,如果是通过路由器进行DHCP分配的,基本是没有问题的,但是在这次连接情况中,如果我将服务端的IP设置为127.0.0.1是无法被client连接通信的,后面查到一些资料,将IP改为0.0.0.0之后问题解决。
接下来看一下我查看的一些资料,关于127.0.0.1和0.0.0.0还有本机IP的区别
就拿我们上面设置的虚拟机来说,ifconfig查询的时候会得知IP是192.168.1.123,同时还会显示一个回环地址127.0.0.1,如果你通过route ip show还可以看到一些重要的端口是运行在0.0.0.0地址上的
127.0.0.1:
127.0.0.1是{127,}集合中的一个地址,该集合是专门为回环功能保留的,所有网络号为127开头的都可以被视为回环地址,主要用途是用于ping自己测试TCP/IP是否工作正常,同时因为大部分时候会把localhost配置到127.0.0.1,所以也作为很多服务程序的本地地址
0.0.0.0:
IPV4中,0.0.0.0地址被用于表示一个无效的,未知的或者不可用的目标。它指向的是本机上的所有IP,所以当你如果网卡配置多个IP时,但服务端绑定的是0.0.0.0,则其客户端通过连接你的多个IP都可以连接到这个服务程序
localhost:
很多时候我们会把127.0.0.1和localhost混淆,但是相比127.0.0.1,localhost具有更多的意义。localhost是个域名,而不是一个ip地址。之所以我们经常把localhost与127.0.0.1认为是同一个是因为我们使用的大多数电脑上都在/etc/hosts配置了localhost指向了127.0.0.1这个地址。
全部评论
(1) 回帖