IT技ji)躉? 渙髕ping)台

立博平台官网

作者︰小火柴的(de)藍色理想  來(lai)源︰IT165收集  發布日期(qi)︰2020-02-20 06:47:30

前面的(de)話

  HTTP並不是獨(du)自運行(xing)在網上的(de)。很多協議都會在HTTP報文的(de)傳輸過程中對其(qi)數據進(jin)行(xing)管理。HTTP只關心旅程的(de)端shuo)發送者和接收者),但在包(bao)含有(you)鏡像服務(wu)器、Web代理和緩存的(de)網絡世(shi)界中,HTTP報文的(de)目的(de)地不一定是直接可達的(de)

  重定向技ji)跬 chang)可以用來(lai)確定報文是否終結于某個代理、緩存或服務(wu)器集群中某台特定的(de)服務(wu)器。重定向技ji)蹩梢越 ㄎ姆?偷嬌突?嗣揮you)顯(xian)式jiao)肭qiu)的(de)地方去。本文將詳細(xi)介紹重定向技ji)躋約案(an)fu)載均衡

立博平台官网

  由于HTTP應用程序需要可靠地執(zhi)行(xing)HTTP事(shi)務(wu),最小化時延,並且節約網絡帶(dai)寬,所以在現zhi)韁兄(xiong)囟ㄏ蚴瞧氈櫬嬖詰de)

  出(chu)于這些(xie)原因,Web內容通常(chang)分(fen)布在很多地方。這麼(me)做是出(chu)于可靠性的(de)考慮。這樣,如果一個位置出(chu)問(wen)題了,還有(you)其(qi)他(ta)的(de)可用,如果客戶端能去訪問(wen)較近的(de)資源,就可以更(geng)快地收到所請求(qiu)的(de)內容,以降dang)拖 κ奔洌喚 勘biao)服務(wu)器分(fen)散,還可以減少網絡擁塞。可以將重定向當作一組有(you)助于找(zhao)到“最佳”分(fen)布ji)僥諶蕕de)技ji)/p>

  大(da)多數重定向部(bu)署都包(bao)含某些(xie)形wen)降de)負(fu)載均衡。也就是說(shuo),它(ta)們(men)可以將輸入報文的(de)負(fu)載分(fen)攤到一組服務(wu)器中去。反之(zhi),因為輸入報文一定會在分(fen)擔負(fu)荷的(de)服務(wu)器之(zhi)間進(jin)行(xing)某種分(fen)布,所以任(ren)意形wen)降de)負(fu)載均衡都包(bao)含了重定向

  從客戶端向目標(biao)發送HTTP請求(qiu),目標(biao)對其(qi)進(jin)行(xing)xie) 淼de)角(jiao)度(du)來(lai)看,服務(wu)器、代理、緩存和網關對客戶端來(lai)ci)刀際(ji)欠wu)器。很多重定向技ji)醵伎捎糜詵wu)器、代理、緩存和網關,因為它(ta)們(men)具有(you)共同的(de),與服務(wu)器類似(si)的(de)特征。其(qi)他(ta)一些(xie)重定向技ji)跏親 men)為特定類型的(de)端shuo)閔杓頻de),沒有(you)通用性

  Web服務(wu)器會根據每個IP來(lai)處理請求(qiu)。將請求(qiu)分(fen)攤到復(fu)制的(de)服務(wu)器中去,就意味著應該把xun)閱程囟RL的(de)每條請求(qiu)都發送到最佳的(de)Web服務(wu)器上去(最靠近客戶端shuo)de)、或負(fu)載最輕的(de)或采用其(qi)他(ta)優(you)化策略選擇的(de)服務(wu)器)。重定向到某台服務(wu)器就像將所有(you)需要給汽車加油的(de)司機(ji)都送到最近的(de)加油站去一樣

  代理希望(wang)根據每個協議來(lai)處理請求(qiu)。在理想情況下,某個代理附近的(de)所有(you)HTTP流量都應該通過這個代理傳輸。比(bi)re)紓 綣炒 捍嬋拷髦植煌 de)客戶端,那麼(me)理想情況下,所有(you)xing)肭qiu)都應流經(jing)這個代理緩存,因為代理緩存上會存儲常(chang)用的(de)文檔(dang),可以直接提供,從而(er)避(bi)免通過更(geng)長、更(geng)昂貴的(de)路徑(jing)連接到原始服務(wu)器。重定向到代理就像從一條主要通路(無論(lun)它(ta)通往何處)上將流量分(fen)流到一條本地快捷路徑(jing)上去一樣

  重定向的(de)目標(biao)是盡(jin)快地將HTTP報文發送到可用的(de)Web服務(wu)器上去。在穿過因特網的(de)路徑(jing)上,HTTP報文傳輸的(de)方向會受(shou)到HTTP應用程序和報文經(jing)由的(de)路由設備的(de)影(ying)響

  配置me)唇 突?吮ㄎ牡de)瀏(liu)覽器應用程序,使其(qi)將報文發送給代理服務(wu)器;DNS解析程序會選擇用于報文尋址fan)P地址。對不同物(wu)理地域(yu)的(de)不同客戶端來(lai)ci)擔 飧P地址可能不同;報文經(jing)過網絡傳輸時,會被劃分(fen)為一些(xie)帶(dai)有(you)地址fan)姆fen)組,交換機(ji)和路由器會檢查分(fen)組中的(de)TCP/IP地址,並據此(ci)來(lai)確定分(fen)組的(de)發送路線;Web服務(wu)器可以通過HTTP重定向將請求(qiu)反彈給不同的(de)Web服務(wu)器;瀏(liu)覽器配、DNS、TCP/IP路由以及HTTP都提供了重定向報文機(ji)制

  [注意]有(you)些(xie)方法,比(bi)re)玟liu)覽器配置,只有(you)在將流量重定向到代理的(de)時候(hou)才有(you)意義,而(er)其(qi)他(ta)一些(xie)方法(比(bi)re)NS重定向),則(ze)可用于將流量發送給任(ren)意服務(wu)器

  重寫(xie)向方法包(bao)括(kuo)通用重定向、代理重定向及緩存重定向等

立博平台官网

  可以通過通用重定向方法將流量重定向到jiang)煌 de)(可能更(geng)優(you)的(de))服務(wu)器,或者通過代理來(lai)轉(zhuan)發流量。具體來(lai)ci)擔 bao)括(kuo)HTTP重定向、DNS重定向、任(ren)播尋址、IP MAC轉(zhuan)發以及IP地址轉(zhuan)發

【HTTP 重定向】

  Web服務(wu)器可以將短的(de)重定向報文發回給客戶端,告訴他(ta)們(men)去其(qi)他(ta)地方試試。有(you)些(xie)Web站點會將HTTP重定向作為一種簡單的(de)負(fu)載均衡形wen)嚼lai)使用。處理重定向的(de)服務(wu)器(重定向服務(wu)器)找(zhao)到可用的(de)負(fu)載最小的(de)內容服務(wu)器,並將瀏(liu)覽器重定向到那台服務(wu)器上去

  對廣泛分(fen)布的(de)Web站點來(lai)ci)擔 範ldquo;最佳”的(de)可用服務(wu)器會更(geng)復(fu)雜一些(xie),不僅要考慮到服務(wu)器的(de)負(fu)載,還要考慮到瀏(liu)覽器和服務(wu)器之(zhi)間的(de)因特網距離。與其(qi)他(ta)一些(xie)形wen)降de)重定向相比(bi),HTTP重定向的(de)優(you)點之(zhi)一huan)褪侵囟ㄏ蚍wu)器知道客戶端shuo)de)IP地址,理論(lun)上來(lai)講(jiang),它(ta)可以做出(chu)更(geng)合(he)理的(de)選擇

  下面是HTTP重定向的(de)工作過程

  在圖a中,Alice向www.joes-hardware.com發送了一條請求(qiu)

GET /hammers.html HTTP/1.0Host: www.joes-hardware.comUser-Agent: Mozilla/4.51 [en] (X11; U; IRIX 6.2 IP22)

  在圖b中,服務(wu)器沒有(you)回送帶(dai)有(you)HTTP狀態碼(ma)200的(de)Web頁面主體,而(er)是回送了一個帶(dai)有(you)HTTP狀態碼(ma)302的(de)重定向報文

HTTP/1.0 302 RedirectServer: Stronghold/2.4.2 Apache/1.3.6Location: http://161.58.228.45/hammers.html

  現在,在圖c中,瀏(liu)覽器會用重定向URL重新(xin)發送請求(qiu),這次會發送給主機(ji)161.58.228.45

