深入web求過程隨著Web2.0時代的到來互聯(lián)網(wǎng)網(wǎng)絡(luò)架構(gòu)已經(jīng)從傳統(tǒng)C S_第1頁
深入web求過程隨著Web2.0時代的到來互聯(lián)網(wǎng)網(wǎng)絡(luò)架構(gòu)已經(jīng)從傳統(tǒng)C S_第2頁
深入web求過程隨著Web2.0時代的到來互聯(lián)網(wǎng)網(wǎng)絡(luò)架構(gòu)已經(jīng)從傳統(tǒng)C S_第3頁
深入web求過程隨著Web2.0時代的到來互聯(lián)網(wǎng)網(wǎng)絡(luò)架構(gòu)已經(jīng)從傳統(tǒng)C S_第4頁
深入web求過程隨著Web2.0時代的到來互聯(lián)網(wǎng)網(wǎng)絡(luò)架構(gòu)已經(jīng)從傳統(tǒng)C S_第5頁
免費預(yù)覽已結(jié)束,剩余18頁可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、隨著 Web2.0 時代的到來,互聯(lián)網(wǎng)的網(wǎng)絡(luò)架構(gòu)已經(jīng)從傳統(tǒng)的 C/S 架構(gòu)轉(zhuǎn)變到更加方便快捷的 B/S 架/S 架構(gòu)大大簡化了用戶使用網(wǎng)絡(luò) 應(yīng)用上的難度,這種人人都能上網(wǎng),人人都能使用網(wǎng)絡(luò)上提供的服務(wù)的方法也進一步推動了互聯(lián)網(wǎng)的繁榮。B/S 的架構(gòu)從兩方面帶來了好處:1.客戶端使用的的瀏覽器(Browse)。由于瀏覽器具有性,它不需要特殊的 配置和網(wǎng)絡(luò)連接,有效的了不同服務(wù)提供商提供給用戶使用服務(wù)的差異性。另外最重要的一點是基于瀏覽器的交互特性使用的用戶使用非常簡化和用戶行為的可 繼承行非常強,也就是用戶只要第一次學(xué)會了上網(wǎng),不管使用的是哪個應(yīng)用,一旦學(xué)會了, 再使用其他互聯(lián)網(wǎng)服務(wù)時同樣積累了

2、使用經(jīng)驗,因為它們都是基于同樣的瀏覽器操作界面。2.服務(wù)端(Server)基于的 HTTP 協(xié)議。和傳統(tǒng)的 C/S 架構(gòu)使用自定義的應(yīng) 用層協(xié)議不同,B/S 架構(gòu)使用的都是的 HTTP 協(xié)議。使用的HTTP 協(xié)議也會給服務(wù)提供商簡化了開發(fā)模式,使得服務(wù)器開發(fā)者可以采用相對規(guī)范的開 發(fā)模式,這樣可以開發(fā)成本,如使用的的HTTP 協(xié)議,所以基于 HTTP 協(xié)議的 服務(wù)器就有很多如:Apache、IIS、Nginx、Tomcat、Js 等,這些服務(wù)器可以直接拿來使用,不需要服務(wù)開發(fā)者單獨來開發(fā),不僅如 此,連開發(fā)服務(wù)的通用框架都不需要單獨開發(fā),服務(wù)開發(fā)者只需要關(guān)注提供服務(wù)的應(yīng)用邏輯,其他一切和框架都

3、可以直接拿來使用,所以 B/S 這種架構(gòu)同樣使 得服務(wù)器提供者簡化了開發(fā),使得越來越多的互聯(lián)網(wǎng)服務(wù)出現(xiàn)。B/S 網(wǎng)絡(luò)架構(gòu)不管對普通用戶的使用還是對服務(wù)的開發(fā)都帶來了好處,作為互聯(lián)網(wǎng)主要參與者中的兩個人群:服務(wù)使用者和服務(wù)開發(fā)者都降低了學(xué)習(xí)成本。 但是作為互聯(lián)網(wǎng)應(yīng)用的開發(fā)者還是要清楚當用戶從瀏覽器里點擊某個開始到的服務(wù)返回結(jié)果到瀏覽器這個過程到底發(fā)生什么,這其中還需要哪些技術(shù) 來配合等,這些底層還需要進一步掌握。所以本章將為你描述這一過程的工作原理,他將涉及到瀏覽器的基本行為和HTTP 協(xié)議的過程、DNS 如何到對應(yīng)的 IP 地址、CDN 又是如何工作和設(shè)計的一級瀏覽器如何渲染出返回的結(jié)果等。B

