关于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
浙公网安备 33010602011771号