VPN和代理的區(qū)別
能夠?qū)崿F(xiàn)外網(wǎng)訪問功能的軟件總共有兩種類型 : VPN, 代理.
代理軟件其實還可以細(xì)分為 TUN/TAP代理和系統(tǒng)代理 兩種. 接下來的內(nèi)容中, 我們會一一詳細(xì)介紹.
一. 什么是VPN
VPN的全稱是Virtual Private Network, 中文名稱是 虛擬私域網(wǎng)絡(luò). VPN出現(xiàn)的主要原因是為了將不同局域網(wǎng)連接起來,組成新的局域網(wǎng).
初次接觸這個概念可能會有點(diǎn)懵, 我們來仔細(xì)說說.
1. 案例
我們舉個例子, 公司有一臺服務(wù)器, 在局域網(wǎng)中的IP地址是192.168.1.10. 我們連接上公司的網(wǎng)絡(luò)之后, 通過這個IP地址就能訪問到這臺服務(wù)器.

但是一旦我們回到家中, 就沒有辦法訪問這臺服務(wù)器了. 原因就是電信運(yùn)營商根本不知道192.168.1.10這個地址在哪.

2. 解決方案
想要解決這個問題, 有兩種方案.
方案一 : ?配置公網(wǎng)IP
給服務(wù)器購買一個公網(wǎng)IP, 這樣, 公司的這臺服務(wù)器就能在被公司外部的網(wǎng)絡(luò)訪問到了.
這種方式是非常不靠譜的. 公司那么多服務(wù)器, 不可能每臺都購買一個公網(wǎng)IP, 有錢也不能這么花. 而且, 將公司的設(shè)備直接暴露在公網(wǎng)中, 會增加被攻擊的風(fēng)險.
方案二 : VPN組網(wǎng)
簡單來說, VPN組網(wǎng)的原理是用一臺擁有公網(wǎng)IP的服務(wù)器作為中間人, 多個局域網(wǎng)都和中間人進(jìn)行互通. 當(dāng)一個局域網(wǎng)中的設(shè)備訪問另外一個局域網(wǎng)中的設(shè)備時, 會先將請求轉(zhuǎn)發(fā)給中間人, 中間人在分析路由之后, 再將請求轉(zhuǎn)發(fā)到真實的目的地.

通過一系列的復(fù)雜操作, ?我們實現(xiàn)了多個局域網(wǎng)之間的互通. 將廣域網(wǎng)中的多個局域網(wǎng)組成了一個更大的局域網(wǎng). ?這個新的局域網(wǎng)內(nèi)部是互通的, 但是對外屏蔽.
因為VPN中的多個局域網(wǎng)之間通信是利用了廣域網(wǎng)的線路, 所有, 局域網(wǎng)之間的通信是嚴(yán)格加密的.
這就是所謂的虛擬私域網(wǎng)絡(luò). VPN主要用于大型公司多個子公司之間的保密通信.
3. 總結(jié)
當(dāng)我們擁有一臺處于墻外的服務(wù)器作為中間人, 將自身所在的局域網(wǎng)和墻外的廣域網(wǎng)進(jìn)行組網(wǎng)之后, 就能夠?qū)崿F(xiàn)訪問墻外網(wǎng)站的需求. 但是, 我們也能明顯看出來, VPN并不是為了外網(wǎng)訪問而生的. 這只是其衍生功能而已.
VPN的技術(shù)難度非常高, 對于大部分人, 根本不具備這個條件. 而且通信速度較慢.
二. 什么是代理
使用一臺新的設(shè)備, 幫助當(dāng)前設(shè)備完成所有的網(wǎng)絡(luò)通信, 這種技術(shù)我們稱之為代理
1. 解釋
正常的生活中, 我們想要購買商品, 就需要自己跑到商店, 提出要求, 然后商店老板會將商品交給我們.
這個過程中, 我們跟商店老板之間是信息公開的, 他是知道是誰買的商品.
如果我們要買的商品比較隱私, 害怕別人知道, 那該怎么辦呢?
很簡單, 我們可以找一個人, 幫我們?nèi)ベI. 這樣商店老板就不知道其實是我們購買的商品. 幫我們跑腿的這個人, 就稱之為代理人.
網(wǎng)絡(luò)訪問中也是一樣, 個人電腦想要跟目標(biāo)服務(wù)器通信, 就需要先跟目標(biāo)服務(wù)器建立連接, 然后相互傳輸數(shù)據(jù). 這時,目標(biāo)服務(wù)器清楚的知道是個人電腦在跟他通信.
如果我們在中間加了一臺服務(wù)器作為代理服務(wù)器, 當(dāng)個人電腦想跟目標(biāo)服務(wù)器通信的時候, 先將目標(biāo)服務(wù)器的地址告訴代理服務(wù)器, 讓他跟目標(biāo)服務(wù)器建立連接. 然后個人電腦再將通信的數(shù)據(jù)交給代理服務(wù)器, 讓他轉(zhuǎn)交給目標(biāo)服務(wù)器.
這樣也能實現(xiàn)跟目標(biāo)服務(wù)器的溝通. 而且目標(biāo)服務(wù)器并不知道, 其實是個人電腦在跟他通信.