GET /hammers.html HTTP/1.0Host: 161.58.228.45User-Agent: Mozilla/4.51 [en] (X11; U; IRIX 6.2 IP22)

  另(ling)一個客戶端可能會被重定向到另(ling)一台服務(wu)器上去。在圖d-f中,Bob的(de)請求(qiu)會被重定向到161.58.228.46

  HTTP重定向可以在服務(wu)器間導引請求(qiu),但它(ta)有(you)以下lu)父鋈鋇悖盒枰  擠wu)器進(jin)行(xing)xie)da)量處理來(lai)判斷要重定向到哪(na)台服務(wu)器上去。有(you)時,發布重定向所需的(de)處理量幾fu)跤  ┬趁奼舊硭璧de)處理量一樣;增加了用戶時延,因為訪問(wen)頁面時要進(jin)行(xing)兩次往返(fan);如果重定向服務(wu)器出(chu)故障,站點就會癱瘓(huan)

  由于存在這些(xie)弱(ruo)點,HTTP重定向通常(chang)都會與其(qi)他(ta)一種或多種重定向技ji)踅岷he)使用

【DNS重定向】

  每次客戶端試圖訪問(wen)Joe的(de)五金(jin)商(shang)店的(de)網站時,都必(bi)須將域(yu)名www.joes-hardware.com解析為IP地址。DNS解析程序可能是客戶端自己(ji)的(de)操作系統(tong),可能是客戶端網絡中的(de)一台DNS服務(wu)器,或者是一台遠距離的(de)DNS服務(wu)器

  DNS允許(xu)將幾個IP地址關聯到一個域(yu)中,可以配置DNS解析程序,或對其(qi)進(jin)行(xing)編程,以返(fan)回可變的(de)IP地址。解析程序返(fan)回IP地址時所基于的(de)原則(ze)可以很簡單(輪轉(zhuan)),也bu)梢院芨fu)雜(比(bi)re)綺榭醇柑 wu)器上的(de)負(fu)載,並返(fan)回負(fu)載最輕的(de)服務(wu)器的(de)IP地址)

  在下圖中,Joe為www.joes-hardware.com運行(xing)了4台服務(wu)器。DNS服務(wu)器要決定為www.joes-hardware.com返(fan)回4個IP地址fen)械de)哪(na)一個。最簡單的(de)DNS決策算法就是輪轉(zhuan)

  1、DNS輪轉(zhuan)

  DNS輪轉(zhuan)是最常(chang)見(jian)的(de)重定向技ji)踔zhi)一也是最簡單的(de)重定向技ji)踔zhi)一。DNS輪轉(zhuan)使用了DNS主機(ji)名解析中的(de)一項特性,在Web服務(wu)器集群中平(ping)衡負(fu)載。這是一種zhi)?康de)負(fu)載均衡策略,沒有(you)考慮任(ren)何與客戶端和服務(wu)器的(de)相對位置,或者服務(wu)器當前an)fu)載有(you)關的(de)因素

  我們(men)來(lai)看看CNN.com實際(ji)上都做了些(xie)什麼(me)。我們(men)用Unix中的(de)工具nslookup來(lai)查找(zhao)與CNN.com相關的(de)IP地址。下面給出(chu)了結果

% nslookup www.cnn.comName: cnn.comAddresses: 207.25.71.9, 207.25.71.12, 207.25.71.20, 207.25.71.22, 207.25.71.23, 207.25.71.24, 207.25.71.25, 207.25.71.26, 207.25.71.27, 207.25.71.28, 207.25.71.29, 207.25.71.30, 207.25.71.82, 207.25.71.199, 207.25.71.245, 207.25.71.246Aliases: www.cnn.com

  網站www.cnn.com實際(ji)上是20個不同的(de)IP地址組成的(de)集群。每個IP地址通常(chang)都意味著一台不同的(de)物(wu)理服務(wu)器

  2、多個地址及輪轉(zhuan)地址fan)難 /p>

  大(da)多數DNS客戶端只會使用多地址集中的(de)第(di)一個地址。為了均衡負(fu)載,大(da)多數DNS服務(wu)器都會在每次完成查詢之(zhi)後對地址進(jin)行(xing)xin)腫zhuan)。這種zhi)?仿腫zhuan)通常(chang)稱作DNS輪轉(zhuan)

  例如,對www.crni.com進(jin)行(xing)三次連續的(de)DNS查找(zhao)可能會返(fan)回下面給出(chu)的(de)IP地址輪轉(zhuan)列表

  第(di)一次DNS查找(zhao)時的(de)第(di)一個地址為207.25.71.5;第(di)二次DNS查找(zhao)時的(de)第(di)一個地址為207.25.71.6;第(di)三次DNS查找(zhao)時的(de)第(di)一個地址為207.25.71.7

  3、用來(lai)平(ping)衡負(fu)載的(de)DNS輪轉(zhuan)

  由于大(da)多數DNS客戶端只使用第(di)一個地址,所以DNS輪轉(zhuan)可以在多台服務(wu)器間提供負(fu)載均衡。如果DNS沒有(you)對地址進(jin)行(xing)xin)腫zhuan),大(da)部(bu)分(fen)客戶端就總是會將負(fu)載發送給第(di)一台服務(wu)器

  下圖說(shuo)明了DNS輪轉(zhuan)循環是如何平(ping)衡負(fu)載的(de)

  Alice試圖連接www.cnn.com時,會用DNS查找(zhao)IP地址,得到207.25.71.5作 為第(di)一個1P地址。在圖c中,Alice連接到Web服務(wu)器207.25.71.5

  Bob隨後試圖連接www.cnn.com時,也會用DNS查找(zhao)IP地址,但由于地址列表在Alice上次請求(qiu)的(de)基礎上輪轉(zhuan)了一個位置,所以他(ta)會得到一個不同的(de)結果。Bob得到207.25.71.6作為第(di)一個IP地址,在圖f中它(ta)連接到了這台服務(wu)器上

  4、 DNS緩存帶(dai)來(lai)的(de)影(ying)響

  DNS對服務(wu)器的(de)每次查詢都會得到jiang)煌 de)服務(wu)器地址序列,所以DNS地址輪轉(zhuan)會將負(fu)載分(fen)攤。但是這種zhi)fu)載均衡並不完美,因為DNS查找(zhao)的(de)結果可能會被記住(zhu),並被各種應用程序、操作系統(tong)和一些(xie)簡易的(de)子DNS服務(wu)器重用。很多Web瀏(liu)覽器都會對主機(ji)進(jin)行(xing)DNS查找(zhao),然後一次次地使用相同的(de)地址,以減少DNS查找(zhao)的(de)開銷,而(er)且有(you)些(xie)服務(wu)器也更(geng)願意保持與同一台客戶端shuo)de)聯系。另(ling)外,很多操作系統(tong)都會自動進(jin)行(xing)DNS查找(zhao),並將結果緩存,但並不會對地址進(jin)行(xing)xin)腫zhuan)。因此(ci),DNS輪轉(zhuan)通常(chang)都不會平(ping)衡單個客戶端shuo)de)負(fu)載——一個客戶端通常(chang)會在很長時間內連接到一台服務(wu)器上

  盡(jin)管DNS沒有(you)對單個客戶端shuo)de)事(shi)務(wu)進(jin)行(xing)跨服務(wu)器副本的(de)處理,但在分(fen)散多個客戶端shuo)de)總負(fu)荷方面它(ta)做得相當好。只要有(you)大(da)量具有(you)相同需求(qiu)的(de)客戶端,就可以將負(fu)載合(he)理地分(fen)散到各個服務(wu)器上去

  5、其(qi)他(ta)基于DNS的(de)重定向算法

  前面討論(lun)了DNS是如何對每條請求(qiu)進(jin)行(xing)地址列表輪轉(zhuan)的(de)。但是,有(you)些(xie)增強的(de)DNS服務(wu)器會使用其(qi)他(ta)一些(xie)技ji)趵lai)選擇地址fan)乃承/p>

  a、負(fu)載均衡算法

  有(you)些(xie)DNS服務(wu)器會跟蹤Web服務(wu)器上的(de)負(fu)載,將負(fu)載最輕的(de)Web服務(wu)器放在列表的(de)最前面

  b、鄰(lin)接路由算法

  Web服務(wu)器集群在地理上xi)fen)散時,DNS服務(wu)器會嘗試著將用戶導向最近的(de)Web 服務(wu)器

  c、故障屏蔽算法

  DNS服務(wu)器可以監視網絡的(de)狀況,並將請求(qiu)繞過出(chu)現服務(wu)中斷或其(qi)他(ta)故障的(de) 地方

  通常(chang),運行(xing)復(fu)雜服務(wu)器跟蹤算法的(de)DNS服務(wu)器就是在內容提供者控制之(zhi)下的(de)一個權威服務(wu)器

  有(you)一些(xie)分(fen)布ji)街骰ji)服務(wu)會使用這個DNS重定向模型。對于那些(xie)要查找(zhao)附近服務(wu)器的(de)服務(wu)來(lai)ci)擔 飧瞿P偷de)一個缺點就是,權威DNS服務(wu)器只能用本地DNS服務(wu)器的(de)IP地址,而(er)不能用客戶端shuo)de)IP地址來(lai)做決定

