穿透防火墙的方法---http tunnel:我的理解和疑惑 欢迎交流!!

HuangRG 2004-07-27 01:32:21
目前正在做一个即时通信的项目,我负责通信方面的开发,主要要解决两个问题:穿越NAT与穿透防火墙。到目前为止根据NAT Server的实现原理已经解决穿越NAT;但穿透防火墙我怎么也想通它的原理。我准备用http tunnel实现穿透防火墙,下面是我对http tunnel的理解:
客户端与服务器通信过程:
UDP<-->HTTP Client<---通过Internet--->HTTP Server<--->UDP Server
客户端与客户端通信过程:
UDP<-->HTTP Client<---通过Internet--->HTTP Server<--->UDP Client
我想我这样的理解应该是错的吧?因为如果通信过程是这样的话,就直接用TCP Client与TCP:80 SERVER通信就是了。为什么要绕一个圈子?
有经验的兄弟请指点!3Q。

...全文
2440 28 打赏 收藏 转发到动态 举报
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
gunsand 2010-06-07
  • 打赏
  • 举报
回复
让防火墙设置成信任就可以了 问题是NAT穿透成功率的问题
我现在碰到问题正好相反 用UDP穿越NAT 然后本地HTTPclient 访问远程http server
嘿嘿
fhqiplj 2005-01-17
  • 打赏
  • 举报
回复
mark
ajn_sailing 2004-11-14
  • 打赏
  • 举报
回复
bookmark
shootingstars 2004-07-28
  • 打赏
  • 举报
回复
To 楼主:
不知道楼主使用TCP穿透NAT的理解是否与我一样,我的理解是:两个客户端都在NAT之后,在这两个客户端直接使用TCP建立连接。(这才是P2P啊)

如果只是使用TCP:80与公网服务器连接,这个算不上穿透吧。NAT本来又叫透明代理。在这种模式中,NAT完全是透明的。
月吻长河 2004-07-28
  • 打赏
  • 举报
回复
有谁有 http tunnel的协议代码,我想参考一下
zjh626@yahoo.com.cn
HuangRG 2004-07-28
  • 打赏
  • 举报
回复
keios(每天跑5圈):
首先对你的回答表示感谢。
你所说是可行的;但如果实际中按你的说法去实现的话,有点不可行。其实我的理解与你是类似的。
HuangRG 2004-07-28
  • 打赏
  • 举报
回复
非常感谢大家的参与!
shootingstars(有容乃大,无欲则刚):
想使用http tunnel过防火墙,又想使用udp过NAT
------------------------------------------
用TCP:80穿透防火墙,同样也可以用TCP过NAT Server。因为NAT Server也是支持TCP穿过的。对于穿透NAT Server,我们首先要做的是理解NAT Server的实现原理。本质上NAT Server是一个数据转发服务器。
shootingstars 2004-07-28
  • 打赏
  • 举报
回复
另外你所说的“经过NAT映射后的公网地址的端口肯定都在1024以上”,确定吗?
---------------------------------------------------------------------
对这个问题我不是很确定,但是我不止一次的看到类似下面这样的话。所以。。。

Address Overloading

Sometimes called Port Address Translation (PAT), this is where each client uses the same IP address but uses a different port. A good example is access to a web server. Users from a private address, say in the 10.0.0.0 network, have their individual addresses translated to just one legal IP address but separate port numbers between 1024 and 65535. They can all have separate conversations with a web server having just one address and destination port of 80 (HTTP). This applies just as well if one user has several sessions with the same web server, the different port numbers distinguish the sessions.
HuangRG 2004-07-28
  • 打赏
  • 举报
回复
shootingstars(有容乃大,无欲则刚):
另外你所说的“经过NAT映射后的公网地址的端口肯定都在1024以上”,确定吗?如果要我实现NAT Server,我不会让与内网IP:PORT对就的PORT在1024以上,我觉得没有必要这么做。
HuangRG 2004-07-28
  • 打赏
  • 举报
回复
shootingstars(有容乃大,无欲则刚):
你说得很对,位于NAT1后的一个Client1想要连接NAT2的指定端口(在我们这里 TCP:80)可能无法实现的;因为位于NAT2后的Client2无法决定NAT2的端口。这也是我想解决的问题。所以我觉得我对http tunnel的理解存在错误。如果没有找到一个合理的解决方法的话,我要采用我上面说过的笨方法:Client与Client的通信全部通过Server转发(TCP:80)。这种方案在我的这个项目中还是可行的,因为一般情况下,Client的个数不会超过2000个。
superdai 2004-07-28
  • 打赏
  • 举报
回复
继续研究。
shootingstars 2004-07-28
  • 打赏
  • 举报
回复
To 楼主:
我知道卡耐基梅隆大学的人已经验证了可以在两个内网之间建立TCP的连接,你是使用的此种方法吗?如果不是,能否介绍一下你的方法?十分感谢。

但是,经过NAT映射后的公网地址的端口肯定都在1024以上,怎么可能使用TCP:80端口来连接另外一个内网的计算机呢?
HuangRG 2004-07-28
  • 打赏
  • 举报
