duedue 发表于 2016-4-28 09:32:31

路由器上UDP打洞需要的心跳时间最短要多少

路由器UDP通信端口开放的维持时间,都说会有一个很短的维持时间,也说每种路由器都不一样,那么有没有一个经验值,最短是多少呢?
设的 太短 对服务器压力不小,设的太长,可能会导致有些路由器时间超了。

windboy 发表于 2016-4-28 09:40:16

UDP这个回收是和网络的繁忙程度有关的

lpantonie 发表于 2016-4-28 10:05:45

不懂帮顶,以前研究过UDP打洞,发现对我来说有点难,就先放弃了,在一篇论文里中提到NAT设备最短只有20秒~

以下为论文的中文翻译:

3.6 UDP在空闲状态下的超时问题
由于UDP转换协议提供的“洞”不是绝对可靠的,多数NAT设备内部都有一个UDP转换的空闲状态
计时器,如果在一段时间内没有UDP数据通信,NAT设备会关掉由“打洞”操作打出来的“洞”,
做为应用程序来讲如果想要做到与设备无关,就最好在穿越NAT的以后设定一个穿越的有效期。
很遗憾目前没有标准有效期,这个有效期与NAT设备内部的配置有关,最短的只有20秒左右。
在这个有效期内,即使没有p2p数据包需要传输,应用程序为了维持该“洞”可以正常工作,也
必须向对方发送“打洞”维持包。这个维持包是需要双方应用都发送的,只有一方发送不会维持
另一方的session正常工作。除了频繁发送“打洞”维持包以外,还有一个方法就是在当前的“洞”
有效期过期之前,p2p客户端双方重新“打洞”,丢弃原有的“洞”,这也不失为一个有效的方法。

以下为原版论文,UDP超时问题在3.6节

albert_w 发表于 2016-4-28 10:08:57

TCP 打洞时间是不是好一些,当然服务器比较累。

duedue 发表于 2016-4-28 11:10:26

多谢楼上各位!

kevin_me 发表于 2016-4-28 11:42:44

我刚才搜索了一下才了解打洞是什么意思,好像目的就是为了两个内网的机器能够直接相互通信,而甩开位于公网的中间服务器吧。

还有什么好处吗?在实际生活中,还有什么意义吗?因为现在使用QQ什么的,给人的感觉不都是内网内的机器在直接互相通信吗?虽然这中间有腾讯的服务器进行转发。

duedue 发表于 2016-4-28 12:28:40

主要的意义就是可以提高实时性

dhbighead 发表于 2016-4-28 12:38:04

TCP打洞太复杂 目前有几个标准 stun turn 针对不同场景的

dhbighead 发表于 2016-4-28 12:38:53

kevin_me 发表于 2016-4-28 11:42
我刚才搜索了一下才了解打洞是什么意思,好像目的就是为了两个内网的机器能够直接相互通信,而甩开位于公网 ...

主要是为了应对NAT NAT导致设备不能直接互联互通

dhbighead 发表于 2016-4-28 12:40:16

还有,最简单但是有点危险的方式是用upnp,不过很多路由器是关闭了upnp 的

ywhbn 发表于 2016-4-28 12:47:51

不太会这样设计,因为一部分路由不支持UDP的端口映射

vtte 发表于 2016-4-28 12:51:48

udp心跳时间最好小于30秒。

vtte 发表于 2016-4-28 12:52:43

赶快上ipv6吧,ipv6就没有这个问题了

imjacob 发表于 2016-4-28 13:19:51

duedue 发表于 2016-4-28 12:28
主要的意义就是可以提高实时性

难道在同一个局域网内的两台机器上的QQ 通过打洞,就可以不经过腾讯的服务器了?我怎么感觉怎么着都是会通过腾讯服务器的啊

kevin_me 发表于 2016-4-28 13:37:38

imjacob 发表于 2016-4-28 13:19
难道在同一个局域网内的两台机器上的QQ 通过打洞,就可以不经过腾讯的服务器了?我怎么感觉怎么着都是 ...

局域网内的两个QQ客户端之间发生超大文件,速度一般逼近网络带宽,感觉貌似没有经过腾讯的服务器了吧

duedue 发表于 2016-4-28 15:30:07

imjacob 发表于 2016-4-28 13:19
难道在同一个局域网内的两台机器上的QQ 通过打洞,就可以不经过腾讯的服务器了?我怎么感觉怎么着都是 ...

可能是腾讯服务器根据收发双方的WAN IP来决定 该次通话是否为内网。如果是内网的话   相当于路由器上的一个端口发数据给另一个端口   就相当于是内网通信

imjacob 发表于 2016-4-28 19:15:41

duedue 发表于 2016-4-28 15:30
可能是腾讯服务器根据收发双方的WAN IP来决定 该次通话是否为内网。如果是内网的话   相当于路由器上的一 ...

懂了,谢谢两位

冷月无声 发表于 2016-4-28 19:54:40

学习的,路过

wxws_wxws 发表于 2016-4-28 22:05:42

用 tcp吧,走 mqtt.全世界都说好

dhbighead 发表于 2016-4-28 22:17:34

wxws_wxws 发表于 2016-4-28 22:05
用 tcp吧,走 mqtt.全世界都说好

mqtt 也是实现应用层的互联互通 LZ是想打洞,实现的代价稍小一点,不过可能风险更大吧

imjacob 发表于 2016-4-29 14:32:40

wxws_wxws 发表于 2016-4-28 22:05
用 tcp吧,走 mqtt.全世界都说好

用mqtt和 udp打洞有什么关系啊?不懂,请教

vows 发表于 2016-4-29 14:48:57

用TCP吧,UDP不可靠因素太多,很难做负载均衡
页: [1]
查看完整版本: 路由器上UDP打洞需要的心跳时间最短要多少