【任(ren)播尋址】

  在任(ren)播尋址fen)校 父齙乩砩戲(xi)fen)散的(de)Web服務(wu)器擁有(you)完全(quan)相同的(de)IP地址,而(er)且會通過骨干路由器的(de)“最短路徑(jing)”路由功能將客戶端shuo)de)請求(qiu)發送給離它(ta)最近的(de)服務(wu)器

  要使這種方法工作,每台服務(wu)器都要向鄰(lin)近的(de)骨干路由器廣告,表明自己(ji)是一台路由器。Web服務(wu)器會通過路由器通信協議與其(qi)鄰(lin)近的(de)骨干路由器通信。骨干路由器收到發送給任(ren)播地址fan)姆fen)組時,會(像平(ping)常(chang)一樣)尋找(zhao)接受(shou)那個IP地址fan)淖 de) “路由器”。由于服務(wu)器是將自己(ji)作為那個地址fan)穆酚善鞁愀娉chu)去的(de),所以骨干路由器會將分(fen)組發送給服務(wu)器

  下圖中,三台服務(wu)器為同一個IP地址10.10.10.1服務(wu)。洛杉(shan)磯(ji)(LA)服務(wu)器將此(ci)地址廣告給LA路由器,紐約(NY)服務(wu)器同樣將此(ci)地址廣告給NY路由器,以此(ci)類推。服務(wu)器會通過路由器協議與路由器進(jin)行(xing)通信。路由器會將目標(biao)為10.10.10.1的(de)客戶端請求(qiu)自動地轉(zhuan)發到廣告這個地址fan)淖 de)服務(wu)器上去。對IP地址10.10.10.1的(de)請求(qiu)會被轉(zhuan)發給服務(wu)器3

  任(ren)播尋址仍然是項實驗性技ji)酢R 褂梅fen)布ji)餃ren)播技ji)  wu)器就必(bi)須“使用路由器語言”,而(er)且路由器必(bi)須能夠處理可能出(chu)現zhi)de)地址沖突,因為因特網地址基本上都ji)羌jia)定一台服務(wu)器只有(you)一個地址fan)摹如果沒有(you)正確fan)厥迪鄭 贍芑嵩斐珊苧現氐de) “路由泄露”問(wen)題。)分(fen)布ji)餃ren)播是一種新(xin)興技ji)  梢暈 切xie)自己(ji)控制骨干網絡的(de)內容提供商(shang)提供一種解決方案(an)

【IP MAC轉(zhuan)發】

  在以太網中,HTTP報文都ji)且孕xie)帶(dai)地址fan)氖莘fen)組的(de)形wen)椒?偷de)。每個分(fen)組都有(you)一個第(di)四層地址,由源IP地址、目的(de)IP地址以及TCP端口號組成,它(ta)是第(di)四層設備所關注的(de)地址。每個分(fen)組還有(you)一個第(di)二層地址,MAC(Media Access Control,媒jiao)宸夢wen)控制)地址,這是第(di)二層設備(通常(chang)是交換機(ji)和Hub)所關注的(de)地址。第(di)二層設備的(de)任(ren)務(wu)是接收具有(you)特定輸入MAC地址fan)姆fen)組,然後將其(qi)轉(zhuan)發到jiao)囟 de)輸出(chu)MAC地址上去

  比(bi)re)紓 巒冀換換ji)的(de)程序會將來(lai)自MAC地址MAC3的(de)所有(you)流量都發送到MAC地址MAC4上去

  第(di)四層交換機(ji)能夠檢測出(chu)第(di)四層地址(IP地址和TCP端口號),並據此(ci)來(lai)選擇路由。比(bi)re)紓 惶 di)四層交換機(ji)可以將所有(you)目的(de)為端口80的(de)Web流量都發送到某個代理上去。在下圖中,編寫(xie)交換機(ji)程序,將MAC3上所有(you)端口80的(de)流量都轉(zhuan)發到MAC6(代理緩存)上去。MAC3上所有(you)其(qi)他(ta)流量都會被轉(zhuan)發到MAC5上去

  通常(chang),如果緩存中有(you)所請求(qiu)的(de)HTTP內容,而(er)且是新(xin)鮮的(de),那麼(me)就由代理緩存來(lai)提供內容。否則(ze),代理緩存就會代表客戶端向此(ci)內容的(de)原始服務(wu)器發送一條HTTP請求(qiu)。交換機(ji)會將端口80的(de)請求(qiu)從代理(MAC6)發送給因特網網關(MAC5)

  支持MAC轉(zhuan)發的(de)第(di)四層交換機(ji)通常(chang)會將請求(qiu)轉(zhuan)發給幾個代理緩存,並在它(ta)們(men)之(zhi)間平(ping)衡負(fu)載。類似(si)地,也bu)梢越TTP流量轉(zhuan)發給備用HTTP服務(wu)器。因為MAC地址轉(zhuan)發只是點對點的(de),所以服務(wu)器或代理只能位于離交換機(ji)一跳遠的(de)地方

【IP地址轉(zhuan)發】

  在IP地址轉(zhuan)發中,交換機(ji)或其(qi)他(ta)第(di)四層設備會檢測輸入分(fen)組中的(de)TCP/IP地址,並通過修改na)康de)IP地址(不是目的(de)MAC地址),對分(fen)組進(jin)行(xing)相應的(de)轉(zhuan)發。與MAC轉(zhuan)發相比(bi),這麼(me)做的(de)優(you)點是目標(biao)服務(wu)器不需要位于一跳遠的(de)地方;只需要位于交換機(ji)的(de)上游就行(xing)了,而(er)且通常(chang)第(di)三層的(de)端shuo)蕉艘蛺贗酚啥薊嶠 fen)組傳送到正確fan)牡胤健U庵擲嘈偷de)轉(zhuan)發也被稱為NAT(Network Address Translation,網絡地址轉(zhuan)換)

  但還有(you)一個問(wen)題,就是對稱路由。從客戶端接受(shou)輸入TCP連接的(de)交換機(ji)管理著連接,交換機(ji)必(bi)須通過那條TCP連接將響應回送給客戶端。這樣,所有(you)來(lai)自目標(biao)服務(wu)器或代理的(de)響應都必(bi)須返(fan)回給交換機(ji)

  有(you)以下兩種方式可以控制響應的(de)返(fan)回路徑(jing)

  1、將分(fen)組的(de)源IP地址改成交換機(ji)的(de)IP地址。通過這種方式,無論(lun)交換機(ji)和服務(wu)器之(zhi)間采用何種網絡配置,響應分(fen)組都會被發送給交換機(ji)。這種方式被稱為完全(quan)NAT(full NAT),其(qi)中的(de)IP轉(zhuan)發設備會對目的(de)IP地址和源IP地址都進(jin)行(xing)轉(zhuan)換

  這樣做的(de)缺點是服務(wu)器不知道客戶端shuo)de)IP地址,那種需要認(ren)證和計費(fei)的(de)Web服務(wu)器無法獲知客戶端shuo)de)IP地址

  2、如果源IP地址仍然是客戶端shuo)de)IP地址,就要確保(從硬(ying)件(jian)的(de)角(jiao)度(du)來(lai)看)沒有(you)從服務(wu)器到客戶端shuo)de)直接路由(繞過交換機(ji)的(de))。這種方式有(you)時被稱為半NAT(half NAT)。這種方法的(de)優(you)點是服務(wu)器知道客戶端shuo)de)IP地址,但缺點是要對客戶端和服務(wu)器之(zhi)間的(de)整個網絡都有(you)某種程度(du)的(de)控制

【網元(yuan)控制協議】

  NECP(Network Element Control Protocol,網元(yuan)控制協議)允許(xu)網元(yuan)(NE,路由器和交換機(ji)等負(fu)責轉(zhuan)發IP分(fen)組的(de)設備)與服務(wu)器元(yuan)素(SE,Web服務(wu)器和代理緩存等提供應用層請求(qiu)的(de)設備)進(jin)行(xing)交互。NECP並未顯(xian)式jiao) ┐願fu)載均衡的(de)支持,它(ta)只是為SE提供了一種發送負(fu)載均衡信息(xi)給NE的(de)方式,這樣NE就可以在它(ta)認(ren)為合(he)適的(de)情況下進(jin)行(xing)負(fu)載均衡了。與WCCP一樣,NECP也提供了幾種轉(zhuan)發分(fen)組的(de)方式︰MAC轉(zhuan)發、GRE封裝和NAT

  NECP支持例外。SE可以決定它(ta)不能為某些(xie)特定的(de)源IP地址提供服務(wu),並將這些(xie)地址發送給NE。然後,NE可以將來(lai)自這些(xie)IP地址fan)那肭qiu)轉(zhuan)發給原始服務(wu)器

  下表描述了NECP報文