4、/S 網(wǎng)絡(luò)架構(gòu)概述B/S 的網(wǎng)絡(luò)架構(gòu)從前端到后端都得到了簡化,都是基于的應(yīng)用層協(xié)議 HTTP來交互數(shù)據(jù),與大多數(shù)傳統(tǒng) C/S 互聯(lián)網(wǎng)應(yīng)用程序采用的長連接的交互模 式不同, HTTP 協(xié)議采用無狀態(tài)的短連接的通信方式,通常情況下,一次請求就完成了一次數(shù)據(jù)交互,通常也是對應(yīng)一個業(yè)務(wù)邏輯,然后這次通信連接就斷開了。 采用這種方式是為了能夠同時服務(wù)的用戶,因為當前互聯(lián)網(wǎng)應(yīng)用每天都會出來上億級別的用戶請求,不可能每個用戶一次后就一直保持住這個連接。關(guān)于HTTP 的詳細細節(jié)在后面 HTTP 協(xié)議一節(jié)再詳細介紹?;?HTTP 協(xié)議這種協(xié)議的本身的特點,目前的 B/S 的網(wǎng)絡(luò)架構(gòu)大多采用類似于下圖所示的架構(gòu)

5、設(shè)計,既要滿足海量用戶請求,又要保持用戶請求的快速響應(yīng),所以使得現(xiàn)在的網(wǎng)絡(luò)架構(gòu)也越來越復(fù)雜。當一個用戶在瀏覽器里輸入首先他會要請求 DNS 把這個這個 URL 時,將會發(fā)生很多操作,成對應(yīng)的 IP 地址,然后根據(jù)這個 IP 地址在互聯(lián)網(wǎng)上找到這個 IP 地址對應(yīng)的服務(wù)器, 向這個服務(wù)器發(fā)起一個 get 請求,由這個服務(wù)器決定返回默認的數(shù)據(jù)資源給的用戶,在服務(wù)器端實際上還有很復(fù)雜的業(yè)務(wù)邏輯:服務(wù)器可能有很多臺,到底指 定那臺服務(wù)器來處理請求,所以需要一個負載均衡設(shè)備來平均分配所有用戶的請求;還有要請求的數(shù)據(jù)是存在分布式緩存里還是一個靜態(tài)文件,還是在數(shù)據(jù)庫里;當 數(shù)據(jù)返回到瀏覽器里時,瀏覽器數(shù)據(jù)發(fā)

6、現(xiàn)還有一些靜態(tài)資源如 css、js 或者時又會發(fā)起另外的HTTP 請求,而這些請求很可能會在 CDN 上,那么 CDN 服務(wù)器又會處理這個用戶的請求,大體上一個用戶請求會涉及到這么多的操作。每一個細節(jié)都會影響到這個請求最終是否會成功。不絡(luò)架構(gòu)如何變化,但是始終有一些固定不變的原則需要遵守:互聯(lián)網(wǎng)上所有資源都要用一個 URL 來表示。URL 就將資源定位符,顧名思義。如果你要發(fā)布一個服務(wù)或者一個資源到互聯(lián)網(wǎng)上,讓別人能夠到,那么你首先必須要有一個世界上獨一無二的 URL。不要小看這個 URL,他包含了幾乎整個互聯(lián)網(wǎng)的架構(gòu)精髓。必須基于 HTTP 協(xié)議與服務(wù)端交互。不管你要的是國內(nèi)的還是國外的、是

7、文本數(shù)據(jù)還是流,都必須按照套路出牌,也就是都采用打招呼的方式,這樣人家才會明白你要的是什么。數(shù)據(jù)展示必須在瀏覽器里。當你獲取到數(shù)據(jù)資源,要能正確展示必須在瀏覽器上才能恢復(fù)他的容貌,你用其他工具只能占有的,不能獲取他的。只要滿足上面的幾點基本上一個互聯(lián)網(wǎng)應(yīng)用就能正確的運轉(zhuǎn)起來了,當然這里面還有好多細節(jié),這些細節(jié)將分別在后面的小節(jié)里詳細講解。如何發(fā)起一個請求如何發(fā)起一個 HTTP 請求?這個問題似乎既簡單又復(fù)雜,簡單是當在瀏覽器里輸入一個 URL 時,敲下回車后這個 HTTP 請求就發(fā)起了,很快你就會 看到這個請求的返回結(jié)果。復(fù)雜的是能不能不借助瀏覽器也能發(fā)起請求,這里的不借助有兩層含義,一是我能

