zdq0394.github.com

Tech study and research.

Follow me on GitHub

网管、隧道和中继

网关

Web网关一侧使用HTTP协议,在另一侧使用另一种协议。(使用同一种协议HTTP,则称为代理)。

  • 协议网关
  • 资源网关

隧道

Web隧道(tunnel)可以通过HTTP应用程序访问使用非HTTP协议的应用程序。

Web隧道允许用户通过HTTP连接发送非HTTP流量,这样就可以在HTTP上捎带其他协议数据了。使用Web隧道最常见的原因就是要在HTTP连接中嵌入非HTTP流量,这样,这类流量就可以穿过只允许Web流量通过的防火墙了。

建立HTTP隧道

Web隧道是用HTTP的CONNECT方法建立起来的。

CONNECT方法并不是HTTP/1.1核心规范的一部分,但却是一种得到广泛应用的扩展。

CONNECT方法请求隧道网关创建一条到达任意目的服务器和端口的TCP的连接,并对客户端和服务器之间的后继数据进行盲转发

CONNECT请求 除了起始行之外,CONNECT语法和其他HTTP方法类似。

CONNECT home.netscape.com:443 HTTP/1.0
User-agent: Mozilla/4.0

CONNECT响应 Connect响应不需要包含Content-Type首部。此时连接只是对原始字节进行转发,不再是报文的承载者,所以不再需要使用Content-Type了。

HTTP/1.0 200 Connection Established
Proxy-agent: Netscape-Proxy/1.1

SSL隧道

最初开发Web隧道是为了通过防火墙来传输加密的SSL流量。

通常会用隧道将非HTTP流量穿过端口过滤防火墙。

为了降低对隧道的滥用,网关应该只为特定的知名端口,比如HTTPS的端口443打开隧道。

中继

HTTP中继(relay)是没有完全遵循HTTP规范的简单HTTP代理。 中继负责处理HTTP中建立连接的部分,然后对字节进行盲转发

由于没有完全实现HTTP规范,盲转发非常容易导致互操作性问题,尤其是Keep-Alive持久连接问题。