mythicsr 发表于 2015-11-8 14:58:57

【求救】外网如何访问局域网其中一台设备?

【求救】外网如何访问局域网其中一台设备?

不要做端口映射?比如【手机QQ通过WIFI登录,获得192.168.1.100, 服务器是怎么发信息给局域网的这个手机QQ】


比如电信分配给我公网IP:202.x.x.1 (公网)

通过路由器,有两台手机192.168.1.2 和 192.168.1.3

然后192.168.1.2:6666 开了UDP socket服务
同样192.168.1.3:6666 也开了UDP socket服务

问题1:想问别人怎么才能send信息给192.168.1.2的6666这个端口?
问题2:能不能用手机A : 192.168.1.2:6664 发送一个udp packge 到 服务器, 然后服务器获得手机A的通讯信息,返回一些数据给手机A?(其实也是在问题1 , 怎么和手机A 通信,他是内网的)





idle 发表于 2015-11-8 15:18:54

本帖最后由 idle 于 2015-11-8 15:20 编辑

路由器上端口映射啊

fchen2 发表于 2015-11-8 15:23:12

不做端口映射,就需要长链接.TCP用过, UDP没有用过。同一个socket,连接到服务器后,继续监听这个socket,等待来的数据

armku 发表于 2015-11-8 15:55:08

通过公网服务器中转。

dalarang 发表于 2015-11-8 16:00:36

外网访问内网的端口,最好在路由上做端口映射,将该端口映射到内网某个ip的指定端口上。

如果不做端口映射其实也可以访问,但是需要内网的机子主动发起通讯。
我做过测试,内网向外网ip发送UDP通讯时,路由会开启一个随机端口作为临时端口映射,外网ip收到这条UDP数据包后,在短时间内可以通过该随机端口与内网进行通讯。
假设我们现在有内网机子A,IP是192.168.1.88开启了6666端口,这个内网所在的路由B,公网IP是123.123.123.123,公网上另一台服务器C的IP222.222.222.222,开启了7777端口。
若未做端口映射,服务器C直接向B发送UDP数据帧是无法送达A的。
但是若A通过自己的6666端口主动向C地址的7777端口发送一条UDP数据帧,路由B会开启一个随机端口,再通过该随机端口向C的7777端口发送该数据帧。而从服务器C看来,就等于路由B的随机端口向自己的7777端口发送了一条数据帧。
此后,该随机端口的有效期内,服务器C可以向路由B的该随机端口发送UDP数据,路由B就会将数据帧转发给A的6666端口。
端口的有效时间根据路由器设置的不同,大概在数十秒到数分钟左右吧。

SkyGz 发表于 2015-11-8 16:21:16

不做映射的话,那 局端内设备 主动 与 服端 建立连接..........这样就可以了

define_avr 发表于 2015-11-8 16:28:16

1.如果你的路由没有做端口映射,任何人没法先从路由器外发送信息给192.168.1.2的6666这个端口。
   原因:假如设备A:202.X.X.X要发送消息给你192.168.1.2:6666,路径是:202.X.X.X:xxxx------202.x.x.1:xxxx (公网)---------192.168.1.2:6666,如果你的路由202.x.x.1:xxxx (公网)没有做端口映射,路由就直接丢弃这个连接。所以不能发消息给内网。
那么,怎么能没有做路由映射而连接上呢?就是你内网的机子先连外网的这个机子,这个仅限UDP,路径:192.168.1.2:6666------202.x.x.1:xxxx (公网)------202.X.X.X:xxxx,不管202.X.X.X:xxxx机子有没有收到这个UDP数据包都无所谓。这样你的路由里就有条连接记录,202.X.X.X:xxxx发消息给192.168.1.2:6666,路由认为是202.X.X.X:xxxx回复消息。这样就连接上了,这就是传说中的UDP穿透。
那么如果是TCP呢,TCP是要握手的,如果设备A:202.X.X.X也是内网,那么必然连接不上,怎么办?那只能凉拌了。
2,这个问题也也就不用再回答了。

补充:TCP连接到底能不能穿透,理论是是可以的,实际是应该像某雷是已经做到了的,原理就是端口复用,在一个帖子里看到,我没有验证过。

mythicsr 发表于 2015-11-8 17:02:35

dalarang 发表于 2015-11-8 16:00
外网访问内网的端口,最好在路由上做端口映射,将该端口映射到内网某个ip的指定端口上。

如果不做端口映射 ...

刚好也看了这个,和你说的一样NAT。 时间太长了,那个对应关系无效了怎么办,是不是要定时发一个UDP 到 服务器,来维持这种关系?

cnshibo 发表于 2015-11-8 17:08:57

ICE/STUN 协议

mythicsr 发表于 2015-11-8 17:17:14

define_avr 发表于 2015-11-8 16:28
1.如果你的路由没有做端口映射,任何人没法先从路由器外发送信息给192.168.1.2的6666这个端口。
   原因: ...

谢谢您的回复!是的,刚刚也看到了。

mythicsr 发表于 2015-11-8 17:41:35

cnshibo 发表于 2015-11-8 17:08
ICE/STUN 协议

我再看看

ywhbn 发表于 2015-11-8 17:51:36

公网搭一个服务器,自己写一个中转程序,或者用现成的STUN/TURN server

llsenyue 发表于 2015-11-8 18:19:58

这个平台非常适合你,http://www.fuhome.net/bbs/forum.php

llsenyue 发表于 2015-11-8 18:21:27

发UDP包给服务器,然后转发

llsenyue 发表于 2015-11-8 18:21:54

llsenyue 发表于 2015-11-8 18:19
这个平台非常适合你,http://www.fuhome.net/bbs/forum.php

根据平台协议,就可以转发,非常方便

wxws_wxws 发表于 2015-11-9 00:42:53

花生壳有个硬件产品

gxnnhy 发表于 2015-11-9 00:55:10

NAT穿透呀!!网络编程的基础知识了

rain73 发表于 2015-11-9 02:50:03

现在流行公有云概念,不用自己搞域名解释。
页: [1]
查看完整版本: 【求救】外网如何访问局域网其中一台设备?