8、不能自己組裝一個符合 HTTP 協(xié)議的數(shù)據(jù)包,二 是處理瀏覽器還能有哪些方式也能簡單的發(fā)起一個 HTTP 請求。下面就按照這兩層含義來解釋如何發(fā)起一個 HTTP 請求。如何發(fā)起一個 HTTP 請求和如何建立一個 socket 連接區(qū)別不大,只不過outputStream.write 寫的二進制字節(jié)數(shù)據(jù)格式要符合 HTTP 協(xié)議。瀏覽器在建立socket 連接之前,必須根據(jù)地址欄里輸入的URL 中的DNS出 IP 地址,再根據(jù)這個 IP 地址和默認 80 端口和服務(wù)器建立 socket 連接,然后瀏覽器根據(jù)這個 URL 組裝成一個 get 類型的 HTTP 請求頭,通過 outputStream

9、.write發(fā)送到目標服務(wù) 器,服務(wù)器等待 inputStream.read 返回數(shù)據(jù),最后斷開這個連接。當然了不同瀏覽器在如何使用這個已經(jīng)建立好的連接,是根據(jù)什么規(guī)則來管理連接,有各種不同實現(xiàn)方法。一句話總結(jié),發(fā)起一個 HTTP 請求的過程就是建立一個 socket 通信的過程。既然發(fā)起一個 HTTP 連接本質(zhì)上就是建立一個socket 連接,那么完全可以模擬瀏覽器來發(fā)起 HTTP 請求,這很好實現(xiàn),也有很多方法現(xiàn)實,如 HttpCnt就是一個開源的通過程序?qū)崿F(xiàn)的處理 HTTP 請求的工具包。,當然如果你對 HTTP協(xié)議的數(shù)據(jù)結(jié)構(gòu)非常熟悉的話,你完全可以自己再實現(xiàn) 另外一個 HttpC甚至可

10、以自己寫個簡單的瀏覽器。nt,如下是一個基本的 HttpCnt 的調(diào)用示例:HttpCnt httpCnt = createHttpCnt();處理 Java 中使用非常普遍的 HttpCnt,還有很多類似的工具,如 Linux 中的CURL 命令,通過 curl + URL 就可以簡單的發(fā)起一個 HTTP 請求,非常方便。如 curl “http的 html 數(shù)據(jù),如下:/item.htm?id=1264 可以返回這個頁面也可以查看這次的 HTTP 情況頭的信息,加上-I 選項,如下:tMethodtMethod;StringName = Switcher.;tMethod = newtMe

