免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: mik
打印 上一主题 下一主题

大家讨论一下 IM 的实现结构和方案 [复制链接]

论坛徽章:
0
71 [报告]
发表于 2009-07-07 18:38 |只看该作者
原帖由 aobai 于 2009-7-7 18:26 发表




xhl 能否详细说说tcp打洞?  
以前一直认为udp 打洞会麻烦一些 ,因为tracker给对方发送打洞命令,然后对方发送打洞的包,才能够连接对方。

但是很多p2p的软件都是用的tcp连接。 一直在想, 在这些 ...


首先我没看过那个p2p是靠tcp 穿越nat的。 我认为这个也许在欧洲的网络环境可行, 在中国, 人多资源少, 大部分是nat背后的环境, 很难。

我怀疑你看到的是tcp relay, 只不过是没用server, 用别人的机器。 偷用。 skype是这样做的。 很多bt类型的软件也是这样做的。

我看过几偏文章写这个的, 自己没尝试过。

基本思路跟udp类似,依赖nat的行为, 就是把三次握手的包能放行。 但目前国内几乎100%的nat不会这样做。他们只允许出去的syn消息, 不允许进来的。

有个特殊的地方, 可以稍微偷巧一下, 利用nat上的upnp功能, 可以在一定时间内定阅一个public ip or port. 所以既然这样了, 就谈不上什么打洞了。

论坛徽章:
0
72 [报告]
发表于 2009-07-07 18:40 |只看该作者
留记号

论坛徽章:
0
73 [报告]
发表于 2009-07-07 18:43 |只看该作者
谢谢

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
74 [报告]
发表于 2009-07-07 19:39 |只看该作者
原帖由 xhl 于 2009-7-7 18:38 发表

首先我没看过那个p2p是靠tcp 穿越nat的。 我认为这个也许在欧洲的网络环境可行, 在中国, 人多资源少, 大部分是nat背后的环境, 很难。

我怀疑你看到的是tcp relay, 只不过是没用server, 用别人的机器 ...

允许出去的就可以允许进来的。
TCP 穿越的成功机会还是挺大的。
我一直想作一些个实验。

论坛徽章:
0
75 [报告]
发表于 2009-07-07 20:09 |只看该作者
原帖由 flw 于 2009-7-7 19:39 发表

允许出去的就可以允许进来的。
TCP 穿越的成功机会还是挺大的。
我一直想作一些个实验。


我实验过这个, 这个一般nat都会当的, 现在基本是却省逻辑了, 其实属于一个firewall 规则。

包括udp的, 都是必须先是出去到某个指定的ip:port的, 在nat上记录一个短时间的名单, 这样外面这个ipORT的包, 才允许进来。

否则直接进来的, 直接拉黑名单, 呵呵。 tcp的更是。。。

论坛徽章:
0
76 [报告]
发表于 2009-07-07 20:13 |只看该作者
HTTP

论坛徽章:
0
77 [报告]
发表于 2009-07-07 20:37 |只看该作者
原帖由 beepbug 于 2009-7-7 20:13 发表
HTTP



http需要反向连接?

ftp到是有这个需求, port的时候, 在nat后面, 有时候会失败。除非nat内部做了20 21port的特殊处理,

不过也可以通过pasv模式, 来工作。 其他的非常规port, 基本都会决绝直接通过nat 连到内网络。

论坛徽章:
0
78 [报告]
发表于 2009-07-07 22:39 |只看该作者
xhl让我想到一句非常古老的话。

“高手都不跑论坛的,都写代码去了”


问个题外话,开源有没这样的分布式服务器实现呢?

论坛徽章:
0
79 [报告]
发表于 2009-07-07 22:48 |只看该作者
原帖由 future0906 于 2009-7-7 22:39 发表
xhl让我想到一句非常古老的话。

“高手都不跑论坛的,都写代码去了”


问个题外话,开源有没这样的分布式服务器实现呢?



似乎没有, 一般做大型分布服务, 都不是一下做到位的, 包括qq, 也是做了将近10年, 才有现在的成果。

98年的qq可能就是个tcp relay 文本的单server的东西。。

一切原于用户的需求, 根本就不会有1w人用, 没必要设计成1000w在线的结构, 自己折磨自己。

先设计一个简单的, 但很快可实现的, 然后不停的从构, 根据用户压力或者新的需求。


而且这样的服务要有很大的运营成本, 没经过用户检验的, 都是扯淡, 包括我在这个贴里说的, 哈哈。 因为我没做过10w在线的产品。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
80 [报告]
发表于 2009-07-07 23:32 |只看该作者
原帖由 xhl 于 2009-7-7 20:09 发表

都是必须先是出去到某个指定的ip:port的, 在nat上记录一个短时间的名单, 这样外面这个ipOR ...

你说的不错,TCP 穿越的关键点正是在这个地方。

你知道“同时打开”这个概念吗?
服务器 X 为 A 和 B 两个 client 做好时间同步,
A 和 B 同时向对方发起连接请求,只要时间偏移控制在 MSL 之内,
理论上是可以完成三次握手成功穿越的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP