2019年5月8日 星期三

知道甚麼是 Proxy

一、 Proxy 是什麼 ?
Proxy 這字是『代理』的意思。這字最早應是出現在網路的 Firewall (防火牆)功能中。防火牆簡單的說是用來保護網路的安全,在你的內部網路與外 部網路之間建立一道像牆般的保護,使內外有所區隔,所有的進出動作都必需要 經過這道牆(基本上與萬里長城的關口是相同的)。因此對外面網路世界中的 機器來說,它們只看的到這道牆,而看不到這牆內的機器,而牆內的機器也必需 透過這道牆才能出去,因此這道做為牆的機器我們就可以稱它為一 Proxy Server『代理主機』。而相對的因為要記錄著進出資料的內容及來源目的,做這道 牆的機器就需要有極大的硬碟空間來儲存進出資料的內容及來源目的。
   那麼我們在 WWW 世界中所說的 Proxy 與上面 Firewall 中的 Proxy 有什麼關係呢 ? 由上面最後所述我們知道 Firewall 通常都需要一個大容量的儲存空間記錄所有訊息,今天我們就是將這功能移植到 WWW 來使用;我們設立一個 Proxy Server 來儲存經由它代理截取過的所有網站位址內容。

二、 設 Proxy 有什麼好處 ?
由上節所言,Proxy Server 事實上就是一台儲存容量大的機器,對於使用 WWW 設立 Proxy Server 有什麼好處呢?舉例來說,最近大家都在看 NBA 的總冠軍賽,而大家也都想去 www.nba.com 截取最新消息,數學系有人要看,他必需連到 www.nba.com 取得資料一次,而如果生科系有人也要看,他也必需到 www.nba.com 去再截取一次,如果輔大今天有卅個人要看,那就必需去 www.nba.com 截取資料卅次,這對我們對外僅有的 T1,TANet 上僅有的兩條 T1 的頻寬來說是多麼的浪費,而且你也會覺得用起來非常非常的慢。假始今天我們有一台 Proxy Server,而所有的輔大 WWW 使用者都有設定這台 Proxy Server,那麼情況就改變不同了。第一個要讀 www.nba.com 的使用者會先到這台 Proxy Server 上先找看看有沒有 www.nba.com 的最新資料,如果沒有,則由這台 Proxy Server 幫他代理到 www.nba.com 抓取一份資料之後放在 Proxy Server 上也傳送給第一位使用者。而最辛運的是第二位以後的使用者,當他要連往 www.nba.com 時,他的機器會先到 Proxy Server 上看看,結果有資料,則就直接由 Proxy Server 取回資料即可,他所用的速度是校內的網路速度,至少也有 10 Mbps, 絕對比連校外的速度快。
   因此設 Proxy 有什麼好處?我相信你一定很明白的了解,就是『快』。底下 附一張圖讓你更能了解 Proxy Server 的用途。

三、 有那些版本的 Proxy Server ?
Proxy Server 有許多版本,包含 NetScape , MicroSoft 等做瀏覽器的公司都有這方面的產品;甚至許多 HTTP Server 本身就可以做 Proxy Server 了,像 Apache HTTP Server 就可以做 Proxy Server 之用。而現在比較出名的是 Squid Proxy Server , Squid 的前身是 Harvest,在台灣許多專門的 Proxy Server 都是使用這套目前是免費的軟體,而且全世界許多國家的 Proxy Server 也都是使用該套軟體。通常 Squid Proxy Server 的專用 port 是 3128。

四、 Proxy Server 如何運作 ?
Proxy Server 接受使用者的 request 之後會先檢查自己的 Server 上有沒有一份 Client 端要的資料,如果沒有則代理 Client 端到目的地去截取一份除了給 Client 端之外,Proxy Server 這也存放一份。而同樣的下一個Client 端使用者來做 request 時,Proxy Server 便會一樣先在 Server 中檢查看看,如果有的話,則再檢查與目的端的資料是否相符,若相符則由 Proxy Server 直接給要求的 Client 端即可。許多人可能會問,為什麼還要向目的地再 check 一次,這樣不是浪費時間嗎?這一個手續是必要的,為什麼?也許你要去的目的地的資料在 Proxy Server 上存放了一份,但是否是最新的是無法得知的,必需做比對,比對的時間不會長,仍然是很快的,像 CNN 這種即時新聞的,廿四小時的資料都在變化,因此在部份資料上是一直在更新的,但一些 CNN 的 mark 在比對後如果是相同的就不需由美國取回了。
   傳統的 Proxy Server 是底下的機器先向 Proxy Server 做 request ,若 Server 中沒有就直接由 Server向目的地截取資料。這對大都數的 Proxy Server 來說好像是又太浪費一些,現在新的概念是以 Parent 及 Sibling 的概念來做。舉例來說,本中心 Server 的 Parent 是 www.twnic.net,當今天有底下的 Client 端向本中心的 Server request 之後,發現本 Server 內沒有這份資料,因此我們 Server 並不是向目的地直接取得資料,而是向本 Server 的 Parent 詢問看看是否有所需之資料,如果有則由 Parent 傳回,若無則再由我們 Server Parent 代為處理,如此更能增加處理的速度。


常常會聽到別人說,你的 Browser 要設 Proxy Server,這樣你上網的速度會比較快?到底什麼是 Proxy Server,他在Internet 裡扮演什麼樣的角色?
常常會聽到別人說,你的 Browser 要設 Proxy Server,這樣你上網的速度會比較快?到底什麼是 Proxy Server,他在Internet 裡扮演什麼樣的角色? 

當使用者要向伺服器要求資料時,假設使用者輸入 www.todo.com.tw,向todo資訊超商索取資料時,在正常的網路流程中,當使用者的瀏覽器看到www.todo.com.tw 的domain name 時,會向DNS尋找www.todo.com.tw所對應的IP,當DNS傳回對應的 ip 後,瀏覽器會再對真正的伺服器索取資料,這看起來是沒有問題的,但如果網路塞車、網站的機器配備不好、網站的專線不夠快等不良的因素通通加在一起後,你要連接的網站就會變的很慢,所以這個時候有一個叫 Proxy Server 的東西,會把大家常常看的網頁資料暫存在一個位置,這個位置通常機器設備會很好,頻寬會很大,所以讀者讀取的速度就會很快。

我們現在來想想,當使用者設了 Proxy Server 時,瀏覽器在讀取資料時,資料應該是如何傳遞的。相同的,瀏覽器會先向DNS要ip,然後找到ip後,會先向proxy server 查詢是否有這個網站的資料,如果有的話,Proxy Server 就直接把內容傳給了使用者,如果proxy server 沒有資料的話,才會直接向網站要資料。 

所以才會有人常常說,如果你設了Proxy Server,連線的速度會更快,其實就像是你多了一顆容量很大的硬碟,放在別人家,當你需要資料時,再去那顆硬碟裡取資料,所以讀取資料會比較快。 

沒有留言:

張貼留言

如何判斷現在FORM是在 insert mode? 還是 update mode?

只要用  if (empty({primary_key})) 就可以知道是否為新增模式了。 如果 {promary_key} 是空白的,那麼就是在新增模式;反之,就是更新模式。 以上。