11、thod(Name);tMethod.addRequestHeader(“Content-Type”, “application/x-www-form-urlencoded; charset=GBK”);for (FilterData filterData : filterDatas) tMethod.addParameter(“ip”, filterData.ip);tMethod.addParameter(“count”, String.valueOf(filterDount);try httpCnt.executeMethod(tMethod);tMethod.getResponseBo

12、dyAsString(); catch (Exception e) logger.error(e);還可以在方法這個 URL 時增加 HTTP 頭,通過-H選項實現(xiàn),如下圖所示:缺少下所示:信息,返回 302 狀態(tài)碼,必須增加才能正確方式該,如Http 協(xié)議B/S 網(wǎng)絡(luò)架構(gòu)的是 HTTP 協(xié)議,掌握 HTTP 協(xié)議對一個從事互聯(lián)網(wǎng)工作的程序員來說非常重要,也許你已經(jīng)非常熟悉 HTTP 協(xié)議,這里除了再簡單介紹 HTTP協(xié)議的基本知識外,還將側(cè)重介紹一下目前在實際使用中的一些心得,后面將以實際使用的場景為例介紹。要理解 HTTP 協(xié)議,最重要的就是要熟悉 HTTP 協(xié)議中的 HTTP Heade

13、r,是 HTTP Header 控制著互聯(lián)網(wǎng)上成千上萬的用戶的數(shù)據(jù)的傳輸。最關(guān)鍵的是它控制著用戶瀏覽器的渲染行為和服務(wù)器的執(zhí)行邏輯,例如:當服務(wù)器沒有用戶請求的數(shù)據(jù)-H “a=sd0/BjeZulwCAfIdAHkzZZqC; _t_track=42.1320938379988839;”HTTP/1.1 200 OKDate: Sat, 25 Feb 2012 08:41:20 GMTServer: ApacheLast-Modified: Thu, 01 Jan 1970 00:00:00 GMTVary: Accept-EncodingContent-Type: text/html;cha

14、rset=GBK HYPERLINK mailto:junshanv101055.sqa.cm4 junshanv101055.sqa.cm4 admin$ curl -I “http:/:9999/reitory.htm”就會返回一個 404 的狀態(tài)碼,告訴瀏覽器沒有要請求的數(shù)據(jù),通常瀏覽器就會展示一個非常不愿意看到的該頁面不存在的錯誤信息。常見的 HTTP 請求頭常見的 HTTP 響應(yīng)頭要看一個 HTTP 請求的請求頭和響應(yīng)頭,可以通過很多瀏覽器插件來看,在FireFox 有、Chrome、IE 等。HTTP 狀態(tài)碼查看 HTTP 信息的工具狀態(tài)碼說明200客戶端請求成功302臨時跳轉(zhuǎn),跳

15、轉(zhuǎn)的地址通過Location 指定400403服務(wù)器收到請求,但是提供服務(wù)404請求的資源不存在500服務(wù)器發(fā)生不可預(yù)期的錯誤/客戶端請求有語法錯誤,不能被服務(wù)器識別響應(yīng)頭說明Server使用的服務(wù)器名稱Server: Apache/1 3 6 (Unix)Content-Type用來指明發(fā)送給接收者的實體正文的類型,如 Content-Type:text/html;charset=GBKContent-Encoding請求報頭Accept-Encoding 對應(yīng),告訴瀏覽器服務(wù)端采用的是什么壓縮編碼Content-Language描述了資源所用的自然語言,與Accept-Language 對

16、應(yīng)Content-Length指明實體正文的長度,以字節(jié)方式的十進制數(shù)字來表示Keep-Alive保持連接的時間Keep-Alive: timeout=5, max=120請求頭說明Accept-Charset請求報頭域用于指定客戶端接受的字符集Accept-Encoding是用于指定可接受的內(nèi)容編碼,如Accept-Encoding:gzip deflateAccept-Language用于指定一種自然語言,如AcceHost用于指定被請求資源的 ernet 主機和端,如 Host:User-Agent客戶端將它的操作系統(tǒng)、瀏覽器和其它屬性告訴服務(wù)器Connection當前連接是否保持,如C

17、onnection: Keep-Alive有時候需要知道一個 HTTP 請求到底返回什么數(shù)據(jù),或者沒有返回數(shù)據(jù)想知道什么原因,這時候就需要借助一些工具來查詢這次請求的詳細信息,到底HTTP 請求頭有些什么,響應(yīng)頭又。在 Windows 下現(xiàn)在主流的瀏覽器都有很多工具來查看當前的請求的詳細 HTTP 協(xié)議的信息,如下 Firefox 瀏覽器下,使用最多的是 Firebug,如下所示:還有一個 HttpFox 工具提供信息更全,如下圖所示:所有 HTTP 相關(guān)信息都可以一目了然。Chrome 瀏覽器下也有一些類似的工具,自帶的調(diào)試工具如下:同樣可以查看到這次請求的相關(guān)信息。Chrome 下也有類似

18、的 Firebug 工具,但是還不夠完善。IE 從 7 開始也提供了類似的 HTTP 調(diào)試工具,如自帶的開發(fā)命令打開,HttpFox 插件也有 IE 版本,可以安裝一下。工具可以通過 F12瀏覽器緩存機制瀏覽器緩存是一個比較復(fù)雜但是又比較重要的一個機制通常在瀏覽一個頁面時發(fā)現(xiàn)有異常情況下,通??紤]的就是是不是瀏覽器做了緩存,所以的做法就是 Ctrl+F5 重新請求一次這個頁面,重新請求的頁面肯定是 般 的頁面。為什么 Ctrl+F5 就一定能夠請求到?jīng)]有緩存的頁面呢?首先是在瀏 覽器端,如果是 Ctrl+F5 刷新頁面,那么瀏覽器會直接向目標 URL 發(fā)送請求,而不會使用瀏覽器緩存的數(shù)據(jù),其次

19、即使請求發(fā)送到服務(wù)端,那么也有可能到的是緩存的數(shù)據(jù),比如在的應(yīng)用服務(wù)器的前端部署一個緩存服務(wù)器,如 Varnish,的那么 Varnish 也可能直接去的是緩存數(shù)據(jù)。所以為了保 證用戶能夠看到數(shù)據(jù),必須通過 HTTP 協(xié)議來控制。如下圖所示,當Ctrl+F5 刷新一個頁面時,在 HTTP 的請求頭中會增加一些請求頭告訴服務(wù)端,我要獲取的數(shù)據(jù)而不是緩存。這次請求時沒有發(fā)送到服務(wù)端,使用的是瀏覽器緩存數(shù)據(jù),如果 Ctrl+F5 后,如下圖:這次請求時從服務(wù)端返回的數(shù)據(jù),最重要的是在請求頭中增加了兩個請求項Pragma:no-cache 和 Cache-Control:no-cache。為什么增加了

