想请教各位,有关 UDP / NAT 穿透的一些疑惑

2017-02-08 19:03:18 +08:00
 RE
这两天一直在看 NAT 穿透,想让两个客户端建立连接,网上有很多文章都是关于 UDP 穿透的,实现起来也简单。但我有几个疑惑,想请教大家。

1. 网上说每个 UDP 包的大小,不能超过 xx KB (说法不一),如果想发送一个较大的文件应该在业务层面自己处理分包和合并的问题。那互联网上常见的基于 UDP 通讯的软件(例如 BT 下载,视频通话等),对于 UDP 包的校验及处理,岂不是很麻烦?

2. 如果说单个 UDP 包不能太大,那把大文件拆分成小包之后,每个包还要加入序位信息等,岂不是能使用的“空间”就更小了?
2452 次点击
所在节点    问与答
12 条回复
kokutou
2017-02-08 19:08:38 +08:00
UnisandK
2017-02-08 19:38:55 +08:00
所以有了 TCP 嘛。。你要打洞只能用 UDP 这些要实现肯定是绕不过去的
buckethead1
2017-02-08 20:22:46 +08:00
除非设置了 don't fragment flag, 否则协议会自动帮你分包,接到的时候会自动合并

but 你需要自行判断超时,重传,一个类似滑动窗口之类的东西 balabala 之类的
buckethead1
2017-02-08 20:23:40 +08:00
@buckethead1 接受之后自动合并这个描述不对 上层来看都一样
RE
2017-02-08 21:06:58 +08:00
@UnisandK 其实我是更偏向用 TCP 来建立两个客户端的连接的,但是 TCP 打洞要稍微再复杂一些…
gamexg
2017-02-09 09:32:40 +08:00
udp 包超过 mtu 尺寸会自动分包,然后自动合并,但是如果中间丢失了一个子包那么会造成都重传,所以不建议。
bintianbaihua
2017-02-09 09:41:16 +08:00
bintianbaihua
2017-02-09 09:41:52 +08:00
skylancer
2017-02-09 11:04:57 +08:00
我会建议不要超过 512 ,因为你不能确保你的所有路径都是经过正常的现代路由器,几百年前的破烂玩意 512 就 GG 了
RE
2017-02-09 14:33:53 +08:00
@skylancer 是 512B 还是 512K ……
nneedd
2017-02-15 15:51:01 +08:00
RE
2017-02-15 16:19:02 +08:00
@nneedd 你真的看帖子了吗?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/339083

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX