淺談一個網(wǎng)頁打開的全過程(涉及DNS、CDN级遭、Nginx負載均衡等)

1望拖、概要

從用戶在瀏覽器輸入域名開始,到web頁面加載完畢挫鸽,這是一個說復雜不復雜说敏,說簡單不簡單的過程,下文暫且把這個過程稱作網(wǎng)頁加載過程丢郊。下面我將依靠自己的經(jīng)驗盔沫,總結(jié)一下整個過程。如有錯漏枫匾,歡迎指正架诞。

閱讀本文需要讀者已有一定的計算機知識,了解TCP干茉、DNS等谴忧。

2、分析

眾所周知角虫,打開一個網(wǎng)頁的過程中沾谓,瀏覽器會因頁面上的css/js/image等靜態(tài)資源會多次發(fā)起連接請求,所以我們暫且把這個網(wǎng)頁加載過程分成兩部分:

  1. html(jsp/php/aspx) 頁面加載(假設(shè)存在簡單的Nginx負載均衡)
  2. css/js/image等 網(wǎng)頁靜態(tài)資源加載(假設(shè)使用CDN)

2.1 頁面加載

先上一張圖戳鹅,直觀明了地讓大家了解下基本流程均驶,然后我們再逐一分析。

image

2.1.1 DNS解析

什么是DNS解析枫虏?當用戶輸入一個網(wǎng)址并按下回車鍵的時候妇穴,瀏覽器得到了一個域名。而在實際通信過程中隶债,我們需要的是一個IP地址腾它。因此我們需要先把域名轉(zhuǎn)換成相應的IP地址,這個過程稱作DNS解析燃异。

1) 瀏覽器首先搜索瀏覽器自身緩存的DNS記錄携狭。

或許很多人不知道,瀏覽器自身也帶有一層DNS緩存回俐。Chrome 緩存1000條DNS解析結(jié)果逛腿,緩存時間大概在一分鐘左右。

(Chrome瀏覽器通過輸入:chrome://net-internals/#dns 打開DNS緩存頁面)

2) 如果瀏覽器緩存中沒有找到需要的記錄或記錄已經(jīng)過期仅颇,則搜索hosts文件和操作系統(tǒng)緩存单默。

在Windows操作系統(tǒng)中,可以通過 ipconfig /displaydns 命令查看本機當前的緩存忘瓦。

通過hosts文件,你可以手動指定一個域名和其對應的IP解析結(jié)果耕皮,并且該結(jié)果一旦被使用境蜕,同樣會被緩存到操作系統(tǒng)緩存中。

Windows系統(tǒng)的hosts文件在%systemroot%\system32\drivers\etc下凌停,linux系統(tǒng)的hosts文件在/etc/hosts下粱年。

3) 如果在hosts文件和操作系統(tǒng)緩存中沒有找到需要的記錄或記錄已經(jīng)過期,則向域名解析服務(wù)器發(fā)送解析請求罚拟。

其實第一臺被訪問的域名解析服務(wù)器就是我們平時在設(shè)置中填寫的DNS服務(wù)器一項台诗,當操作系統(tǒng)緩存中也沒有命中的時候,系統(tǒng)會向DNS服務(wù)器正式發(fā)出解析請求赐俗。這里是真正意義上開始解析一個未知的域名拉队。

一般一臺域名解析服務(wù)器會被地理位置臨近的大量用戶使用(特別是ISP的DNS),一般常見的網(wǎng)站域名解析都能在這里命中阻逮。

4) 如果域名解析服務(wù)器也沒有該域名的記錄粱快,則開始遞歸+迭代解析。

這里我們舉個例子叔扼,如果我們要解析的是mail.google.com皆尔。

首先我們的域名解析服務(wù)器會向根域服務(wù)器(全球只有13臺)發(fā)出請求。顯然币励,僅憑13臺服務(wù)器不可能把全球所有IP都記錄下來慷蠕。所以根域服務(wù)器記錄的是com域服務(wù)器的IP、cn域服務(wù)器的IP食呻、org域服務(wù)器的IP……流炕。如果我們要查找.com結(jié)尾的域名,那么我們可以到com域服務(wù)器去進一步解析仅胞。所以其實這部分的域名解析過程是一個樹形的搜索過程每辟。

image
   根域服務(wù)器告訴我們**com域服務(wù)器**的IP。

接著我們的域名解析服務(wù)器會向com域服務(wù)器發(fā)出請求干旧。根域服務(wù)器并沒有mail.google.com的IP渠欺,但是卻有google.com域服務(wù)器的IP。

接著我們的域名解析服務(wù)器會向google.com域服務(wù)器發(fā)出請求椎眯。...

如此重復挠将,直到獲得mail.google.com的IP地址胳岂。

為什么是遞歸:問題由一開始的本機要解析mail.google.com變成域名解析服務(wù)器要解析mail.google.com,這是遞歸舔稀。

