HttpTunnel技术介绍

1. 概述

HttpTuunnel(也叫Http隧道,Http穿梭),是这样一种技术: 它用HTTP协议在要通信的Client和Server建立起一条”Tunnel”,然后Client和Server之间的通信,都是在这条Tunnel的基础之上。

HttpTunnel通常被用在受限的网络环境中,比如在NAT环境中的Client,受防火墙限制的环境中的Client等,在这样的环境中,Client不能直接连接到公网(WAN)的Server,这时候就可以通过HttpTunnel技术,来解决上述问题。
2. 原理

上图是HttpTunnel技术的基本原理,它基本的工作过程主要分为以下几个步骤:
(1)Client向ProxyServer发送要连接到Server的请求(Http协议)
(2)Proxy Server向实际的Server发送连接请求(Http协议)
(3)上述两步成功后,就相当于在Client和Server之间存在了一条连通的Tunnel(如上图中的蓝色虚线所示)
(4)后续Client和Server就可以直接进行数据的收发,协议由Client和Server自己约定,与HttpTunnel无关

3. 实现方法
(1) 用Http CONNECT方法的实现
Http协议支持一种叫CONNECT的方法,在上面的原理介绍的第一个步骤中,Client告诉Proxy Server来连接Server的过程中,用的就是Http的CONNECT。下面是一个示例:

注意,Http的CONNECT并不是所有的Proxy Server都实现了,所在这里选择Proxy Server的时候需要注意一下。通常所用到的Proxy Server如Squid和Nginx,Squid是支持Http CONNECT,而Nginx就是不支持的。
(2) 不用Http CONNECT的实现
前面也讲到了,并不是所有的Proxy Server都支持Http CONNECT方法的。这时候就可能需要做一些额外的工作。需要在Client和Proxy之间再增加一个TunnelClient, 在Server和Proxy之间再增加一个Tunnel Server,由TunnelClient/TunnelServer来完成实际的Tunnel的建立和数据的转发。具体的做法可以参考一下GNU HttpTunnel(http://www.nocrew.org/software/httptunnel.html )。

相关日志

猜你喜欢

转载自m635674608.iteye.com/blog/2223682