代理、网关与隧道

1、代理(Proxy)

代理(英语:Proxy)也称网络代理,是一种特殊的网络服务,允许一个网络终端(一般为客户端)通过这个服务与另一个网络终端(一般为服务器)进行非直接的连接。一些网关、路由器等网络设备具备网络代理功能。一般认为代理服务有利于保障网络终端的隐私或安全,防止攻击。

代理、网关与隧道

上图中,代理服务器既是服务器又是客户端。客户端向代理发送请求报文,代理服务器必须向服务器一样,正确的处理请求和连接,然后返回响应。同时,代理自身要向服务器发送请求,这样,其行为必须像正确的客户端一样,要发送请求并接收响应。

代理服务器的特点:

  1. 客户端不知道真正的服务器是谁,服务器也不知道客户端是什么样的
  2. 客户端同代理服务器,代理服务器同服务器,这两者之间使用的通讯协议是一样的
  3. 代理服务器会对接收的请求进行解析,重新封装后再发送给服务器;在服务器响应后,对响应进行解析,重新封装后再发送给客户端。

2、网关(Gateway)

在计算机网络中,网关(英语:Gateway)是转发其他服务器通信数据的服务器,接收从客户端发送来的请求时,它就像自己拥有资源的源服务器一样对请求进行处理。有时客户端可能都不会察觉,自己的通信目标是一个网关。

在传统TCP/IP术语中,网络设备只分成两种,一种为网关(gateway),另一种为主机(host)。网关能在网络间转递数据包,但主机不能转送数据包。在主机(又称终端系统,end system)中,数据包需经过TCP/IP四层协议处理,但是在网关(又称中介系统,intermediate system)只需要到达网际层(Internet layer),决定路径之后就可以转送。在当时,网关(gateway)与路由器(router)还没有区别。

在现代网络术语中,网关(gateway)与路由器(router)的定义不同。网关(gateway)能在不同协议间移动数据,而路由器(router)是在不同网络间移动数据,相当于传统所说的IP网关(IP gateway)。

 

代理、网关与隧道

网关服务器的特点:

  1. 客户端不知道真正的服务器是谁,服务器也不知道客户端是什么样的
  2. 客户端同代理服务器,代理服务器同服务器,这两者之间使用的通讯协议或者协议的版本是不一样的
  3. 代理服务器会对接收的请求进行解析,转换协议后再发送给服务器;在服务器响应后,对响应进行解析,转换协议后再发送给客户端。

 

3、隧道协议(Tunneling Protocol

隧道协议(英语:Tunneling Protocol)是一种网络通讯协议,在其中,使用一种网络协议(发送协议),将另一个不同的网络协议,封装在负载部分。使用隧道的原因是在不兼容的网络上传输数据,或在不安全网络上提供一个安全路径。

 

隧道的特点:

  1. 该协议是为承载协议自身以外的流量而编写的协议
  2. 允许数据从一个网络移动到另一个网络
  3. 只关心流量的传输,不对承载的流量进行解析

 

4、代理与网关的对比

代理连接的是两个或者多个使用相同协议的应用程序,而网关连接的则是两个或多个使用不同协议的端点。网关扮演的是“协议转换器”的角色,即使客户端和服务器使用的是不同的协议,客户端也可以通过它完成与服务器之间的事务处理。

代理、网关与隧道

5、隧道与网关的对比

简单来说,如果使用网关,服务器与客户端是相互不知道的,因为数据是网关转发的;但是如果使用隧道,服务器与客户端是直接通信的。

我们预设如下场景:

    在一个网络中,防火墙禁止端口443上的连接,因此网络中的用户无法访问使用HTTPS协议的网站。但是,防火墙允许端口80上的连接。网络中的用户想要访问该服务器有两种方法:一种是通过网关,一种是通过HTTP隧道。

(1)使用网关

该种方式由网关(而不是客户端)初始化远端HTTPS服务器的SSL会话,然后代表客户端执行HTTPS事务。响应会由网关接收并解密,然后通过(不安全)的HTTP传送给客户端。

代理、网关与隧道

 

该种方式有几个缺点:

  • 客户端到网关之间的连接是普通的非安全HTTP;
  • 尽管网关是已认证的主体,但客户端无法对远端服务器执行SSL客户端认证;
  • 网关要支持完整的SSL实现。

(2)使用隧道

该种方式SSL流量被封装到一条HTTP报文中,并通过HTTP端口80上的连接发送,最后被解封为普通的SSL流量。

代理、网关与隧道

对于SSL隧道来说,无需在代理中实现SSL。SSL会话建立在产生请求的客户端和目的(安全的)Web服务器之间,中间的代理服务器只是将加密数据经过隧道传输,并不会在安全事务中扮演其他的角色。

 

参考图书:

人民邮电出版社 《HTTP权威指南》 第6章 代理、第8章 集成点:网关、隧道及中继

参考链接:

https://en.wikipedia.org/wiki/Tunneling_protocol    Tunneling protocol

https://zh.wikipedia.org/wiki/%E9%9A%A7%E9%81%93%E5%8D%8F%E8%AE%AE  隧道协议

https://en.wikipedia.org/wiki/HTTP_tunnel  HTTP tunnel

https://zh.wikipedia.org/wiki/%E4%BB%A3%E7%90%86%E6%9C%8D%E5%8A%A1%E5%99%A8   代理服务器

https://zh.wikipedia.org/wiki/%E7%BD%91%E5%85%B3   网关