由於IPv4中IP地址空間的日益緊張和安全方面的原因,很多網路使用保留IP地址(10.0.0.0/255.0.0.0、172.16.0.0
/255.128.0.0和192.168.0.0/255.255.0.0)[64, 65,
66]。這些地址不在Internet上使用,而是專門為內部網路預留的。當內部網路中的主機要訪問Internet或被Internet訪問時,就需要
採用網路位址轉譯(Network Address Translation,
以下簡稱NAT),將內部地址轉化為Internets上可用的外部地址。NAT的工作原理是報文頭(目標地址、源地址和連接埠等)被正確改寫後,客戶相信
它們串連一個IP地址,而不同IP地址的伺服器組也認為它們是與客戶直接相連的。由此,可以用NAT方法將不同IP地址的並行網路服務變成在一個IP地址
上的一個虛擬服務。
VS/NAT的體繫結構3.1所示。在一組伺服器前有一個調度器,它們是通過Switch/HUB相串連的。這些伺服器提供相同的網路服務、相
同的內容,即不管請求被發送到哪一台伺服器,執行結果是一樣的。服務的內容可以複製到每台伺服器的本地硬碟上,可以通過網路檔案系統(如NFS)共用,也
可以通過一個Distributed File System來提供。
圖3.1:VS/NAT的體繫結構
客戶通過Virtual IP
Address(虛擬服務的IP地址)訪問網路服務時,請求報文到達調度器,調度器根據串連調度演算法從一組真實伺服器中選出一台伺服器,將報文的目標地址
Virtual IP
Address改寫成選定伺服器的地址,報文的目標連接埠改寫成選定伺服器的相應連接埠,最後將修改後的報文發送給選出的伺服器。同時,調度器在串連Hash
表中記錄這個串連,當這個串連的下一個報文到達時,從串連Hash表中可以得到原選定伺服器的地址和連接埠,進行同樣的改寫操作,並將報文傳給原選定的服務
器。當來自真實伺服器的響應報文經過調度器時,調度器將報文的源地址和源連接埠改為Virtual IP
Address和相應的連接埠,再把報文發給使用者。我們在串連上引入一個狀態機器,不同的報文會使得串連處於不同的狀態,不同的狀態有不同的逾時值。在TCP
串連中,根據標準的TCP有限狀態機器進行狀態遷移;在UDP中,我們只設定一個UDP狀態。不同狀態的逾時值是可以設定的,在預設情況下,SYN狀態的超
時為1分鐘,ESTABLISHED狀態的逾時為15分鐘,FIN狀態的逾時為1分鐘;UDP狀態的逾時為5分鐘。當串連終止或逾時,調度器將這個串連從
串連Hash表中刪除。
這樣,客戶所看到的只是在Virtual IP Address上提供的服務,而伺服器叢集的結構對使用者是透明的。對改寫後的報文,應用增量調整Checksum的演算法調整TCP Checksum的值,避免了掃描整個報文來計算Checksum的開銷。
在一些網路服務中,它們將IP地址或者連接埠號碼在報文的資料中傳送,若我們只對報文頭的IP地址和連接埠號碼作轉換,這樣就會出現不一致性,服務會中斷。
所以,針對這些服務,需要編寫相應的應用模組來轉換報文資料中的IP地址或者連接埠號碼。我們所知道有這個問題的網路服務有FTP、IRC、H.323、
CUSeeMe、Real Audio、Real Video、Vxtreme / Vosiac、VDOLive、VIVOActive、True
Speech、RSTP、PPTP、StreamWorks、NTT AudioLink、NTT SoftwareVision、Yamaha
MIDPlug、iChat Pager、Quake和Diablo。
下面,舉個例子來進一步說明VS/NAT,3.2所示:
圖3.2:VS/NAT的例子
VS/NAT的配置如下表所示,所有到IP地址為202.103.106.5和連接埠為80的流量都被負載平衡地調度的真實伺服器
172.16.0.2:80和172.16.0.3:8000上。目標地址為202.103.106.5:21的報文被轉移到172.16.0.3:21
上。而到其他連接埠的報文將被拒絕。
| Protocol |
Virtual IP Address |
Port |
Real IP Address |
Port |
Weight |
| TCP |
202.103.106.5 |
80 |
172.16.0.2 |
80 |
1 |
| 172.16.0.3 |
8000 |
2 |
| TCP |
202.103.106.5 |
21 |
172.16.0.3 |
21 |
1 |
從以下的例子中,我們可以更詳細地瞭解報文改寫的流程。
訪問Web服務的報文可能有以下的源地址和目標地址:
| SOURCE |
202.100.1.2:3456 |
DEST |
202.103.106.5:80 |
調度器從調度列表中選出一台伺服器,例如是172.16.0.3:8000。該報文會被改寫為如下地址,並將它發送給選出的伺服器。
| SOURCE |
202.100.1.2:3456 |
DEST |
172.16.0.3:8000 |
從伺服器返回到調度器的響應報文如下:
| SOURCE |
172.16.0.3:8000 |
DEST |
202.100.1.2:3456 |
響應報文的源地址會被改寫為虛擬服務的地址,再將報文發送給客戶:
| SOURCE |
202.103.106.5:80 |
DEST |
202.100.1.2:3456 |
這樣,客戶認為是從202.103.106.5:80服務得到正確的響應,而不會知道該請求是伺服器172.16.0.2還是伺服器172.16.0.3處理的。