立博平台官网

  到目前為止,我們(men)已經(jing)討論(lun)過通用的(de)重定向方法了。出(chu)于潛在的(de)安全(quan)考慮,內容也bu)贍芐枰  髦執(zhi)砝lai)訪問(wen),或者網絡中可能有(you)一個客戶端可利用的(de)代理緩存,因為獲取已緩存的(de)內容很可能要比(bi)直接連接到原始服務(wu)器快得多

  但Web瀏(liu)覽器客戶端怎麼(me)才會知道要連接到某個代理上去呢?可以用3種方法來(lai)判斷︰he)允戒liu)覽器配置、動態自動配置以及透明攔截(jie)

  代理可以順次將客戶端請求(qiu)重定向到另(ling)一個代理上去。比(bi)re)紓 揮you)緩存此(ci)內容的(de)代理緩存可能會選擇將客戶端重定向到另(ling)一個代理緩存。這樣一來(lai),響應就會來(lai)自與客戶端請求(qiu)資源的(de)地址不同的(de)另(ling)外一個地址,所以,我們(men)還會討論(lun)幾種用于對等代理——緩存重定向的(de)協議︰ICP、CARP和HTCP

【顯(xian)式瀏(liu)覽器配置】

  大(da)多數瀏(liu)覽器都可以配置為從代理服務(wu)器上獲取內容——瀏(liu)覽器中有(you)一個下拉菜shuo)? 沒?梢栽謖飧霾說(shuo)?惺淙氪淼de)名字或IP地址以及端口號。然後瀏(liu)覽器的(de)所有(you)xing)肭qiu)都可以發送給這個代理。有(you)些(xie)服務(wu)提供商(shang)不允許(xu)用戶配置普通瀏(liu)覽器來(lai)使用me)恚 ta)們(men)會要求(qiu)用戶下載事(shi)先配置好的(de)瀏(liu)覽器。這些(xie)瀏(liu)覽器知道所要使用的(de)代理的(de)地址

  顯(xian)式瀏(liu)覽器配置有(you)以下兩個主要的(de)缺點︰

  1、配置為使用me)淼de)瀏(liu)覽器,即使在代理無法響應的(de)情況下,也不會去聯系原始服務(wu)器。如果代理崩潰了,或者沒有(you)正確配置瀏(liu)覽器,用戶就會遇到連接方面的(de)問(wen)題

  2、對網絡架構(gou)進(jin)行(xing)修改,並將這些(xie)修改通知給所有(you)的(de)終端用戶都ji)嗆芾 訓de)。如果服務(wu)提供商(shang)要添加更(geng)多的(de)代理服務(wu)器,或者使其(qi)中一些(xie)退出(chu)服務(wu),用戶都要修改瀏(liu)覽器代理設置

【代理自動配置】

  顯(xian)式jiao)渲娩liu)覽器使其(qi)聯系特定的(de)代理,這樣會限制網絡架構(gou)方面的(de)變動,因為它(ta)是靠用戶來(lai)介入並重新(xin)配置瀏(liu)覽器的(de)。自動配置方式可以動態配置瀏(liu)覽器,連接到正確fan)拇矸wu)器,以解決這個問(wen)題。這種方法已經(jing)實現了,被稱為代理自動配 置(PAC)協議。PAC是網景公司jing)ㄒ宓de),網景公司的(de)Navigator和微軟的(de)IE瀏(liu)覽器都支持zhi)ci)協議

  PAC的(de)基本思想是讓瀏(liu)覽器去獲取一個稱為PAC的(de)特殊文件(jian),這個文件(jian)說(shuo)明了每個URL所關聯的(de)代理。必(bi)須配置瀏(liu)覽器,為這個PAC文件(jian)關聯一個特定的(de)服務(wu)器。這樣,瀏(liu)覽器每次重啟(qi)的(de)時候(hou)都可以獲取這個PAC文件(jian)了

  PAC文件(jian)是個JavaScript文件(jian),其(qi)中必(bi)須定義函數︰

function FindProxyForURL(url, host)

  如下所示,瀏(liu)覽器要為請求(qiu)的(de)每條URL調用這個函數︰

return_value = FindProxyForURL(url_of_request, host_in_url);

  其(qi)返(fan)回值(zhi)為一個字符(fu)串,用來(lai)ci)得麂liu)覽器應該到哪(na)里請求(qiu)這個URL。返(fan)回值(zhi)可以是所關聯的(de)代理名稱列表(比(bi)re)紓ROXY proxy1.domain.com, PROXY proxy2.domain.com),或者是字符(fu)串'DIRECT',這個字符(fu)串說(shuo)明瀏(liu)覽器應該繞開所有(you)的(de)代理,直接連接原始服務(wu)器

  下圖給出(chu)了瀏(liu)覽器對PAC文件(jian)的(de)請求(qiu)以及響應此(ci)請求(qiu)的(de)操作順序。在本例中,服務(wu)器回送了帶(dai)有(you)JavaScript程序的(de)PAC文件(jian)。JavaScript程序中有(you)一個FindProxyForURL函數,用來(lai)告知瀏(liu)覽器,如果所請求(qiu)的(de)URL的(de)主機(ji)位于netscape.com域(yu)中,就直接與原始服務(wu)器聯系,所有(you)其(qi)他(ta)請求(qiu)都連接到proxy1.joes-cache.com。瀏(liu)覽器會為它(ta)所請求(qiu)的(de)每個URL調用這個函數,並根據此(ci)函數返(fan)回的(de)結果進(jin)行(xing)連接

  PAC協議是相當強大(da)的(de)︰JavaScript程序可以請求(qiu)瀏(liu)覽器根據大(da)量與主機(ji)名相關的(de)參wen)lai)選擇代理,比(bi)re)NS地址和子網,甚至星(xing)期(qi)幾或具體時間。只要服務(wu)器中的(de)PAC文件(jian)保持zhi)geng)新(xin),能反映代理位置的(de)變化,PAC就允許(xu)瀏(liu)覽器根據網絡結構(gou)的(de)變化自動與合(he)適的(de)代理進(jin)行(xing)聯系

  PAC存在的(de)主要問(wen)題是必(bi)須要對瀏(liu)覽器進(jin)行(xing)配置,讓它(ta)知道要從哪(na)個服務(wu)器獲取PAC文件(jian),因此(ci)它(ta)就是一個全(quan)自動配置的(de)系統(tong)。就像那些(xie)預(yu)配置瀏(liu)覽器一樣,現在一些(xie)主要的(de)ISP都在使用PAC