20、這個兩個配置項,它們HTTP 頭。作用,后文將詳細解釋與緩存相關(guān)的1. Cache-Control/Pragma這個HTTP Head 字段用于指定所有緩存機制在整個請求/響應(yīng)鏈中必須 服從的指令,如果知道該頁面是否緩存,不僅可以控制瀏覽器還可以控制和HTTP 協(xié)議相關(guān)的緩存或服務(wù)器。HTTP Head 字段有一些控制值,這些值有如下含義:Cache-Control 這個請求字段被各個瀏覽器支持較好,而且他的優(yōu)先級也比較高,如果他和其他一些請求字段(如 Expires )同時出現(xiàn)時,Cache-Control會覆蓋其他的字段。Pragma 這個字段的作用和 Cache-Control 有點類似

21、,它也是在 HTTP 頭中包含一個特殊的指令,使得相關(guān)的服務(wù)器來遵守,最常用的就是Pragma:no-cache,它和 Cache-Control:no-cache 作用是一樣的。可選值說明public所有內(nèi)容都將被緩存,在響應(yīng)頭中設(shè)置private內(nèi)容只緩存到私有緩存中,在響應(yīng)頭中設(shè)置no-cache所有內(nèi)容都不會被緩存,在請求頭和響應(yīng)頭中設(shè)置no-store所有內(nèi)容都不會被緩存到緩存或ernet 臨時文件中,在響應(yīng)頭中設(shè)置must-revalidation/proxy-revalidation如果緩存的內(nèi)容失效,請求必須發(fā)送到服務(wù)器/以進行重新驗證,在請求頭中設(shè)置max-age=緩存的內(nèi)容

22、將在秒后失效, 這個選項只在 HTTP 1 1 可用, 并如果和 Last-Modified 一起使用時, 優(yōu)先級較高,在響應(yīng)頭中設(shè)置Expires 1.Expires 通常使用的格式是:Expires:Sat, 25 Feb 2012 12:22:17 GMT,后面跟著一個日期時間,如果頁服務(wù)器發(fā)起請求。2.Last-Modified/Etag一般是服務(wù)端在響應(yīng)頭中返回一個 Last-Modified 字段,告訴瀏覽器這個 頁面的最后修改時間 Last-Modified:Sat, 25 Feb 2012 12:55:04 GMT,瀏覽器再次請求時在請求頭中增加一 個 If-Modified-

23、Since:Sat, 25 Feb 2012 12:55:04 GMT 字段,詢問當前緩存的頁面是否,如果是的就返回 304 狀態(tài)碼,告訴瀏覽器是的,服務(wù)器也不會傳輸新的數(shù)據(jù)。DNS知道互聯(lián)網(wǎng)都是通過 URL 來發(fā)布和請求資源的,而 URL 中的需要成IP 地址才能與的工作范疇。主機建立連接,如何將成 IP 地址就是屬于 DNS可以毫不夸張的說,雖然平時上網(wǎng)感覺不到 DNS的存在,但是一旦 DNS出錯,可能會導(dǎo)致非常嚴重的互聯(lián)網(wǎng)。目前世界上整個互聯(lián)網(wǎng)有幾個都會非常嚴重。DNS 根服務(wù)器,任何一臺根服務(wù)器宕掉DNS過程與這個Last-Modified 字段有類似的功能的還有一個 Etag 字段,

24、這個字段的作用是服務(wù)端給每個頁面分配一個唯一的,然后通過這個來區(qū)分當前的這個頁面是否是的。這種方式比 Last-Modified 更加靈活,但是在后端的 Web 服務(wù)器有多臺時比較難處理,因為每個 Web 服務(wù)器都要記住的所有資源,否則瀏覽器反射這個就沒有意義了。Last-Modified 這個字段一般用于表示一個服務(wù)器上的資源,靜態(tài)(靜態(tài)內(nèi)容自動加上 Last-Modified 字段)或者動態(tài)的內(nèi)容(如 Servlet 提供了一個 getLastModified 方法用于檢查某個動態(tài)內(nèi)容是否已經(jīng)更新)的最后修改時間,通過這個最后修改時間來判斷當前請求的資源是否是 的。面在超過這個時間值后,緩

