不在一个子网上的两台主机如何通信

本来想用socket在两台电脑建立连接的,首先要确保两台电脑是可以ping通的。
但是这两台电脑不在一个子网上。电脑A的网络地址是180.160.56.159;主机地址是:192.168.1.100
电脑B的网络地址是:222.66.117.26;主机地址是:192.168.1.1。直接在电脑A上ping B 的网络地址或者主机地址
都不能ping通(反过来也是一样)。那么对于这种情况下怎样ping通呢。

如果你的计算机有一方已经在公网上,另一方在内网,它们可以通讯,但是必须先让内网的一方主动和公网的一方建立连接。你有socket,那么根据你用的端口和协议,在公网的一方做端口映射就可以。
如果公网的一方的ip经常会变化,还需要域名和ddns(比如花生壳),让内网的一方通过域名来找这个主机。

有公网IP还ping不通,一定是防火墙屏避了,打开防火墙或路由器, 允许 ICMP数据包通过即可。
如果你说的网络地址并不是主机分配地址, 而仅仅是公用的外网IP, 那你需要将其设为服务,由路由器将相应端口数据转发至内网相应IP 即可。

ping不通不代表不能通讯。两个计算机如果都在内网,那么无法直接通讯,需要你有一个位于公网,并且双方都能连上的服务器中转。这样的服务器你除了自己搭建以外,也可以以每月几十块钱的价格,租用一个云服务器。比如阿里云、微软云等等。

可以用DCP通讯 但是不安全

有公网IP还ping不通,一定是防火墙屏避了,用winshark测试一下

正常情况A能ping通222.66.117.26,B能ping通180.160.56.159。要想socket建立连接,还要路由器端口映射内网主机,你B主机ip为什么是192.168.1.1

这是个需要路由来解决的问题。无论是是ping还是socket都与报文的转发路径有关,必须先解决报文转发路径正确,也就是使用正确的路由,才能解决问题。

*1. 如果是同处于一个内部网络环境的,就是一个大局域网。比如192.168.0.1/24和192.168.1.1/24,他们并不在一个网段内所以无法直接ping通。这时候你可以把2台电脑接入路由器设置静态或者动态路由,计算机网关指向路由,这样icmp包就可以相互到达,双方ping通。 *2. 如果2台计算机同时处于公网内,只要能联网肯定是可以ping通的。

*3. 还有一种情况是有一台机器是属于内网的ip如192.168.10.1,另外一台计算机是公网IP,如202.100.1.17,如果这2台要ping通的话,内网IP的那台机器只要能联网就能ping的通公网IP的计算机,而公网的计算机要访问内网计算机,需要通过VPN或者端口映射来完成访问。

如果是服务器的话可以考虑再启用一块网卡,我们的服务器是有4块网卡的

用路由器进行路由 静态rip等路由协议

如果是在同一个路由环境下 只是网段不一样 那你可以在其中一台计算机里面 添加双ip地址 双网关 然后用route -p add 添加个路由信息

通过nat123映射试试

我跟你说了吧 首先要有主机之间要能互相访问能够ping通,如果内网、外网ip都是静态的只要做nat映射就好了,如果都是动态的那就要做动态域名解析接着在做nat映射才能访问。