【Web代理自動發現協議】

  WPAD(Web代理自動發現協議)的(de)目標(biao)是在不要求(qiu)終端用戶手(shou)工配置me)砩柚茫br />而(er)且不依賴透明流量攔截(jie)的(de)情況下,為Web瀏(liu)覽器提供一種發現並使用附近代理的(de)方式。由于可供選擇的(de)發現協議有(you)很多,而(er)且不同瀏(liu)覽器的(de)代理使用men)渲靡泊嬖誆cha)異,因此(ci)定義Web代理自動發現協議時,普通的(de)問(wen)會被復(fu)雜化

  1、PAC文件(jian)自動發現

  WPAD允許(xu)HTTP客戶端定位一個PAC文件(jian),並使用這個PAC文件(jian)找(zhao)到適當的(de)代理服務(wu)器的(de)名字。WPAD不能直接確定代理服務(wu)器的(de)名字,因為這樣就無法使用PAC文件(jian)提供的(de)附加功能了(負(fu)載均衡,請求(qiu)路由到一組服務(wu)器上去,故障時自動轉(zhuan)移到備用me)矸wu)器等)

  如下圖所示,WPAD協議發現了PAC文件(jian)URL,這個URL也被稱為配置URL(CURL)。PAC文件(jian)執(zhi)行(xing)了一個JavaScript程序,這個程序會返(fan)回合(he)適的(de)代理服務(wu)器地址

  實現WPAD協議的(de)HTTP客戶端用WPAD找(zhao)到PAC文件(jian)的(de)CURL,根據這個CURL獲取PAC文件(jian)(又名配置文件(jian)或CFILE),執(zhi)行(xing)PAC文件(jian)來(lai)確定代理服務(wu)器,向PAC文件(jian)返(fan)回的(de)那個代理服務(wu)器發送HTTP請求(qiu)

  2、WPAD算法

  WPAD使用了一系列資源發現技ji)趵lai)確定適當的(de)PAC文件(jian)CURL。並不是所有(you)的(de)組織都可以使用所有(you)技ji)醯de),所以WPAD指(zhi)定了多種發現技ji)酢T誄曬 竦URL之(zhi)前,WPAD客戶端會一個個地嘗試每種技ji)/p>

  當前的(de)WPAD規範按序定義了下列技ji) HCP(動態主機(ji)配置協議)、SLP(服務(wu)定位協議)、DNS知名主機(ji)名、DNS SRV記錄(lu)、DNS TXT記錄(lu)中提供的(de)服務(wu)URL

  在這5種機(ji)制中,要求(qiu)WPAD客戶端必(bi)須支持DHCP和DNS知名主機(ji)名技ji)/p>

  WPAD客戶端會按ci)承蠐蒙廈嫣 ┐de)發現機(ji)制發送一系列資源發現請求(qiu)。客戶端只會嘗試它(ta)們(men)所支持zhi)de)機(ji)制。只要某次發現嘗試成功了,客戶端就會用得到的(de)信息(xi)來(lai)構(gou)建PAC CURL

  如果從那個CURL上成功獲取到PAC文件(jian),這個過程就結束了。如果沒有(you),客戶端就從它(ta)在預(yu)定義的(de)資源發現請求(qiu)系列里中斷的(de)地方開始恢zhi)礎H綣?粵慫you)的(de)發現機(ji)制後,都沒有(you)獲取到PAC文件(jian),WPAD協議就失(shi)敗了,客戶端會配置為不使用me)矸wu)器

  客戶端首先會嘗試DHCP,然後是SLP。如果沒有(you)獲取到PAC文件(jian),客戶端會繼續執(zhi)行(xing)那些(xie)基于DNS的(de)機(ji)制

  客戶端會在DNS SRV、知名主機(ji)名和DNS TXT記錄(lu)等方法中循環多次。每次都ji)NS查詢的(de)QNAME變得越來(lai)越jiang)瘓(huan)嚀濉M 庵址絞劍 突?司涂梢遠ㄎ懷chu)盡(jin)可能具體的(de)配置信息(xi),但也bu)贍芑嶙zhuan)而(er)使用一些(xie)不太具體的(de)信息(xi)。每次DNS查找(zhao)都會在QNAME前加上wpad,用以說(shuo)明請求(qiu)的(de)資源類型

  考慮主機(ji)名為johns-desktop.development.foo.com的(de)客戶端。下面是一個完整的(de)WPAD客戶端會執(zhi)行(xing)的(de)發現嘗試順序︰DHCP;SLP;用QNAME=wpad.development.foo.com 進(jin)行(xing)DNS A查找(zhao);用QNAME=wpad.development.foo.com進(jin)行(xing)DNS SRV查找(zhao);用QNAME=wpad.devdopment.foo.com進(jin)行(xing)DNS TXT查找(zhao);用QNAME=wpad.foo.com進(jin)行(xing)DNS A查找(zhao);用QNAME=wpad.foo.com進(jin)行(xing) DNS SRV 查找(zhao);用QNAME=wpad.foo.com進(jin)行(xing)DNS TXT查找(zhao)

  3、用DHCP進(jin)行(xing)CURL發現

  要使用這種機(ji)制,就必(bi)須將CURL存儲在WPAD客戶端?家圓檠 de)DHCP服務(wu)器上。WPAD客戶端可以通過向DHCP服務(wu)器發送DHCP查詢來(lai)獲取CURL。(如果DHCP服務(wu)器中配置了這種信息(xi)),就可以在DHCP可選代碼(ma)252中獲取CURL。所有(you)WPAD客戶端實現都必(bi)須支持DHCP

  如果WPAD客戶端已經(jing)在其(qi)初始化過程中xiong)蔥xing)了DHCP查詢,DHCP服務(wu)器可能就已經(jing)提供了那個值(zhi)。如果無法通過客戶端OS API獲得這個值(zhi),客戶端就向DHCP服務(wu)器發送一條DHCPINFORM報文,以獲取這個值(zhi)

  WPAD的(de)DHCP可選代碼(ma)252為STRING類型,可以是任(ren)意長度(du)。這個字符(fu)串中包(bao)含了一個指(zhi)向適當PAC文件(jian)的(de)URL。比(bi)re)紓/p>

'http://server.domain/proxyconfig.pac'

  4、DNS A記錄(lu)查找(zhao)

  要讓這種機(ji)制工作,就必(bi)須將合(he)適的(de)代理服務(wu)器的(de)IP地址存儲在WPAD客戶端可以查詢的(de)DNS服務(wu)器上。WPAD客戶端會向DNS服務(wu)器發送一個A記錄(lu)查詢,以獲取CURL。成功查詢的(de)結果中會包(bao)含合(he)適的(de)代理服務(wu)器的(de)IP地址

  WPAD客戶端實現必(bi)須支持這種機(ji)制。這應該是很簡單的(de),因為它(ta)只要求(qiu)基本的(de)DNS A記錄(lu)查找(zhao)。對WPAD來(lai)ci)擔 娣妒褂昧ldquo;wpad”的(de)“知名別名”來(lai)進(jin)行(xing)Web代理自動發現

  客戶端執(zhi)行(xing)了下列DNS查找(zhao)︰

QNAME=wpad.TGTDOM., QCLASS=IN, QTYPE=A

  成功的(de)查找(zhao)中包(bao)含了IP地址,WPAD客戶端根據這個地址構(gou)建CURL

  5、獲取PAC文件(jian)

  只要創建了候(hou)選的(de)CURL,WPAD客戶端通常(chang)都會向CURL發送一條GET請求(qiu)。發出(chu)請求(qiu)時,WPAD客戶端必(bi)須要發送一些(xie)帶(dai)有(you)適當CFILE格式信息(xi)的(de)Accept首部(bu),這些(xie)CFILE格式都ji)撬ta)們(men)所能處理的(de)。比(bi)re)紓/p>

