SOCKS代理
本地浏览器SOCKS服务器通常是用来做代理的,它通过TCP连接把目标主机和客户端连接在一起, 并转发所有的流量。SOCKS代理能在任何端口,任何协议下运行(额,好想有点不对, 这货是运行在session层,所以在他之下的层他就无法代理了)。SOCKS V4只支持 TCP连接,而SOCKS V5在其基础上增加了安全认证以及对UDP协议的支持(也就是说, SOCKS5支持密码认证以及转发UDP流量,注意,HTTP是不支持转发UDP的)。
SOCKS代理在任何情况下都不会中断server与client之间的数据(这是由这种协议的 特性决定的,毕竟非明文,但是在SOCKS代理服务器上还是可以还原出TCP和UDP的原始 流量的),当你的防火墙不允许你上网的时候,你就可以通过SOCKS代理来上网(这里的 意思是,如果GFW把Google屏蔽了,你就可以通过一台海外的SOCKS代理服务器上谷歌)。
大多数的浏览器都支持SOCKS代理(这篇文章是三年前的,抱歉,谷歌第一条就是它)。( 浏览器上网的时候需要与目标主机建立TCP连接,这个时候浏览器就会告诉SOCKS代理,它想 与目标主机进行通讯,然后SOCKS代理就会转发浏览器的数据,并向目标主机发出请求,然 后再把返回的数据转发回来。)(关于shadowsocks的一点题外话:虽然github上的源码 没了,但是耐不住民间私货多呀。shadowsocks有server端和client端,这两个都是用 来转发数据的,但是由于其所处的位置不同,所以功能也不同,client即本地运行的程序, 监听1080端口,并将数据转发到远在他乡的SOCKS服务器,由于这种转发是加密的,在会话层, 所以GFW过滤的难度很大,所以才派人巴拉巴拉让作者删除源码,嗯,一定是这样的。然后server 那边收到数据后,会原原本本的把数据再向目标请求,收到反馈后再返回给本地client的1080端口, 这样,我们向本地的1080请求资源,本地向SOCKS服务器请求资源,SOCKS服务器向目标请求资源, 这一条TCP连接就这样建立起来了。)但是,但是,但是,SOCKS代理原则上是可以还原真实数据的, 所以,第三方的代理也许不是很可靠。
HTTP代理
HTTP代理跟上面原理类似,用处也基本相同,都是让处于防火墙下的主机与外界建立连接,但是它与SOCKS代理不同的是,HTTP代理可以中断连接(即在中间截断数据流),因为HTTP代理是以HTTP请求为基础的 而这些请求大多以明文形式存在,所以HTTP代理可以在Client和下游服务器中间窃听,修改数据。但也正 由于HTTP代理只能处理HTTP请求,所以它对HTTP请求的处理也是很舒服的(原文中是smart)。而也由于 HTTP代理可以获取你的HTTP请求,所以HTTP代理服务器那边就可以根据你提交的数据来把那些资源缓存下来,提升访问的速度(用户亲密度+1)。有好多ISP都用HTTP代理,而不管用户那边的浏览器是怎样配置的,因为不管用户们怎么配置,他们总是要访问80端口,而这些80端口们又掌握在ISP们的手中。(原文完全不是这样说的= =。原文是说,互联网提供商们把流量都通过了HTTP代理,这样代理服务器中就有了缓存,访问的速度会快一些。)
(我来举个栗子:假如你的HTTP代理是Goagent,监听本地127.0.0.1:8080,此刻假设你已经把浏览器 的代理设置为:127.0.0.1:8080,那么你在浏览器中,所有的POST,GET,以及其他的请求,都会通过 本地的代理转发给远程的服务器,然后再通过远程的服务器去请求你所请求的这些资源,大家知道,HTTP协议是通过明文传输的,无论是在本地还是远程的服务器上,都是可以监听到这些流量的,所以才会有GFW的存在……HTTP协议属于应用层,而SOCKS协议属于传输层,ps:传输层在网络层之下,这就决定了两者的能力大小。)
文章来源:老朱SEO