為什么是迭代:問題由向根域服務(wù)器發(fā)出請求變成向com域服務(wù)器發(fā)出請求再變成向google.com域發(fā)出請求乳丰,這是迭代。

5) 獲取域名對應的IP后内贮,一步步向上返回产园,直到返回給瀏覽器。

2.1.2 發(fā)起TCP請求

瀏覽器會選擇一個大于1024的本機端口向目標IP地址的80端口發(fā)起TCP連接請求夜郁。經(jīng)過標準的TCP握手流程什燕,建立TCP連接。

關(guān)于TCP協(xié)議的細節(jié)竞端,這里就不再闡述屎即。這里只是簡單地用一張圖說明一下TCP的握手過程。如果不了解TCP婶熬,可以選擇跳過此段剑勾,不影響本文其他部分的瀏覽。

image

2.1.3 發(fā)起HTTP請求

其本質(zhì)是在建立起的TCP連接中赵颅,按照HTTP協(xié)議標準發(fā)送一個索要網(wǎng)頁的請求虽另。

2.1.4 負載均衡

什么是負載均衡?當一臺服務(wù)器無法支持大量的用戶訪問時饺谬,將用戶分攤到兩個或多個服務(wù)器上的方法叫負載均衡捂刺。

  什么是Nginx?Nginx是一款面向性能設(shè)計的HTTP服務(wù)器募寨,相較于Apache族展、lighttpd具有占有內(nèi)存少,穩(wěn)定性高等優(yōu)勢拔鹰。

負載均衡的方法很多仪缸,Nginx負載均衡、LVS-NAT列肢、LVS-DR等恰画。這里,我們以簡單的Nginx負載均衡為例瓷马。關(guān)于負載均衡的多種方法詳情大家可以Google一下拴还。

Nginx有4種類型的模塊:core、handlers欧聘、filters片林、load-balancers。

我們這里討論其中的2種,分別是負責負載均衡的模塊load-balancers和負責執(zhí)行一系列過濾操作的filters模塊费封。

1) 一般焕妙,如果我們的平臺配備了負載均衡的話,前一步DNS解析獲得的IP地址應該是我們Nginx負載均衡服務(wù)器的IP地址孝偎。所以访敌,我們的瀏覽器將我們的網(wǎng)頁請求發(fā)送到了Nginx負載均衡服務(wù)器上凉敲。

2) Nginx根據(jù)我們設(shè)定的分配算法和規(guī)則衣盾,選擇一臺后端的真實Web服務(wù)器,與之建立TCP連接爷抓、并轉(zhuǎn)發(fā)我們?yōu)g覽器發(fā)出去的網(wǎng)頁請求势决。

Nginx默認支持 RR輪轉(zhuǎn)法 和 ip_hash法 這2種分配算法。

前者會從頭到尾一個個輪詢所有Web服務(wù)器蓝撇,而后者則對源IP使用hash函數(shù)確定應該轉(zhuǎn)發(fā)到哪個Web服務(wù)器上果复,也能保證同一個IP的請求能發(fā)送到同一個Web服務(wù)器上實現(xiàn)會話粘連。

也有其他擴展分配算法渤昌,如:

fair:這種算法會選擇相應時間最短的Web服務(wù)器

url_hash:這種算法會使得相同的url發(fā)送到同一個Web服務(wù)器

3) Web服務(wù)器收到請求虽抄,產(chǎn)生響應,并將網(wǎng)頁發(fā)送給Nginx負載均衡服務(wù)器独柑。

4) Nginx負載均衡服務(wù)器將網(wǎng)頁傳遞給filters鏈處理迈窟,之后發(fā)回給我們的瀏覽器。

image

而Filter的功能可以理解成先把前一步生成的結(jié)果處理一遍忌栅,再返回給瀏覽器车酣。比如可以將前面沒有壓縮的網(wǎng)頁用gzip壓縮后再返回給瀏覽器。

2.1.5 瀏覽器渲染

1) 瀏覽器根據(jù)頁面內(nèi)容索绪,生成DOM Tree湖员。根據(jù)CSS內(nèi)容,生成CSS Rule Tree(規(guī)則樹)瑞驱。調(diào)用JS執(zhí)行引擎執(zhí)行JS代碼娘摔。

2) 根據(jù)DOM Tree和CSS Rule Tree生成Render Tree(呈現(xiàn)樹)

3) 根據(jù)Render Tree渲染網(wǎng)頁

但是在瀏覽器解析頁面內(nèi)容的時候,會發(fā)現(xiàn)頁面引用了其他未加載的image唤反、css文件凳寺、js文件等靜態(tài)內(nèi)容,因此開始了第二部分拴袭。

2.2 網(wǎng)頁靜態(tài)資源加載

以阿里巴巴的淘寶網(wǎng)首頁的logo為例读第,其url地址為 img.alicdn.com/tps/i2/TB1bNE7LFXXXXaOXFXXwFSA1XXX-292-116.png_145x145.jpg

我們清楚地看到了url中有cdn字樣。