Accept: application/x-ns-proxy-autoconfig

  而(er)且,如果CURL的(de)結果是要進(jin)行(xing)xiong)囟ㄏ潁 突?司捅bi)須跟隨這些(xie)重定向到其(qi)最終目的(de)地

  6、何wen)敝zhi)行(xing)WPAD

  至少要在出(chu)現以下情況的(de)時候(hou)進(jin)行(xing)Web代理自動發現︰

  a、在Web客戶端si)舳 de)時候(hou)——WPAD只在第(di)一個實例啟(qi)動的(de)時候(hou)執(zhi)行(xing)。後面的(de)實例會繼承這種設置

  b、只要有(you)來(lai)自網絡棧的(de)通知,就說(shuo)明客戶端主機(ji)的(de)IP地址改變了

  哪(na)個選項在其(qi)環境(jing)中有(you)意義,Web客戶端就可以選擇哪(na)個。而(er)且,客戶端還必(bi)須根據HTTP的(de)過期(qi)時間,為之(zhi)前下載的(de)PAC文件(jian)的(de)過期(qi)時間嘗試一個發現周期(qi)。PAC文件(jian)過期(qi)時,客戶端遵(zun)循過期(qi)時間,重新(xin)運行(xing)WPAD過程是很重要的(de)

  如果PAC文件(jian)沒有(you)提供替換方案(an),在當前配置的(de)代理失(shi)效的(de)情況下,客戶端還可以選擇重新(xin)運行(xing)WPAD過程

  只要客戶端決定使當前的(de)PAC文件(jian)失(shi)效,就必(bi)須重新(xin)運行(xing)整個WPAD協議,以確保它(ta)會發現zhi)鼻罷返(fan)URL。具體來(lai)ci)擔 褪切 椴荒苡you)條件(jian)地獲取PAC文件(jian)的(de)If-Modified-Since

  WPAD協議廣播與/或多播通信可能需要大(da)量的(de)網絡環回時間。WPAD協議的(de)激活頻率不應該高于上面指(zhi)定的(de)頻率(比(bi)re)繚諉看位袢RL時進(jin)行(xing)一次)

  7、WPAD欺騙

  WPAD的(de)IE5實現允許(xu)Web客戶端在沒有(you)用戶干預(yu)的(de)情況下,自動檢測代理設置。WPAD使用的(de)算法會在全(quan)稱域(yu)名前加上主機(ji)名“Wpad”,並會逐漸?h除子域(yu)名,直到它(ta)找(zhao)到能夠響應主機(ji)名的(de)WPAD服務(wu)器,或到達第(di)三級(ji)域(yu)名。比(bi)re)紓 yu)a.b.microsoft.com中的(de)Web客戶端會先查詢wpad.a.b.microsoft、wpad.b.microsoft.com,然後再(zai)查詢wpad.microsoft.com

  這樣會暴露出(chu)一個安全(quan)漏洞(dong),因為在國際(ji)應用(及其(qi)他(ta)特定的(de)配置)中,第(di)三級(ji)域(yu)名可能是不可信的(de)。惡意用戶可以建立一個WPAD服務(wu)器,並提供他(ta)選中的(de)代理配置命令。後繼(5.01及以後)的(de)IE版本修正了這個問(wen)題

  8、超時

  WPAD會經(jing)過多個級(ji)別的(de)發現,客戶端必(bi)須確保每個階段都有(you)時限保證。可能的(de)情況下,將每個階段都限制在10秒(miao)以內是比(bi)較合(he)理的(de),但實現者可能會選擇其(qi)他(ta)更(geng)適合(he)其(qi)網絡特性的(de)值(zhi)。比(bi)re)紓 誦xing)在無線網絡上的(de)設備實現,由于帶(dai)寬較低或時延較長,可能就會使用更(geng)大(da)的(de)時限

  9、管理者的(de)考慮

  管理者至少應該在其(qi)環境(jing)中配置DHCP或DNS A記錄(lu)查找(zhao)方式中的(de)一種,因為只有(you)這兩種方式是所有(you)兼容客戶端都必(bi)須實現zhi)de)。除此(ci)之(zhi)外,通過配置環境(jing)使其(qi)支持搜索(suo)列表中順序靠前的(de)機(ji)制,可以縮(suo)短客戶端shuo)de)啟(qi)動時間

  使用這種協議結構(gou)的(de)主要動力(li)之(zhi)一是支持客戶端定位附近的(de)代理服務(wu)器。在很多環境(jing)中,都會有(you)多個代理服務(wu)器(工作組、公司網關,ISP、骨干網等)

  在WPAD框(kuang)架結構(gou)中,可以在很多地方確定代理服務(wu)器是否“鄰(lin)近”︰

  a、不同子網DHCP服務(wu)器會返(fan)回不同答案(an)。還可以根據客戶端shuo)de)cipaddr字段或客戶端標(biao)識符(fu)選項作出(chu)決定

  b、可以對DNS服務(wu)器進(jin)行(xing)配置,使其(qi)為不同的(de)域(yu)名後綴(zhui)(比(bi)re)紓NAME wpad.marketing.bigcorp.com和wpad.development.bigcorp.com)返(fan)回不同的(de)SRV/A/TXT資源記錄(lu)(RR)

  c、處理CURL請求(qiu)的(de)Web服務(wu)器會根據user-Agent首部(bu)、Accept首部(bu)、客戶端IP地址/子網/主機(ji)名、附近代理服務(wu)器的(de)拓撲分(fen)布等作出(chu)決定。可能由處理CURL的(de)CGI可執(zhi)行(xing)文件(jian)進(jin)行(xing)這種zhi) 懟H縝八觶 踔量贍蓯悄掣齟 URL請求(qiu)的(de)代理服務(wu)器來(lai)作出(chu)這些(xie)決定

  d、PAC文件(jian)的(de)表達能力(li)可能足(zu)以在客戶端運行(xing)時從一組候(hou)選的(de)代理服務(wu)器中進(jin)行(xing)選擇。CARP就是在此(ci)基礎上實現緩存陣列的(de)。PAC文件(jian)可以計算出(chu)到一組候(hou)選代理服務(wu)器的(de)網絡距離(或其(qi)他(ta)合(he)理的(de)度(du)量方式),並選擇“最近”或“響應最積極”的(de)服務(wu)器,這並不是什麼(me)不可思議的(de)事(shi)情

立博平台官网

  我們(men)已經(jing)討論(lun)過一些(xie)將流量重定向到通用服務(wu)器的(de)技ji)  約耙恍xie)將流量導向代理或網關的(de)專用技ji)趿恕O旅婊嶠檣芤恍xie)更(geng)復(fu)雜的(de)、用于緩存代理服務(wu)器的(de)重定向技ji)酢U廡xie)技ji)躋﹥jin)量做到可靠、高效且能感(gan)知內容——這樣可以將請求(qiu)分(fen)配到可能包(bao)含特定內容的(de)位置上去,因此(ci)比(bi)前面討論(lun)過的(de)那些(xie)協議更(geng)復(fu)雜

【WCCP重定向】

  Cisco系統(tong)公司開發的(de)WCCP可以使路由器將Web流量重定向到代理緩存中去。WCCP負(fu)責路由器和緩存服務(wu)器之(zhi)間的(de)通信,這樣路由器就可以對緩存進(jin)行(xing)驗證(確保它(ta)們(men)已啟(qi)動且正在運行(xing)),在緩存之(zhi)間進(jin)行(xing)負(fu)載均衡,並將特定類型的(de)流量發送給特定的(de)緩存了。WCCP版本2(WCCP2)是個開放的(de)協議。下面探jiao)CCP2

  1、WCCP重定向工作流程

  下面是WCCP重定向在HTTP上工作過程的(de)概述(WCCP對其(qi)他(ta)協議的(de)重定向過程也是類似(si)的(de))︰啟(qi)動包(bao)含了一些(xie)支持WCCP的(de)路由器和緩存的(de)網絡,這些(xie)路由器和緩存之(zhi)間可以相互通信;一組路由器及其(qi)目標(biao)緩存構(gou)成一個WCCP服務(wu)組。服務(wu)組的(de)配置說(shuo)明了要將何種流量發往何處、流量是如何發送的(de)以及如何在服務(wu)組的(de)緩存之(zhi)間進(jin)行(xing)負(fu)載均衡;如果服務(wu)組配置為重定向HTTP流量,服務(wu)組中的(de)路由器就會將HTTP請求(qiu)發送給服務(wu)組中的(de)緩存;HTTP請求(qiu)抵zhi)鋟wu)組中的(de)路由器時,路由器會(根據對請求(qiu)IP地址fan)納 校 蛘ldquo;掩碼(ma)/值(zhi)”的(de)配對策略)選擇服務(wu)組中的(de)某個緩存為請求(qiu)提供服務(wu);路由器向緩存發送請求(qiu)分(fen)組,可以用緩存的(de)IP地址來(lai)封裝分(fen)組,也bu)梢醞 P MAC轉(zhuan)發來(lai)實現;如果緩存無法為請求(qiu)提供服務(wu),就將分(fen)組返(fan)回給路由器進(jin)行(xing)普通的(de)轉(zhuan)發;服務(wu)組中的(de)成員會互相交換心跳報文,不斷驗證對方的(de)可用性

  2、WCCP2報文

  WCCP2報文有(you)4種,如下表所示

  WCCP2_HERE_I_AM的(de)報文格式為

Security Info ComponentService Info ComponentWeb-cache Identity Info ComponentWeb-cache View Info ComponentCapability Info Component(可選)Command Extension Component(可選)

  WCCP2_I_SEE_YOU的(de)報文格式為

WCCP Message HeaderSecurity Info ComponentService Info ComponentRouter Identity Info ComponentRouter View Info ComponentCapability Info Component(可選)Command Extension Component(可選)

  WCCP2_REDIRECT_ASSIGN 的(de)報文格式為

WCCP Message HeaderSecurity Info ComponentService Info ComponentAssignment Info Component, or Alternate Assignment Component

  WCCP2_REMOVAL_QUERY 的(de)報文格式為

WCCP Message HeaderSecurity Info ComponentService Info ComponentRouter Query Info Component

  3、報文組件(jian)

每條WCCP2報文都由一個首部(bu)和一些(xie)組件(jian)構(gou)成。WCCP首部(bu)信息(xi)包(bao)含報文類型(Here I Am、I See You、Assignment或Removal Query)、WCCP版本和報文長度(du)(不包(bao)括(kuo)首部(bu)的(de)長度(du))

  每個組件(jian)都以一個描述組件(jian)類型和tong)?du)的(de)4字節首部(bu)開始。組件(jian)長度(du)不包(bao)括(kuo)組件(jian)首部(bu)的(de)長度(du)。報文組件(jian)如下表所述

  4、服務(wu)組

  服務(wu)組(service group)由一組支持WCCP的(de)路由器和緩存組成,它(ta)們(men)之(zhi)間可以交換WCCP報文。路由器會向服務(wu)組中的(de)緩存發送Web流量。服務(wu)組的(de)配置確定了如何將流量分(fen)配到服務(wu)組的(de)緩存中去。路由器和緩存會在Here I Am和I See You報文中交換服務(wu)組的(de)配置信息(xi)

  5、GRE分(fen)組封裝

  支持WCCP的(de)路由器會用服務(wu)器的(de)IP地址將HTTP分(fen)組封裝起來(lai),將其(qi)重定向到jiao)囟 de)服務(wu)器上去。分(fen)組封裝中還包(bao)含了IP首部(bu)的(de)proto字段,用來(lai)ci)得魍ㄓ寐酚善鞣庾GRE)。proto字段的(de)存在告訴接收代理,它(ta)有(you)一個封裝的(de)分(fen)組。分(fen)組被封裝起來(lai),客戶端shuo)de)IP地址就不會丟失(shi)了。下圖顯(xian)示了GRE分(fen)組的(de)封裝過程

  6、WCCP的(de)負(fu)載均衡

  除了路由功能之(zhi)外,WCCP路由器還可以在幾個接收服務(wu)器之(zhi)間進(jin)行(xing)負(fu)載均衡。WCCP路由器及其(qi)接收服務(wu)器會交換心跳報文(heartbeat message),以便相互通知自己(ji)處于啟(qi)動運行(xing)狀態。如果某特定接收服務(wu)器停止發送心跳報文,WCCP路由器就會將請求(qiu)流最直接發送到因特網上,而(er)不會將其(qi)重定向給那個節點。節點重新(xin)提供服務(wu)時,WCCP路由器會再(zai)次開始接收心跳報文,並繼續向節點發送請求(qiu)流量