25、存的內(nèi)容將失效,也就是瀏覽器在發(fā)出請求之前檢查這個頁面的這個字段,看該頁面是否已經(jīng)過期了,過期了就重新向下面是 DNS的主要請求過程實例圖:DNS如上圖所示,當一個用戶在瀏覽器輸入 時,DNS個步驟。這個過程大體描述如下:將會有將近 10當用戶在瀏覽器中輸入并敲下回車后,第一步,瀏覽器會檢查瀏覽器緩存中有沒有這個對應(yīng)的過的 IP 地址,如果緩存命中的話,這個過程 就將結(jié)束。瀏覽器緩存也是有限制的,不僅瀏覽器緩存大小有限制,而且緩存的時間也是有限制的,通常情況下有幾分鐘到幾小時不等,被緩存的時間限制 可以通過 TTL 屬性來設(shè)置,這個緩存時間太長和太短都不好,如果緩存太長的話,一旦被到的 IP

26、有變化,會導(dǎo)致被客戶端緩存的無法到變化后 的 IP 地址,會導(dǎo)致該不能正常的,這段時間內(nèi)有可能會有一部分用戶無法你的一次。如果時間設(shè)置太短的話,會導(dǎo)致用戶每次你的都要 重新,從前面的圖中可以看出還是一個很復(fù)雜的過程。如果用戶的瀏覽器緩存中沒有命中,瀏覽器會查找操作系統(tǒng)緩存中是否有這個域名對應(yīng)的 DNS結(jié)果。其作系統(tǒng)也會有一個的過程,在 windows中可以通過 C:WindowsSystem32driversetchosts 文件來設(shè)置,你可以將任何到任何能夠的 IP 地址,如果你在這里指定了一個對應(yīng)的IP 地址,那么瀏覽器會首先使用這個 IP,如在測試時可以將一個到一臺測試服務(wù)器上,這樣就不

27、 用修改任何代碼就能測試到單獨服務(wù)器上的代碼業(yè)務(wù)邏輯是否正確。正是這種本地 DNS的規(guī)程,就有通過修改你會被劫持。的把特定的到他指 定的 IP 地址,導(dǎo)致這些這種情況再早期的 window 版本中出現(xiàn)過很嚴重,而且對一般不太會有電腦知識的用戶來說,出現(xiàn)問題后很難發(fā)現(xiàn),即使發(fā)現(xiàn)也很難自己解決,所以在windows7 中將 hosts 文件設(shè)置成了只讀,防止這個文件被輕易修改。在 linux 中這個配置文件是/etc/named.conf,修改這個文件可以達到同樣的目的,當?shù)竭@個配置文件中的某個,操作系統(tǒng)會在緩存中緩存這個結(jié)果,緩存的時間同樣是受這個的失效時間和這個緩存的空間大小控制。前面這兩個步

28、驟都是在本機完成的,所以在上圖中沒有標識出來。到這里還沒有涉及到真正的會真正請求服務(wù)器,如果在本機中仍然無法完成的的話,就服務(wù)器來這個了。第 3 步,如何、怎么知道服務(wù)器呢?在的網(wǎng)絡(luò)配置中都會有一項 DNS服務(wù)器地址,這個地址就是設(shè)置如果前面所說的兩個過程的無法時要怎么辦,操作系統(tǒng)就會把這個發(fā)送給這里設(shè)置的 LDNS,也就是本地區(qū)的服務(wù)器。這個 DNS 通常都是提供給你本地互聯(lián)網(wǎng)接入的一個 DNS服務(wù),如你 是在學(xué)校接入上網(wǎng)的話,那么你的 DNS 服務(wù)器肯定在你學(xué)校,如果你是在一個小區(qū)接入互聯(lián)網(wǎng)的話,那個這 DNS 就是提供給你接入互聯(lián)網(wǎng)的應(yīng)用提供商,是電信 或者提供商也就是通常所說的 SPA

29、。那么這個 DNS 通常也會在你所在城市的某個角落,通常離也不是很遠。要查詢這個地址在 Windows 中可以通過查詢,如下圖:ipconfigWindows 查詢 DNS ServerLinux 下可以通過如下方式查詢配置的 DNS Server,如下圖所示:Linux 下查詢DNS Server這個專門的服務(wù)器,性能都會很好,他們一般都會緩存結(jié)果,失效當然緩存時間是受這個的主要。大約 80%的的失效時間控制的,一般緩存空間不是影響都在這里就已經(jīng)完成了。所以 LDNS 主要承擔了的工作。第 4 步,如果 LDNS 仍然沒有命中的話,就直接到 Root Server。服務(wù)器請求第 5 步,根服

