Squid是什麼,Squid工作原理是什麼

原文: http://wuhaoshu.blog.51cto.com/845270/399781

Squid是什麼?

Squid是一種用來緩衝Internet數據的軟件。它是這樣實現其功能的,接受來自人們需要下載的目標(object)的請求並適當地處理這些請求。也就是說,如果一個人想下載一個web頁面,他請求Squid爲他取得這個頁面;Squid隨之連接到遠程服務器(比如:http://squid.nlanr.net/)並向這個頁面發出請求;然後,Squid顯式地聚集數據到客戶端機器,而且同時複製一份(用於緩存)。當下一次有人需要同一頁面時,Squid可以簡單地從磁盤中讀到它,那樣數據迅即就會傳輸到客戶機上。當前的Squid可以處理HTTP,FTP,GOPHER,SSL和WAIS等協議。但它不能處理如POP,NNTP,RealAudio以及其它類型的東西。 
Squid是一個高性能的代理緩存服務器,Squid支持FTP、gopher和HTTP協議。和一般的代理緩存軟件不同,Squid用一個單獨的、非模塊化的、I/O驅動的進程來處理所有的客戶端請求。 
    Squid 將數據元緩存在內存中,同時也緩存DNS查詢的結果,除此之外,它還支持非模塊化的DNS查詢,對失敗的請求進行消極緩存。Squid支持SSL,支持訪 問控制。由於使用了ICP(輕量Internet緩存協議),Squid能夠實現層疊的代理陣列,從而最大限度地節約帶寬。 
    Squid由一個主要的服務程序squid,一個DNS查詢程序dnsserver,幾個重寫請求和執行認證的程序,以及幾個管理工具組成。當Squid啓動以後,它可以派生出預先指定數目的dnsserver進程,而每一個dnsserver進程都可以執行單獨的DNS查詢,這樣一來就大大減少了服務器等待DNS查詢的時間。
  Internet緩衝的一些概念 
  你可能會想到一些問題:緩衝有多大的用處?什麼時候目標(object)應該或者不應該被緩衝?例如,緩衝信用卡號碼是完全不適合的,腳本文件的執行結果在遠程服務器端,站點經常更新(象www.cnn.com)或者甚至站點不允許緩衝,這些情況也都是不適合緩衝的。 
  Squid處理各種情況是不錯的(當然,這需要遠程站點按標準形式工作)。 
  可執行的cgi-bin腳本文件不被緩衝,返回正確頁眉的頁面是在一段限制了的時間內被緩衝,而且你可以規定特殊的規則以確定什麼是可以或不可以被緩衝的,還有緩衝的時間爲多長。 
  談到緩衝的用處有多大,這要看Internet的容量大小,各有不同。對於小型的緩衝區(幾轉磁盤空間)來說,返回值非常高(達到25%)。這個空間緩衝經常訪問的站點,如netscape,cnn和其它一些類似情況的站點。如果你增加一倍緩衝的磁盤空間,但你不會成倍增加你的命中率。這是因爲你開始緩衝網絡中剩餘部分時,這些通常時很大的而且很少被訪問。一個非常大的高速緩衝區,有20轉左右,可能返回值仍小於50%,除非你對保存數據的時間長短經常改變(一般地你不要分配20轉的磁盤空間,因爲頁面很快就會過時,應該被刪除掉)。 
  我們在這裏說的目標(object)指的是可保存的web頁面或其它類似的可下載頁面(ftp文件或目錄內容也稱爲目標(object))。 
  Squid運行在什麼系統上? 
  Squid可運行在大多數Unix和OS/2版本的系統之上,已知的可工作的有: 
  AIX,Digital Unix,FreeBSD,HP-UX,Irix,Linux,NetBSD,Nextstep,SCO,Solaris

SQUID如何工作?
[傳統代理]

1.SQUID被綁定到代理服務器的3128端口。
2.客戶端瀏覽器被配置使用代理服務器的3128端口。
3.客戶端不需要配置DNS。

4.代理服務器上需要配置代理服務器。
5.客戶端不需要配置缺省路由。
當我們在客戶端瀏覽器中打開一個web請求,比如“http://www.96333.com”,這時將陸續發生以下事件:
1.客戶端使用某一端口(比如1025)連接代理服務器3128端口,請求web頁面“http://www.96333.com”
2.代理服務器向DNS請求“www.96333.com”,得到相應的IP地址2.3.4.5。然後,代理服務器使用某一端口(比如1037)向該IP地址的80端口發起web連接請求,請求web頁面。
3.收到響應的web頁面後,代理服務器把該數據傳送給客戶端。
4.客戶端瀏覽器顯示該頁面。
從www.96333.com的角度看來,連接是在1.2.3.4地1037端口和2.3.4.5的80端口之間建立的。
從client的角度看來,連接是在192.168.1.100的1025端口和1.2.3.4的3128端口之間建立的。

[透明代理]
透明代理的意思是客戶端根本不需要知道有代理服務器的存在。
在以上基礎上我們做以下工作:
1.配置透明代理服務器軟件運行在代理服務器的3128端口。
2.配置代理服務器將所有對80端口的連接重定向到3128端口。
3.配置客戶端瀏覽器直接連解到Internet。
4.在客戶端配置好DNS.
5.配置客戶端的缺省網關爲192.168.1.1.
當我們在客戶端瀏覽器中打開一個web請求,比如“http://www.96333.com”,這時將陸續發生以下事件:
1.客戶端向DNS請求“www.96333.com”,得到相應的IP地址2.3.4.5。

然後,客戶端使用某一端口(如1066)向該IP地址的80端口發起web連接請求,請求web頁面。
2.當該請求包通過透明代理服務器時,被防火牆將該數據包重定向到代理服務器的綁定端口3128。於是,透明代理服務器用某一端口(比如1088)向2.3.4.5的80端口發起web連接請求,請求web頁面。
3.收到響應的web頁面後,代理服務器把該數據傳送給客戶端。
4.客戶端瀏覽器顯示該頁面。
從www.96333.com的角度看來,連接是在1.2.3.4地1088端口和2.3.4.5的80端口之間建立的。

從client的角度看來,連接是在192.168.1.100的1066端口和2.3.4.5的80端口之間建立的。
以上就是傳統代理服務器和透明代理服務器的區別所在。

[反向代理]
反向代理是相對於傳統代理而言,是代理web服務器接受客戶端的請求。在此,我們忽略客戶端的設置,假設客戶端是可以直接訪問互聯網。
web服務器與客戶端的結構如下:
假設已經將www.96333.com的域名指向了squid服務器所在的ip,並且在web服務器集羣裏做了dns輪詢。
web server1 -|
web server2 -|- squid服務器/ INTERNET / - Client
web server3 -|
1.客戶端通過IE向DNS服務器發送訪問www.96333.com的請求,由客戶所在地的DNS服務器解析www.96333.com的IP爲2.3.4.5並返回給用戶。
2.客戶收到DNS返回的服務器IP地址,重新向www.96333.com指向的IP地址發送訪問請求。
3.squid 服務器接收到用戶的請求後,查詢自身緩存中是否有用戶請求內容,有則直接發送給客戶端,如果沒有則通過內部DNS輪詢查詢空閒服務器,並將客戶請求發送到該服務器,在獲取到用戶數據並返回給用戶的同時保留一份在自己本身的緩存當中。在用戶看來,自己訪問的是www.96333.com這個服務器,實際上真 正的WEB服務器爲SQUID緩存後面的服務器或者服務器集羣,通過外部DNS做CNAME轉向,將用戶請求轉發到內部真正的web服務器上去。

Squid工作原理是什麼?

一、SQUID緩存的存放方式:
每一臺Squid 代理服務器上都有若干顆硬盤,每顆硬盤又分割成多個分區,每一個分區又可建立很多目錄,目錄下才放文件(Squid 把它叫object)。

二、SQUID的查詢方式:
SQUID通過查詢表的方式來定位某個資源的位置,所查詢的表叫Hash table 和Digest table;Digest table在這裏可以稱之爲摘要或者索引,它記錄了磁盤上每個分區,每個目錄裏存的緩存摘要,Hash table在這裏可以稱之爲目錄或者提綱,它記錄所有的Digest table表信息,SQUID接受到請求後先查詢Hashtable,在根據Hash table所指向的Digest table查詢需要的信息。

三、SQUID服務器之間的關係:
SQUID服務器存在兩種工作關係,一種爲Child、Parent,當child squid server沒有用戶需要的數據時,就象parent server發出請求,並持續等待,直到parent server迴應自己爲止;另外一種爲ibling,當本地SQUID server沒有用戶請求數據時,會向sibling server發出請求,如果sibling server沒有資料則會向上級sibling或者INTERNET發送數據請求

四、SQUID運作模式
1. 當Squid Server 沒有資料時,會先向Sibling 的Squid Server 要資料,如果Sibling沒資料,就跳過它直接向Parent 要。
2. 向Parent 要資料,然後一直等,直到Parent給它資料爲止(Parent 自己有的資料或上Internet去拿)。
3. 沒有Parent 時,就自己上Internet 去拿。
4. 如果這三者都拿不到資料,才向用戶端回報拿不到資料。
一般而言,把網路上一層的SquidServer 設成Sibling 是不錯的選擇(例如:一個學校將所在城市網和附近的大學設成Sibling),因爲網路上一層的Squid Server 服務對象較多,其硬件功能較強,離我們比較近,速度也比較快;萬一要不到資料,我們還可以自己上Internet 去拿。那什麼時候設Parent?當您的出口只有一個,或上一層Squid Server 拿不到資料,自己也一定拿不到,只好將上一層Squid Server 設爲Parent。

更多學習內容:http://www.linuxdiyf.com/bbs/thread-159951-1-1.html

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章