【因特網緩存協議】

  ICP (因特網緩存協議)允許(xu)緩存在其(qi)兄(xiong)弟(di)緩存中查找(zhao)命中內容。如果某個緩存中沒有(you)HTTP報文所請求(qiu)的(de)內容,它(ta)可以查明內容是否在附近的(de)兄(xiong)弟(di)緩存中,如果在,就從那里獲取內容,以避(bi)免查詢原始服務(wu)器而(er)帶(dai)來(lai)的(de)更(geng)多開銷。可以把ICP當作一個緩存集群協議。HTTP請求(qiu)報文的(de)最終目的(de)地可以通過一系列的(de)ICP查詢確定,從這個角(jiao)度(du)來(lai)ci)擔 ta)就是一個重定向協議

  ICP是一個對象發現協議。它(ta)會同時bi)? wen)附近的(de)多個緩存,看看ci)ta)們(men)的(de)緩存中是否有(you)特定的(de)URL。附近的(de)緩存如果有(you)那個URL的(de)話,就會返(fan)回一個簡短的(de)報文HIT,如果沒有(you),就返(fan)回MISS。然後,緩存就可以打(da)開一條到擁有(you)此(ci)對象的(de)鄰(lin)居緩存的(de)HTTP連接了

  ICP是很簡單直接的(de)。ICP報文是一個以網絡字節序表示的(de)32位封裝結構(gou),這樣更(geng)便于進(jin)行(xing)解析。為了提高效率,可以由UDP數據報承載其(qi)報文。UDP是一種不可靠的(de)因特網協議,說(shuo)明在傳輸的(de)過程中數據可能會被破壞,因此(ci)使用ICP的(de)程序要具有(you)超時功能,以檢測丟失(shi)的(de)數據報

  下面簡要描述一下ICP報文中的(de)部(bu)分(fen)信息(xi)

  a、Opcode(操作碼(ma))

  Opcode是個8位的(de)二進(jin)制值(zhi),用以描述ICP報文的(de)含義。基本的(de)opcode包(bao)括(kuo)ICP_OP_QUERY請求(qiu)報文和ICP_OP_HIT和ICP_OP_MISS響應報文

  b、版本

  8位的(de)版本號描述了ICP協議的(de)版本編號。Squid使用的(de)ICP版本記錄(lu)在RFC 2186第(di)2版中

  c、報文長度(du)

  以字節為單位的(de)ICP報文總長。因為只有(you)16位,所以ICP報文的(de)長度(du)不能超過16383字節。URL通常(chang)都小于16KB,如果超過這個長度(du),很多Web應用程序就無法處理它(ta)了

  d、請求(qiu)編號

  支持ICP的(de)緩存會用men)肭qiu)編號來(lai)記錄(lu)多個同時發起的(de)請求(qiu)和響應。ICP應答報文數必(bi)須與觸(chu)發應答的(de)ICP請求(qiu)報文數相同

  e、選項

  32位的(de)ICP選項字段wen)歉靄bao)含了若干標(biao)記的(de)位矢量,這些(xie)標(biao)記?加美lai)修改ICP的(de)行(xing)為。ICPv2定義了兩個標(biao)記,這兩個標(biao)記都會修改ICP_OP_QUERY請求(qiu)。ICP_FLAG_HIT_OBJ標(biao)記用來(lai)啟(qi)動或禁止在ICP響應中返(fan)回文檔(dang)數據。ICP_FLAG_SRC_RTT標(biao)記請求(qiu)由兄(xiong)弟(di)緩存測量的(de)、到原始服務(wu)器的(de)環回時間的(de)估計值(zhi)

  f、可選數據

  保留了32位的(de)可選數據用于可選特性。ICPv2使用了可選數據的(de)低16位來(lai)裝載從you)值(zhi)di)緩存到原始服務(wu)器的(de)可選環回時間的(de)估計值(zhi)

  g、發送端主機(ji)地址

  承載了報文發送端32位IP地址fan)鬧佷巍J導ji)中並未使用

  h、淨荷

  淨荷內容的(de)變化取決于報文的(de)類型。對ICP_OP_QUERY來(lai)ci)擔 緩墑且桓字節的(de)原始請求(qiu)端主機(ji)地址,後面跟著一個由NUL結尾的(de)URL。對ICP_OP_HIT_OBJ來(lai)ci)擔 緩墑且桓 UL結尾的(de)URL,後面跟著一個16位的(de)對象長度(du),接著是對象數據

【緩存陣列xin)酚尚 欏/p>

  代理服務(wu)器通過攔截(jie)來(lai)自單個用戶的(de)請求(qiu),提供所請求(qiu)Web對象的(de)緩存副本,極大(da)地降dang)土朔?蛺贗de)流量。但隨著用戶數的(de)增加,大(da)量流量可能會使代理服務(wu)器自身超載

  對此(ci)問(wen)題的(de)一種解決方案(an)就是使用多個代理服務(wu)器將負(fu)載分(fen)散到一組服務(wu)器上。CARP(緩存陣列xin)酚尚 是微軟公司和網景公司提出(chu)的(de)一個標(biao)準,通過這個協議來(lai)管理一組代理服務(wu)器,使這組代理服務(wu)器對用戶來(lai)ci)稻拖褚桓雎luo)輯(ji)緩存一樣

  CARP是ICP的(de)一個替代品。CARP和ICP都允許(xu)管理者通過使用多個代理服務(wu)器來(lai)提高性能。下面討論(lun)CARP與ICP的(de)區別,用CARP代替ICP的(de)優(you)缺點以及