回复
alec626(月吻长河):
已给你发送http tunnel源码。
HuangRG 2004-07-28
  • 打赏
  • 举报
回复
shootingstars(有容乃大,无欲则刚):
当然是两个客户端直接通信。
rainsly 2004-07-27
  • 打赏
  • 举报
回复
大致意见同 shootingstars(有容乃大,无欲则刚)
keios 2004-07-27
  • 打赏
  • 举报
回复
http tunnel 我理解是通过 http 协议做隧道传递其他的网络应用数据。
我见过的socks2http是这样的:
App Client -> Http Tunnel Client -> [http 协议,通过防火墙] -> Http Tunnel Server(拥有公网IP的Http Server) -> Socks Proxy Server -> App Server 。
这样一来, App Client -> Http Tunnel Client 之间就必须要走一种代理协议,为了使支持的应用更具有普遍性,常见的选择是 socks 协议,因为支持 socks 代理的应用程序比较多也容易实现。这样Http Tunnel Client 同时也是一个Socks Proxy Server,同样Http Tunnel Server要将Http Tunnel协议翻译成Socks代理协议,再后面的就是普通的代理模式。
Http Tunnel Client 和 Http Tunnel Server 之间走的是建立在 http 上的,并能双向传递任意数据的 Tunnel 协议(比如通过Http GET, PUT 传递数据和地址信息等),鉴于http协议的非连接性,通常Http Tunnel Client要向Http Tunnel Server 轮循以接收随时可能从App Server发出的数据。

希望对楼主有所帮助。
shootingstars 2004-07-27
  • 打赏
  • 举报
回复
我没有实际做过http tunnel,不过我认为就是用http协议来传输你需要传输的数据。这种方法唯一的好处就是或许可以过防火墙(大部分防火墙的规则会允许http数据通过)。

但是http是基于tcp的,因此即想使用http tunnel过防火墙,又想使用udp过NAT,这两者是相矛盾的。
我想使用http tunnel的环境应该是:当客户端位于防火墙之后,客户端连结服务器有困难时。即http tunnel仅仅用于有防火墙的客户与服务器的连接。

呵呵,个人意见,仅供参考。
HuangRG 2004-07-27
  • 打赏
  • 举报
回复
腾讯公司的兄弟怎么都不出现?
HuangRG 2004-07-27
  • 打赏
  • 举报
回复
shootingstars(有容乃大,无欲则刚):
实现http tunnel我也很不能理解啊.ICQ的做法,好像就是我上面说的一样:有一个Http Proxy Client与Http Proxy Server,通过以上两上实现ICQ Client与ICQ Server通信,以上两者起数据转发作用。哪位兄弟做穿透防火墙的项目?哪位兄弟知道OICQ是怎样穿透防火墙的?
关于穿透NAT,针对我自己的应用已经实现了;另外如果在特殊的情况下,出现Client与Client直接通信不成功,我就采用Server转发。希望可以和你讨论。
如果想不通HTTP Tunnel的原理的话,我的Server就用TCP:80实现,而且Client与Client全部通过Server转发。

置顶帖好像说什么都不知道,应该只是一个普通的TCP的转发代理吧。

yhqs540 2004-07-27
  • 打赏
  • 举报
回复
置顶贴有。

http tunnel是吧下层的协议内容搬到http协议中。通过安全连接或者普通连接穿透防火墙
加载更多回复(8)
Re:CCNA_CCNP 思科网络认证 《 站点间 NNN 与 远程访问 NNN 》======================# 站点间相互连接        PVC 永久虚电路  :相对固定(专线更加固定);费用相对高;需ISP配置        NNN 虚拟专用网络:临时启用;不劳烦ISP # 站点间NNN(相对固定)(如图1.)        GRE(Generic Routing Encapsulation)通用路由封装协议         数据不加密         支持组播和广播         支持动态路由        IPSec NNN          支持数据包加密          打隧道          不支持组播和广播          不支持非IP的流量        GRE over IPSec         双剑合璧        基于turnnel接口的 IPSecNNN         即GRE over IPSec NNN # IPSec(IP Security) 是IETF制定的为保证在Internet上传送数据的安全保密性能的框架协议 IPSec 协议组        报文验证头协议   AH(协议号51)Authentication Header:认证        报文安全封装协议ESP(协议号50)Encapsulating Security Payload:加密        Internet Key Exchange(IKE)协议:交换密钥协议(周期性更换密钥) IPSec有两种工作方式        隧道(tunnel)        传送(transport)   IPSec提供了两种安全机制:        认证(AH)         认证机制使IP通信的数据接收方能够确认数据发送方的真实身份         以及数据在传输过程中是否遭篡        加密(ESP)         加密机制通过对数据进行编码来保证数据的机密性,         以防数据在传输过程中被窃听。 # 远程访问 NNN(临时启用)(如图2.)        PPTP NNN        L2TP NNN        使用内网 Windows2003作为 NNN 服务器 # 动态多点 NNN(DMNNN)---------------------------------------               

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