30、務(wù)器返回給本地服務(wù)器一個所查詢域的主服務(wù)器等全球(gTLD Server) 地址。gTLD 是國際頂級只有 13 臺左右。服務(wù)器如:、第 6 步,本地發(fā)送請求。服務(wù)器 (Local DNS Server) 再向上一步返回的 gTLD 服務(wù)器第 7 步,接受請求的 gTLD 服務(wù)器查找并返回此對應(yīng)的 Name Server服務(wù)器,如你在某個服務(wù)器的地址,這個 Name Server 通常就是你的服務(wù)提供商申請的,那么這個任務(wù)就是由這個提供商的服務(wù)器來。第 8 步,Name Server服務(wù)器會查詢的和 ip 的關(guān)系表,正常情況下都根據(jù)服務(wù)器 。得到目標 ip,連同一個 TTL 值,返回給 DNS

31、 Server第 9 步,返回該對應(yīng)的ip 和 TTL 值,Local DNS Server 會緩存這個和ip 的對應(yīng)關(guān)系,緩存的時間由 TTL 值控制。第 10 步,把緩存中,的結(jié)果返回給用戶機器,用戶機器也根據(jù) TTL 值緩存在本地 os過程結(jié)束。在實際的 DNS過程中,可能還不止這個 10 個步驟,如 Name Server 也可能有多級,或者有一個 GTM 來負載均衡控制,這都有可能會影響的過程。過程Linux 和 Windows 下都可以用 nslookup 命令來查詢的示:結(jié)果,如下圖所Nslookup 查詢結(jié)果Linux 系統(tǒng)中還可以使用 dig 命名來查詢 DNS 的過程,如下

32、所示: HYPERLINK mailto:junshanv101055.sqa.cm4 junshanv101055.sqa.cm4 admin$ dig; DiG 9.3.6-P1-RedHat-9.3.6-4.P1.el5 ; global options: prcmd; Got answer:; -HEADERHEADER- opcode: QUERY, sus: NX, id: 58602; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0; QUESTION SECTION:;prcmd. IN A;

33、AUTHORITY SECTION:. 10800 IN SOA . nstl. 2012021200 1800 900 604800 86400; Query time: 208 msec; SERVER: 54#53(54); WHEN: Sun Feb 12 19:20:59 2012; MSG SIZE rcvd: 101; Query time: 5 msec; SERVER: 54#53(54); WHEN: Sun Feb 12 19:19:05 2012; MSG SIZE rcvd: 201QUESTION SECTION:部分表示當前查詢的是一個A,ANSWER SECTI

34、ON:部分返回了這個有 CNAME 到 ,給返回了這個的 ip 地址。對應(yīng)還可通過增加+trace 參數(shù)可以這個的等級機構(gòu),如下所示: HYPERLINK mailto:junshanv101055.sqa.cm4 junshanv101055.sqa.cm4 admin$ dig+trace; DiG 9.3.6-P1-RedHat-9.3.6-4.P1.el5 +trace; global options: prcmd. 449398 IN NS . 449398 IN NS . 449398 IN NS . 449398 IN NS . 449398 IN NS . 449398 IN

35、NS . 449398 IN NS . 449398 IN NS . 449398 IN NS . 449398 IN NS . 449398 IN NS . 449398 IN NS . 449398 IN NS .; Received 272 bytes from 54#53(54) in 0 mscom. 172800 IN NS .com.172800INNS.com.172800INNS.com.172800INNS.com.172800INNS.com.172800INNS.com.172800INNS.com.172800INNS.com.172800INNS.com.17280

36、0INNS.com.172800INNS.com.172800INNS.com.172800INNS.; Received492 bytes from 29#53() in 607 ms.172800 IN NS.172800 IN NS.172800 IN NS.; Received134 bytes from 0#53() in 250 ms1800 IN CNAME. 86400 IN NS. 86400 IN NS. 86400 IN NS.; Received169 bytes from 9#53() in 0 ms上面清楚顯示了整個是如何發(fā)起和的過程。從根(.)到 gTLDServ

37、er(.com.)再到 Name Server(.)的整個過程顯示出來了。從上面還可以看出 DNS 的服務(wù)器有多個備份,可以從任何一臺查詢到結(jié)果。如何失效緩存的知道 DNS后會緩存結(jié)果,其中主要在兩個地方緩存結(jié)果,一個是 Local DNS Server,另外一個用戶的本地機器。這兩個緩存都是 TTL 值和本機緩存大小控制,但是最大緩存時間是 TTL 值,基本上 Local DNS Server 的緩存時間就是 TTL 控制,很難有人工介入,但是緩存掉。的本機緩存可以通過如下方式Windows 下可以通過在命令行模式下執(zhí)行 ipconfig /flushdns 來刷新緩存,如下圖所示:Wind

