作者 : 潘東名, UltraZone Net Lab.
一、Proxy 是什麼 ?
二、設 Proxy 有什麼好處 ?
三、有那些版本的 Proxy Server ?
四、Proxy Server 如何運作 ?
Proxy 這字是『代理』的意思。這字最早應是出現在網路的 Firewall (防火牆)功能中。防火牆簡單的說是用來保護網路的安全,在你的內部網路與外 部網路之間建立一道像牆般的保護,使內外有所區隔,所有的進出動作都必需要 經過這道牆(基本上與萬里長城的關口是相同的)。因此對外面網路世界中的 機器來說,它們只看的到這道牆,而看不到這牆內的機器,而牆內的機器也必需 透過這道牆才能出去,因此這道做為牆的機器我們就可以稱它為一 Proxy Server『代理主機』。而相對的因為要記錄著進出資料的內容及來源目的,做這道 牆的機器就需要有極大的硬碟空間來儲存進出資料的內容及來源目的。
那麼我們在 WWW 世界中所說的 Proxy 與上面 Firewall 中的 Proxy 有什麼關係呢 ? 由上面最後所述我們知道 Firewall 通常都需要一個大容量的儲存空間記錄所有訊息,今天我們就是將這功能移植到 WWW 來使用;我們設立一個 Proxy Server 來儲存經由它代理截取過的所有網站位址內容。
由上節所言,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 有許多版本,包含 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 接受使用者的 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 代為處理,如此更能增加處理的速度。