說了這么多, 其實就是想告訴大家, 代理技術(shù)就是利用代理人跟外部溝通, 從而隱藏自身信息. 降低暴露的風(fēng)險.
2. 總結(jié)
代理技術(shù)的重點(diǎn)在于請求的轉(zhuǎn)發(fā) : 從個人電腦轉(zhuǎn)發(fā)到代理服務(wù)器, 從代理服務(wù)器轉(zhuǎn)發(fā)到目標(biāo)服務(wù)器.
其目的主要是為了隱私保護(hù). 整個通信流程其實可以不用加密, 整體的通信效率相較于VPN要高很多.
當(dāng)然, 如果我們有一臺位于墻外的服務(wù)器作為代理服務(wù)器, 也能夠?qū)崿F(xiàn)外網(wǎng)訪問的需求. 但為了避開監(jiān)管, 就必須要對數(shù)據(jù)進(jìn)行加密.
市面上的所有VPN軟件, 雖然名字叫VPN, 但是使用的都是代理技術(shù).
這里還有一個重要問題, 如何將個人電腦的請求交個代理代理服務(wù)器處理呢 ?
主要有兩種方案 : TUN/TAP代理, 系統(tǒng)代理.
我們接下來繼續(xù)為大家介紹
三. TUN/TAP代理
TUN : tunnel 隧道
TAP : network tap 橋接
1. 解釋
這種技術(shù)的重點(diǎn)在于在個人電腦中建立一張?zhí)摂M網(wǎng)卡. 我們都知道, 電腦中的數(shù)據(jù)想要發(fā)送出去, 肯定需要依賴網(wǎng)卡, 所有的數(shù)據(jù)都必須要經(jīng)過網(wǎng)卡才行. 利用這一點(diǎn), 就能完成流量的收集轉(zhuǎn)發(fā).
具體實施步驟是 :
我們先在電腦中創(chuàng)建了一張?zhí)摂M網(wǎng)卡, 設(shè)定路由, 將電腦的流量都指向虛擬網(wǎng)卡. 虛擬網(wǎng)卡再指向物理網(wǎng)卡.
然后啟動軟件, 對虛擬網(wǎng)卡接收到的數(shù)據(jù)進(jìn)行封裝, 重新設(shè)定目的地為代理服務(wù)器. 之后將封裝過的數(shù)據(jù)還給虛擬網(wǎng)卡. 虛擬網(wǎng)卡會繼續(xù)將數(shù)據(jù)交給物理網(wǎng)卡. 這時, 物理網(wǎng)卡就會將數(shù)據(jù)發(fā)送到代理服務(wù)器上.
代理服務(wù)器在收到數(shù)據(jù)之后進(jìn)行解封, 獲取到原始的數(shù)據(jù), 從原始數(shù)據(jù)中我們能夠獲取到真實的目標(biāo)服務(wù)器地址, 最后將數(shù)據(jù)發(fā)送過去即可.