38、ows 清除 DNS 緩存Linux 下可以通過/etc/init.d/nscd restart 來清除緩存,如下圖所示:Linux 清除 DNS 緩存重啟依然是解決很多問題的第一選擇。在 Java 應(yīng)用中 JVM 也會緩存 DNS 的結(jié)果,這個緩存是在 InetAddress 類中完成的,而這個緩存時間還比較特殊,他有兩種緩存策略: 一種是正確結(jié)果緩存;一種失敗的結(jié)果緩存。這兩個緩存時間有兩個配置項控制,配置項是在%JAVA_HOME%libsecurity java.security 文件中配置的。分別是networkaddress.cache.ttl 和 networkaddress.c

39、ache.negative.ttl,他們的默認值分別是-1(永不失效)和 10(緩存 10 秒)。要修改這兩個值同樣有幾種方式:分別是直接修改 java.securit 文件中默認值;或者在 Java 的啟動參數(shù)中增加-D.inetaddr.ttl=態(tài) InetAddress 類動態(tài)修改。來修改默認值;動在這里還要特別強調(diào)一下,如果需要用的 InetAddress 類時,一定要是有單例模式,不然會有嚴重的性能問題,如果每次創(chuàng)建 InetAddress 實例的話,都要進行一次完成的,非常耗性能,這點特別要注意。幾種方式主要分為A、MX、CNAME、NS和 TXT。A,A 代表的是 Address

40、,就是用來指定對應(yīng)的 IP 地址,如將指定到 41 上,將指定到 41 地址上。A可以將多個到一個 IP 地 址上,但是不能將一個到多個 IP 地址上。,表示的是 Exchange,就是可以將某個下的郵件服務(wù)器指向到自己的 Server 上,如MX的AIP 地址是 45,如果 MX設(shè)置為 46,那么如果是的郵件路由的話,DNS將會將郵件發(fā)送到 46 所在的服務(wù)器,而正常通過 Web 請求的話仍然到 A的 IP 地址。CNAME,是 Canonical Name,也就是別名,可以為一個到另一個,可以為一個指定多個別名。如將到;將也到xulingbo。如前面的小節(jié)中. 1542IN CNAME就是

41、 CNAME。NS,是為某個指定 DNS服務(wù)器,也就是這個有指定的 IP 地址的 DNS 服務(wù)器去,面的小節(jié)中. 86400 IN NS.就是 NS。TXT,為某個主機名或設(shè)置說明,如可以為 設(shè)置 TXT為”君山的博客|”這樣的說明。CDN 工作機制CDN 也就是內(nèi)容分布網(wǎng)絡(luò)(Content Distribution Network),它是構(gòu)筑在現(xiàn)有ernet 上的一種先進的流量分配網(wǎng)絡(luò)。其目的是通過在現(xiàn)有的ernet 中增加一層新的網(wǎng)絡(luò)架構(gòu),將的內(nèi)容發(fā)布到最接近用戶的網(wǎng)絡(luò)”邊緣”,使用戶可以就近取得所需的內(nèi)容,提高用戶的響應(yīng)速度。有別于鏡像,它比鏡 像更智能,可以做這樣一個比喻:CDN =

42、鏡像(Mirror) + 緩存(Cache) + 整體負載均衡(GSLB)。因而,CDN 可以明顯提高ernet 網(wǎng)絡(luò)中信息的效率。目前 CDN 都是以緩存中的靜態(tài)數(shù)據(jù)為主,如 css、js、和靜態(tài)頁面等這這些靜態(tài)數(shù)些數(shù)據(jù)。使用用戶在從主站服務(wù)器請求到動態(tài)內(nèi)容后再從 CDN 上據(jù),從而加速網(wǎng)頁數(shù)據(jù)內(nèi)容的提供的。速度,如淘寶有 90%以上的數(shù)據(jù)都是由 CDN 來通常來說 CDN 要達到以下這幾個目標:Scalability。性能可擴展性:應(yīng)對新增的大量數(shù)據(jù)、用戶和事務(wù)的擴展能力;成本可擴展性:用低廉的運營成本提供動態(tài)的服務(wù)能力和高質(zhì)量的內(nèi)容分發(fā)Security 。強調(diào)提供物理設(shè)備、網(wǎng)絡(luò)、數(shù)據(jù)和服務(wù)過程的安全性的保障 ,(趨勢)減少因為 DDoS或者

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論