从OSI模型浅谈SS和VPN

作者 汪小祯 日期 2017-03-27
从OSI模型浅谈SS和VPN

科学上网,基本已是一个程序员的必备技能,我们用到的地方,不仅仅局限于访问Google查询资料,而在Github提速,使用npm或者brew下载软件时,可能都需要使用到代理。

我们可能会产生以下疑问

  • 在浏览网页时使用shadowsocks,可以判断是否是国外网站而选择走不走代理,而使用VPN则无法做到?
  • 使用shadowsocks在浏览网页时使用Http代理,而在npm和brew代理时则使用socks5代理?
  • 网游加速器为什么常常是VPN而不是使用SS来加速?
  • 我该如何合理的使用shadowsocks或者VPN?

接下来,我会从OSI七层参考模型的角度来比较SS和VPN这两种科学上网的方式。

什么是OSI模型,我们为什么要先了解它?

OSI是Open System Interconnection的缩写,意为开放式系统互联。
我们日常使用的QQ,浏览网页,基本都离不开它。
就好像我们中国人在国内用中文互相说话,朝鲜人用朝鲜语在国内互相说话,日本人用日语在国内互相说话。但是一旦我们走出了国门,和其他国家的人交流,我们不可能为了和朝鲜人说一句话去学朝鲜语,然后为了和日本人说一句而去说日语。

那么我们约定俗成,在国际上交流,统一使用英语

而计算机也是如此,Windows系统和Windows系统发信息一套协议,MacOS系统和MacOS系统通讯一套协议,iphone和iphone通讯一套协议,还有数不尽的机器,各自一套协议,那么这么多协议如何做到互相通讯呢?那么约定俗成大家统一按照一套标准来设计,这套模型标准就叫做OSI七层模型。

那么这个OSI对我们理解SS和VPN有什么作用呢?

请看下图,当我们发送一个数据,会从上而下传输,最后通过网线传输出去。同样的,如果我们接收到数据,也会从下往上接收。我在图中特意标出了SS和VPN常见的协议位于的地址。
可以发现,VPN(PPTP/L2TP)是位于很底层的部分(第二层),而SS则是位于较上层的地方(第五层和第七层)
OSI
再往下,我们回答上述提的一大部分坑。

  • 在浏览网页时使用shadowsocks,可以判断是否是国外网站而选择走不走代理,而使用VPN则无法做到?
    原因是因为VPN是较底层的协议,无法进行判断传输的数据是属于国内的还是国外的。而在SS较高层的协议,则可以判断数据是否来自国外。

  • 使用shadowsocks在浏览网页时使用Http代理,而在npm和brew代理时则使用socks5代理?
    同样和OSI七层模型有关,socks5位于会话层,在这一层socks5不关心数据用于什么协议,而在应用层,有很多种协议,http协议只是其中一种,对于不支持http协议的应用,我们就需要用到Socks。

  • 网游加速器为什么常常是VPN而不是使用SS来加速?
    一样的理由,VPN位于较底层,不受到协议的约束,可以保证网络数据最大化的优化。

  • 为什么将SS挂在路由器上也可以实现网游加速?
    看下图,左边是我们的电脑,我们的请求从我们的电脑出来,经过路由器,到达服务器。
    而我们将SS配置在路由器,就相当于在路由器的网络层中实现了代理,以这样的方式来实现游戏的代理。

那么聊了这么多,我该如何的运用代理呢

那么我的建议如下

  • HTTP代理-仅有网页需求,访问Google,YouTube等网站
  • Socks代理-需要使用npm,brew等访问国外源下载软件,以及在Android Studio等软件中下载SDK等需要代理
  • VPN-网游加速,访问自己公司内的内网。