关于0.0.0.0:8000,服务器会在本地的内网上监听请求

如果有请求:8.134.135.119:8000(公网ip)

则本服务器会返回数据

 

 

那么问题来了:

如果该内网中有两台服务器同时设置了0.0.0.0:8000,

那么有请求:8.134.135.119:8000(公网ip)时

应该哪一台服务器返回数据呢?

经过测试,应该是先占用该0.0.0.0端口的服务器返回数据,而另一台服务器需要等待该服务器放弃该0.0.0.0+端口时才能够使用该0.0.0.0+ip

 

 

 

问题又来了:

0.0.0.0到底如何定义?

计算机网络书上的定义是:代表本局域网上的本主机

外文书上的定义是:unspecified(未定义)及没有任何意义

从功能上看,一般用于某些程序/网络协议中不便使用具体ip的特殊情况

那么谁先占用便谁使用呗

 

 

 

 

公网ip+端口是如何映射到内网ip+端口的?

端口映射就是將外网主机的IP地址的一个端口映射到内网中的一台设备,提供相应的服务。当用户访问这个IP这个端口时,服务器自动将请求映射到对应局域网内部的终端设备上。

windows查看端口映射:

netstat -ano

ubuntu查看端口映射:

netstat -a

查看Tcp连接状态

netstat -napt

测试结果:

 tcp        0      0 0.0.0.0:8000            0.0.0.0:*               LISTEN

前面的是私网ip和端口号,后面的是映射的公网ip和端口号

 

 

 

不对,问题是:我用

ssh root@公网ip地址

那么服务器是怎么知道我需要连接的服务器?

这个是ssh的ip和端口号,ssh用的也是0.0.0.0  -_-

tcp        0      0 0.0.0.0:ssh             0.0.0.0:*               LISTEN

 

 

反复复习计算机网络之后,原来,服务器的ip就是公网ip地址,没有内网,我在服务器上面查到的是docker的内网地址。。

上面要实现的方法是:NAT穿透技术:客户端主动从NAT设备获取公有IP并且建立端口映射。那么共有的端口则谁先占用归谁

查看公网ip地址:curl ifconfig.me