CARP協議實現上的(de)一些(xie)技ji)蹕xi)節

  ICP中出(chu)現緩存未命中時,代理服務(wu)器會用ICP報文格式來(lai)查詢附近的(de)緩存,以確定Web對象是否存在。附近的(de)緩存會以HIT或MISS進(jin)行(xing)響應,請求(qiu)代理服務(wu)器會用這些(xie)響應來(lai)選擇能夠獲取到對象的(de)最適當的(de)位置。如果ICP代理服務(wu)器是以層次結構(gou)排(pai)列的(de),未命中的(de)查詢會被提交給其(qi)父fu)懟O巒家醞夾畏絞較xian)示了如何通過ICP來(lai)解決命中和未命中的(de)問(wen)題

  [注意]通過ICP協議連接起來(lai)的(de)每個代理服務(wu)器都ji)牆 諶萁jin)行(xing)了冗余鏡像的(de)獨(du)立緩存服務(wu)器,這就說(shuo)明在不同的(de)代理服務(wu)器之(zhi)間復(fu)制Web對象條目是可行(xing)的(de)。相反,用CARP連接起來(lai)的(de)一組服務(wu)器會被當作一個大(da)型的(de)服務(wu)器,其(qi)中每個組件(jian)服務(wu)器都只包(bao)含全(quan)部(bu)緩存文檔(dang)中的(de)一部(bu)分(fen)。通過對某個Web對象的(de)URL應用散列函數,CARP就可以將此(ci)對象映射到jiao)囟 de)代理服務(wu)器上去。每個Web對象都有(you)一個唯(wei)一的(de)家,所以我們(men)可以通過單次查找(zhao)確定對象的(de)位置,而(er)無須去查詢集合(he)中配置的(de)每個代理服務(wu)器。下圖總結了CARP重定向的(de)方式

  作為客戶端和代理服務(wu)器中間人shuo)de)緩存代理可以在各個代理服務(wu)器之(zhi)間分(fen)配負(fu)載,但這項功能也bu)梢雜煽突?俗隕硤  ?梢耘渲a href="http://www.it165.net/edu/ewl/" target="_blank" class="keylink">瀏(liu)覽器,以插(cha)件(jian)的(de)形wen)郊撲閔 瀉  lai)確定應該把請求(qiu)發送給哪(na)個代理服務(wu)器

  CARP對代理服務(wu)器做出(chu)的(de)確定性解析說(shuo)明它(ta)無須向所有(you)鄰(lin)居發送查詢,這也就意味著這種方法所需發送的(de)緩存間報文會比(bi)較少。隨著越來(lai)越多的(de)代理服務(wu)器添加到jiao)渲孟低tong)中來(lai),緩存系統(tong)集群的(de)規模會變得相當大(da)。但CARP的(de)一個缺點就是,如果某個代理服務(wu)器不可用了,就要重新(xin)修改散列表以反映這種變化,而(er)且必(bi)須重新(xin)配置現zhi)媧矸wu)器上的(de)內容。如果代理服務(wu)器經(jing)常(chang)崩潰的(de)話,這麼(me)做的(de)開銷可能會很高。相反,ICP代理服務(wu)器中xie)嬖詰de)冗余內容就表示它(ta)不需要重新(xin)配置。另(ling)一個潛在的(de)問(wen)題是,由于CARP是個新(xin)協議,CARP集群中可能不會包(bao)含那些(xie)現zhi)嫻de)、只運行(xing)ICP協議的(de)代理服務(wu)器

  CARP重定向方法要完成下列任(ren)務(wu)︰保存一個參與CARP的(de)代理服務(wu)器列表。周期(qi)性地查詢這些(xie)代理服務(wu)器,看看ci)ta)們(men)是否仍然活躍;為每個參與的(de)代理服務(wu)器計算一個散列函數。散列函數的(de)返(fan)回值(zhi)要考慮此(ci)代理所能處理的(de)負(fu)載量;定義一個獨(du)立的(de)散列函數,這個函數會根據所請求(qiu)Web對象的(de)URL返(fan)回一個數字;將URL散列函數的(de)結果代入代理服務(wu)器的(de)散列函數,得到一個數字陣列。這些(xie)數字中的(de)最大(da)值(zhi)決定了要為這個URL使用的(de)代理服務(wu)器。由于算出(chu)來(lai)的(de)值(zhi)是確定的(de),所以對同一個Web對象的(de)後繼請求(qiu)會被轉(zhuan)發給同一台代理服務(wu)器

  以上4項任(ren)務(wu)可以由瀏(liu)覽器、插(cha)件(jian)執(zhi)行(xing),也bu)梢栽諞桓鮒屑浞wu)器上計算。為每個代理服務(wu)器集群創建一個表,表中列出(chu)了集群中的(de)所有(you)服務(wu)器。表中的(de)每個條目都應該包(bao)含全(quan)局參wen)de)相關的(de)信息(xi)。比(bi)re)紓 fu)載因子、生(sheng)存時間(TTL)、倒計數值(zhi)和應該以何頻率查詢成員之(zhi)類的(de)全(quan)局參wen)8fu)載因子說(shuo)明機(ji)器可以處理ji)嗌俑fu)載,這取決于那台機(ji)器的(de)CPU速度(du)和硬(ying)盤(pan)容量。可以通過RPC接口對此(ci)表進(jin)行(xing)遠程維(wei)護。只要表中的(de)字段被RPC修改了,就可以使其(qi)對下游的(de)客戶端和代理可shan)jian),或將其(qi)發布給它(ta)們(men)。這項發布工作是在HTTP中進(jin)行(xing)的(de),這樣,所有(you)的(de)客戶端或代理服務(wu)器就都可以在不引入另(ling)一種zhi)砑湫 櫚de)基礎上消化表格信息(xi)了。客戶端和代理服務(wu)器只用了一個知名URL來(lai)獲取這張表

  所使用的(de)散列函數必(bi)須能夠確保Web對象在參與的(de)代理服務(wu)器間是統(tong)計分(fen)布的(de)。應該用me)矸wu)器的(de)負(fu)載因子來(lai)確定分(fen)配給那台代理的(de)Web對象的(de)統(tong)計概率

  總之(zhi),CARP協議允許(xu)將一組代理服務(wu)器看成單個的(de)集群緩存,而(er)不是(像ICP中那樣的(de))一組相互合(he)作但又相互獨(du)立的(de)緩存服務(wu)器。確定的(de)請求(qiu)解析路徑(jing)會在一跳內找(zhao)到某個特定的(de)Web對象的(de)家。這樣會降dang)CP在一組代理服務(wu)器中查找(zhao)Web對象時常(chang)會產(chan)生(sheng)的(de)代理間流量。CARP還可以避(bi)免在不同的(de)代理服務(wu)器上存儲Web對象的(de)多個副本的(de)問(wen)題,這樣做的(de)優(you)點是緩存系統(tong)集群的(de)Web對象存儲容量較大(da),缺點是任(ren)意一個代理的(de)故障都要改寫(xie)現zhi)媧淼de)部(bu)分(fen)緩存內容

【jing) 謀淨捍嫘 欏/p>

  前面我們(men)討論(lun)了ICP,這個協議允許(xu)代理緩存向兄(xiong)弟(di)緩存查詢文件(jian)是否存在。但設計ICP時考慮的(de)是HTTP/0.9協議。因此(ci),向兄(xiong)弟(di)緩存查詢資源是否存在時,只允許(xu)緩存發送URL。HTTP版本1.0和1.1引入了很多新(xin)的(de)請求(qiu)首部(bu),這些(xie)首部(bu)可以和URL一起用來(lai)確定文件(jian)是否匹配。因此(ci),只在請求(qiu)中發送URL可能無法得到精確fan)南 /p>

  HTCP(超文本緩存協議)允許(xu)兄(xiong)弟(di)緩存之(zhi)間通過URL和所有(you)的(de)請求(qiu)及響應首部(bu) 來(lai)相互查詢文檔(dang)是否存在,以降dang)痛砦竺械de)可能。而(er)且HTCP允許(xu)兄(xiong)弟(di)緩存監視或請求(qiu)在對方的(de)緩存中添加或刪jing) 械de)文檔(dang),並修改對方已緩存文檔(dang)的(de)緩存策略

  HTCP事(shi)務(wu)是另(ling)一個對象發現協議。如果附近的(de)緩存中有(you)這個文檔(dang),發起請求(qiu)的(de)緩存可以打(da)開一條到此(ci)緩存的(de)HTTP連接,以獲取那個文檔(dang)的(de)副本jin)CP和HTCP事(shi)務(wu)之(zhi)間的(de)區別體現在請求(qiu)和響應細(xi)節上

  HTCP報文的(de)結構(gou)如下圖所示,首部(bu)中包(bao)含了報文的(de)長度(du)和報文版本jin)J薟bu)分(fen)開始ji)鞘莩?du),包(bao)含了opcode、響應代碼(ma)、一些(xie)標(biao)記及ID,最後是實際(ji)的(de)數據。可選的(de)認(ren)證部(bu)分(fen)跟在Data小節的(de)後面

  報文字段的(de)詳細(xi)內容如下所述

  a、首部(bu)

  Header部(bu)分(fen)包(bao)含32位的(de)報文長度(du),8位的(de)主要協議版本和8位的(de)次要協議版本jin)1ㄎ某?du)包(bao)含所有(you)首部(bu)、數據和認(ren)證部(bu)分(fen)的(de)長度(du)

  b、數據

  Data部(bu)分(fen)包(bao)含了HTCP報文。數據組件(jian)如下表所示

  下表列出(chu)了HTCP Opcode代碼(ma)及其(qi)相應的(de)數據類型

  HTCP報文的(de)認(ren)證部(bu)分(fen)是可選的(de),下表列出(chu)了它(ta)的(de)認(ren)證組件(jian)

  SET報文允許(xu)緩存請求(qiu)對已緩存文檔(dang)的(de)緩存策略進(jin)行(xing)修改。下表給出(chu)了可以在SET報文中使用的(de)首部(bu)

  HTCP允許(xu)通過查詢報文將請求(qiu)和響應首部(bu)發送給兄(xiong)弟(di)緩存,這樣可以降dang)突捍娌檠 械de)錯誤命中xin)省M jin)一步允許(xu)在兄(xiong)弟(di)緩存間交換策略信息(xi),HTCP還可以提高兄(xiong)弟(di)緩存之(zhi)間的(de)合(he)作能力(li)

立博平台官网

    Tag標(biao)簽︰前端  
    • 立博平台官网

    About IT165 - 廣告服務(wu) - 隱私聲明 - 版權申明 - 免責條款 - 網站地圖 - 網友投稿(gao) - 聯系方式
    本站內容來(lai)自于互聯網,僅供用于網絡技ji)躚 學習中xing)胱zun)循相關法律法規
    立博平台官网 | 下一页