什么是CDN拥刻?如果我在廣州訪問杭州的淘寶網(wǎng)怜瞒,跨省的通信必然造成延遲拄查。如果淘寶網(wǎng)能在廣東建立一個服務(wù)器枉阵,靜態(tài)資源我可以直接從就近的廣東服務(wù)器獲取,必然能提高整個網(wǎng)站的打開速度,這就是CDN巷波。CDN叫內(nèi)容分發(fā)網(wǎng)絡(luò),是依靠部署在各地的邊緣服務(wù)器婶恼,使用戶就近獲取所需內(nèi)容燃乍,降低網(wǎng)絡(luò)擁塞,提高用戶訪問響應速度霜运。

接下來的流程就是瀏覽器根據(jù)url加載該url下的圖片內(nèi)容脾歇。本質(zhì)上是瀏覽器重新開始第一部分的流程,所以這里不再重復闡述淘捡。區(qū)別只是負責均衡服務(wù)器后端的服務(wù)器不再是應用服務(wù)器藕各,而是提供靜態(tài)資源的服務(wù)器。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末焦除,一起剝皮案震驚了整個濱河市激况,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌膘魄,老刑警劉巖乌逐,帶你破解...
    沈念sama閱讀 216,591評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異创葡,居然都是意外死亡浙踢,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評論 3 392
  • 文/潘曉璐 我一進店門蹈丸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來成黄,“玉大人,你說我怎么就攤上這事逻杖》芩辏” “怎么了?”我有些...
    開封第一講書人閱讀 162,823評論 0 353
  • 文/不壞的土叔 我叫張陵荸百,是天一觀的道長闻伶。 經(jīng)常有香客問我,道長够话,這世上最難降的妖魔是什么蓝翰? 我笑而不...
    開封第一講書人閱讀 58,204評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮女嘲,結(jié)果婚禮上畜份,老公的妹妹穿的比我還像新娘。我一直安慰自己欣尼,他們只是感情好爆雹,可當我...
    茶點故事閱讀 67,228評論 6 388
  • 文/花漫 我一把揭開白布停蕉。 她就那樣靜靜地躺著,像睡著了一般钙态。 火紅的嫁衣襯著肌膚如雪慧起。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,190評論 1 299
  • 那天册倒,我揣著相機與錄音蚓挤,去河邊找鬼。 笑死驻子,一個胖子當著我的面吹牛灿意,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播拴孤,決...
    沈念sama閱讀 40,078評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼脾歧,長吁一口氣:“原來是場噩夢啊……” “哼甲捏!你這毒婦竟也來了演熟?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,923評論 0 274
  • 序言:老撾萬榮一對情侶失蹤司顿,失蹤者是張志新(化名)和其女友劉穎芒粹,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體大溜,經(jīng)...
    沈念sama閱讀 45,334評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡化漆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,550評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了钦奋。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片座云。...
    茶點故事閱讀 39,727評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖付材,靈堂內(nèi)的尸體忽然破棺而出朦拖,到底是詐尸還是另有隱情,我是刑警寧澤厌衔,帶...
    沈念sama閱讀 35,428評論 5 343
  • 正文 年R本政府宣布璧帝,位于F島的核電站,受9級特大地震影響富寿,放射性物質(zhì)發(fā)生泄漏睬隶。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,022評論 3 326
  • 文/蒙蒙 一页徐、第九天 我趴在偏房一處隱蔽的房頂上張望苏潜。 院中可真熱鬧,春花似錦变勇、人聲如沸恤左。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽赃梧。三九已至滤蝠,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間授嘀,已是汗流浹背物咳。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留蹄皱,地道東北人览闰。 一個月前我還...
    沈念sama閱讀 47,734評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像巷折,于是被迫代替她去往敵國和親压鉴。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,619評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 【摘要】 面對大量用戶訪問锻拘、高并發(fā)請求油吭,海量數(shù)據(jù),可以使用高性能的服務(wù)器署拟、大型數(shù)據(jù)庫婉宰,存儲設(shè)備,高性能Web服務(wù)器...
    靜修佛緣閱讀 4,559評論 0 24
  • 摘要:面對大量用戶訪問推穷、高并發(fā)請求心包,海量數(shù)據(jù),可以使用高性能的服務(wù)器馒铃、大型數(shù)據(jù)庫蟹腾,存儲設(shè)備,高性能Web服務(wù)器区宇,采...
    layjoy閱讀 13,807評論 3 93
  • 文/無人像妳i 其實很早就想寫一篇關(guān)于你的文章了萧锉。 那時的你很青澀珊随,什么都不懂,雖然在社會上的時間比我多柿隙。 我那會...
    無人像妳i閱讀 516評論 0 0
  • 后來我又去過那家串手串的店叶洞,憑著記憶找到的,店里的姐姐笑起來露出兩顆虎牙依然親切禀崖,她跟我寒暄衩辟,不經(jīng)意間提到了你,我...
    米大王閱讀 88評論 0 0
  • kidII閱讀 84評論 0 0