Socks VS HTTP 谁才是最快的代理协议

使用过快代理的同学都知道,快代理的代理服务器支持HTTP和Socks两类协议,其中HTTP具体有HTTP和HTTPS,Socks包含了Socks4、Socks4a、Socks5。

并且不少编程语言的网络请求库也支持使用HTTP和Socks协议的代理,那么这两种协议那种速度更快呢?网络上多数文章说Socks因为协议简单所以处理请求更快,结果真的是这样吗?

前提

由于HTTP1.1的长连接和Socks可以单TCP连接复用,如果是使用一个TCP连接传输多个请求其实HTTP和Socks差别不大;但是在网络爬虫使用代理的情况下,通常都是每个请求都会连接一个TCP连接,所以这里分析的就是HTTP和Socks谁建立代理连接耗时最短

HTTP代理

HTTP协议即超文本传输协议,是Internet上信息传输时使用最为广泛的一种非常简单的通信协议。

http代理格式http://proxyip:proxyport

http

访问的目标网站以http://开头,通常是客户端直接发送http请求到代理服务器,再由代理服务器去掉代理特征然后转发

  1. 客户端直接发送真实请求
  2. 代理服务器收到请求,去除代理特征,解析出目标主机
  3. 连接目标主机,转发请求

https(http connect)

访问的目标网站以https://开头,则使用的是http connect方法建立web隧道,通过web隧道传输用户的真实请求数据

2021年了,别再问代理是否支持HTTPS了!

  1. 客户端发送Connect请求
  2. 代理服务器收到Connect请求,解析出目标主机
  3. 连接目标主机,并给客户端发送连接成功报文
  4. 客户端收到Connection established,开始发送真实请求

使用http代理访问https网站,在传输真正的数据之前,需要与代理服务器进行一次“握手”,从而建立连接

Socks代理

SOCKS是一种网络传输协议,主要用于客户端与外网服务器之间通讯的中间传递。SOCKS是"Socket Secure"的缩写。这个协议最初由David Koblas开发,而后由NEC的Ying-Da Lee将其扩展到SOCKS4。最新协议是SOCKS5,与前一版本相比,增加支持UDP、验证,以及IPv6。根据OSI模型,SOCKS是会话层的协议,位于表示层与传输层之间。SOCKS协议不提供加密。

socks代理格式:socks5://proxyip:proxyport、socks4/4a://proxyip:proxyport

socks5

  1. 客户端发送socks5版本及认证方式
  2. 代理服务器返回不需要认证
  3. 客户端发送目标主机信息
  4. 代理服务器连接目标主机,返回连接成功
  5. 客户端发送真实请求

socks5用户名密码

  1. 客户端发送socks5版本及认证方式
  2. 代理服务器返回需要用户名密码认证
  3. 客户端发送用户名密码
  4. 代理服务器验证用户名密码,返回认证成功
  5. 客户端发送目标主机信息
  6. 代理服务器连接目标主机,返回连接成功
  7. 客户端发送真实请求

使用socks5代理可以发现在传输真正的数据之前,需要与代理服务器进行至少两次“握手”,如果使用用户名密码认证,则需要三次“握手”。

socks4/socks4a

  1. 客户端发送目标主机信息
  2. 代理服务器连接目标主机,返回连接成功
  3. 客户端发送真实请求

使用socks4协议相比于socks5协议“握手”流程就简单了许多,与http connect连接一样,只需要与代理服务器之间进行一次“握手”就可以传输数据

结论

由于客户端与代理服务器之间的“握手”数据传输在网络中是耗时的,所以“握手次数”越少则单次请求越快

如果访问的目标网站是http://,无疑使用http代理是最快的选择,因为不需要“握手”,代理服务器直接转发用户请求

如果访问的目标网站是https://,最快的是http代理(http connect)和socks4代理(不支持用户名密码认证),只需要一次“握手”;最慢的是socks5代理,需要至少进行两次“握手”才能真正传输用户数据。