2. 總結(jié)
TUN和TAP的區(qū)別在于收集數(shù)據(jù)的層級不一樣, TUN是在網(wǎng)絡(luò)層收集數(shù)據(jù), TAP是在數(shù)據(jù)鏈路層收集數(shù)據(jù). 在實際使用中區(qū)別不大. 而且都是依賴虛擬網(wǎng)卡工作. 所以被歸為一類.
TUN/TAP代理幾乎可以收集個人電腦中的所有網(wǎng)絡(luò)請求. 在移動端也能完美支持. 市面上的大部分加速器就是使用的這種技術(shù).
想要讀取虛擬網(wǎng)卡的數(shù)據(jù), 就必須要調(diào)用平臺自身的API, 也就是說, 想要開發(fā)一款TUN/TAP代理軟件, 就必須要使用平臺自身的語言. 比如說MacOS的 Swift 語言, Windows的 .Net 語言, 安卓的 Kotlin 語言, 第三方語言無法使用.
所以軟件的開發(fā)難度較大, 尤其是在跨平臺的情況下, 需要程序員會多門語言.
四. 系統(tǒng)代理
每個操作系統(tǒng)有預(yù)先設(shè)定了代理功能. 一般我們只需要填寫上代理服務(wù)器的ip地址和端口號, ?操作系統(tǒng)就能幫我們將個人電腦的請求轉(zhuǎn)發(fā)到代理服務(wù)器. 省去了創(chuàng)建虛擬網(wǎng)卡的, 封裝數(shù)據(jù)的過程.

1. 執(zhí)行流程
當(dāng)我們開啟了操作系統(tǒng)的代理功能之后, 一旦操作系統(tǒng)發(fā)現(xiàn)有請求發(fā)出, 就會先阻攔住請求.
操作系統(tǒng)跟代理服務(wù)器進(jìn)行溝通, 先將本次請求的目的地址發(fā)送給代理服務(wù)器, 然后再將數(shù)據(jù)發(fā)送給代理服務(wù)器.
代理服務(wù)器在收到目的地信息之后, 和目標(biāo)服務(wù)器建立連接. 在收到通信數(shù)據(jù)之后, 轉(zhuǎn)發(fā)給目標(biāo)服務(wù)器即可.

2. 總結(jié)
系統(tǒng)代理的操作和開發(fā)難度極低. 開發(fā)者只需要將注意力放在代理服務(wù)器上. 在代理服務(wù)器上實現(xiàn)接收數(shù)據(jù), 轉(zhuǎn)發(fā)數(shù)據(jù)的功能即可.
而且, 如果想要開發(fā)自己的軟件, 只需要會一門語言即可. 像Java, Go, JS這種第三方語言都能輕松開發(fā)自己的代理軟件.
當(dāng)然, 有利就有弊, 這種方案的弊端也很大.
無法收集所有的請求. 只有那些使用系統(tǒng)語言開發(fā)的軟件, 或者使用第三方語言開發(fā)的軟件進(jìn)行了特殊設(shè)置, 支持系統(tǒng)代理功能的軟件. 才能被系統(tǒng)代理轉(zhuǎn)發(fā)
比如說在Window平臺上, ?我們可以使用Java, Go 等其他第三方語言開發(fā)桌面應(yīng)用. 但這些語言開發(fā)的軟件如果沒有特殊設(shè)置, 就不支持系統(tǒng)代理. 從這些軟件中發(fā)出的網(wǎng)絡(luò)請求就無法被系統(tǒng)代理攔截轉(zhuǎn)發(fā).
部分操作系統(tǒng)支持的代理協(xié)議版本較低, 無法代理udp協(xié)議的請求
比如說Window11就只支持socks4代理協(xié)議, 這種協(xié)議是不支持UDP協(xié)議的
對移動端的支持極差.
這種方案只適用于那些平時訪問外網(wǎng)時以瀏覽器為主(瀏覽器完美支持系統(tǒng)代理), 或者使用少部分系統(tǒng)自帶的軟件的用戶.
當(dāng)然, 平臺不同, 對系統(tǒng)代理的支持也不同, 比如說macos系統(tǒng)中, 絕大部分都是平臺語言開發(fā)的軟件, 都能使用系統(tǒng)代理. 但是windows中的情況就是反過來的.
五. 區(qū)別
我們從開發(fā)難度, 網(wǎng)絡(luò)通信速度, 數(shù)據(jù)收集率 , 是否可以自定義加密對以上幾種方案進(jìn)行總結(jié).
(這里, 如果軟件可以自定義加密方式, 就能極大的提升通信速度)
名稱開發(fā)難度網(wǎng)絡(luò)通信速度數(shù)據(jù)收集率是否能自定義加密VPN高慢完全否TUN/TAP代理高快完全是系統(tǒng)代理低快部分是
我在B站上一堂專門講解http/socks代理的課程, 同時講解如何將第三方語言開發(fā)的軟件封裝成桌面應(yīng)用, 感謝大家的支持.