用戶訪問網(wǎng)站的具體流程

在瀏覽器輸入想要訪問的域名之后醉锄,瀏覽器會進行域名解析獲得IP地址,在經(jīng)過TCP的連接浙值,實現(xiàn)數(shù)據(jù)的傳輸就會有兩種報文恳不,及請求報文和響應(yīng)報文。最終才能實現(xiàn)通信开呐。因此想要實現(xiàn)通信烟勋,就得先弄懂DNS的解析原理以及TCP連接通道的流程。

理論內(nèi)容:

1筐付、DNS的介紹以及原理

2神妹、TCP/IP協(xié)議的介紹和三次握手及四次揮手

3、HTTP協(xié)議的介紹及請求與響應(yīng)報文

4家妆、用戶訪問瀏覽器的完整過程

1鸵荠、DNS的介紹及解析原理

1)說說DNS是什么:

DNS(Domain Name System,域名系統(tǒng))伤极,因特網(wǎng)上作為域名和IP地址相互映射的一個分布式數(shù)據(jù)庫蛹找,能夠使用戶更方便的訪問互聯(lián)網(wǎng),而不用去+·記住能夠被機器直接讀取的IP數(shù)串哨坪。通過主機名庸疾,最終得到該主機名對應(yīng)的IP地址的過程叫做域名解析(或主機名解析)。DNS協(xié)議運行在UDP協(xié)議之上当编,使用端口號53届慈。訪問網(wǎng)站的實質(zhì)就是解析其域名得到IP地址,再轉(zhuǎn)向其網(wǎng)站忿偷。

2)DNS的解析原理:

原理步驟:

1)系統(tǒng)首先會查找本地的DNS緩存和hosts文件信息金顿,確認其中是否有與,域名www.baidu.com所對應(yīng)的IP地址鲤桥。如果有揍拆,就直接訪問這個IP地址所對應(yīng)的www.baidu.com域名服務(wù)器。

2)如果沒有找到茶凳,那么嫂拴,系統(tǒng)將會把瀏覽器的解析請求發(fā)送給本地主機所指定的DNS服務(wù)器,稱為LDNS贮喧。如果LDNS服務(wù)器中有域名www.baidu.com所對應(yīng)的IP地址筒狠,則返回給客戶端的瀏覽器,如果沒有箱沦,則繼續(xù)請求其他DNS服務(wù)器辩恼。

3)LDNS服務(wù)器會從DNS系統(tǒng)的根(.)開始請求對域名www.baidu.com的解析。根DNS服務(wù)器全球只有13臺,根域名服務(wù)器是沒有域名www.baidu.com解析記錄的运挫。但是它會有域名www.baidu.com所對應(yīng)的頂級域.com的解析記錄状共,因此直接把頂級域.com所對應(yīng)的DNS地址返回給LDNS服務(wù)器。

4)LDNS服務(wù)器獲取到頂級域.com對應(yīng)的DNS服務(wù)器地址后谁帕,就會去.com服務(wù)器請求對www.baidu.com域名的解析峡继。在頂級域名服務(wù)器也不會有www.baidu.com的解析記錄的。但是它有www.baidu.com的父級域名的解析記錄匈挖,即baidu.com碾牌。因此頂級域名.com服務(wù)器又會把baidu.com所對應(yīng)的DNS服務(wù)器的IP地址返回給LDNS。

5)LDNS服務(wù)器收到baidu.com所對應(yīng)的IP地址后儡循,就會去baidu.com域名服務(wù)器請求對www.baidu.com的域名解析舶吗。Baidu.com域名對應(yīng)的DNS服務(wù)器是該域名的授權(quán)DNS服務(wù)器。這個DNS服務(wù)器就是企業(yè)購買域名時用于管理解析的服務(wù)器择膝。

6)baidu.com域名DNS服務(wù)器會吧www.baidu.com域名所對應(yīng)的IP地址給解析出來誓琼,然后發(fā)給LDNS。

7)LDNS把解析出來的結(jié)果肴捉,www.baudu.com所對應(yīng)的IP地址發(fā)送給客戶端的瀏覽器腹侣。并且LDNS也會將其域名和對應(yīng)的地址緩存到cache中。

8)客戶端瀏覽器收到后齿穗,也會將其域名以及對應(yīng)的IP地址緩存的到DNS緩存和hosts文件中傲隶。

2、TCP/IP協(xié)議的介紹和三次握手及四次揮手

1)說說TCP/IP協(xié)議是什么

Transmission Control Protocol/Internet Protocol的簡寫窃页,中譯名為傳輸控制協(xié)議/因特網(wǎng)互聯(lián)協(xié)議跺株,又名網(wǎng)絡(luò)通訊協(xié)議,是Internet最基本的協(xié)議脖卖、Internet國際互聯(lián)網(wǎng)絡(luò)的基礎(chǔ)乒省,由網(wǎng)絡(luò)層的IP協(xié)議和傳輸層的TCP協(xié)議組成。TCP/IP 定義了電子設(shè)備如何連入因特網(wǎng)胚嘲,以及數(shù)據(jù)如何在它們之間傳輸?shù)臉藴首鞫f(xié)議采用了4層的層級結(jié)構(gòu),每一層都呼叫它的下一層所提供的協(xié)議來完成自己的需求馋劈。通俗而言:TCP負責(zé)發(fā)現(xiàn)傳輸?shù)膯栴},一有問題就發(fā)出信號晾嘶,要求重新傳輸妓雾,直到所有數(shù)據(jù)安全正確地傳輸?shù)侥康牡亍6鳬P是給因特網(wǎng)的每一臺聯(lián)網(wǎng)設(shè)備規(guī)定一個地址垒迂。

2)各個狀態(tài)的意義如下:
(1)LISTEN - 偵聽來自遠方TCP端口的連接請求械姻;
(2)SYN-SENT -在發(fā)送連接請求后等待匹配的連接請求;
(3)SYN-RECEIVED - 在收到和發(fā)送一個連接請求后等待對連接請求的確認机断;
(4)ESTABLISHED- 代表一個打開的連接楷拳,數(shù)據(jù)可以傳送給用戶绣夺;
(5)FIN-WAIT-1 - 等待遠程TCP的連接中斷請求,或先前的連接中斷請求的確認欢揖;
(6)FIN-WAIT-2 - 從遠程TCP等待連接中斷請求陶耍;
(7)CLOSE-WAIT - 等待從本地用戶發(fā)來的連接中斷請求;
(8)CLOSING -等待遠程TCP對連接中斷的確認她混;
(9)LAST-ACK - 等待原來發(fā)向遠程TCP的連接中斷請求的確認烈钞;
(10)TIME-WAIT - 等待足夠的時間以確保遠程TCP接收到連接中斷請求的確認;
(11)CLOSED - 沒有任何連接狀態(tài)坤按;

3)TCP三次握手

所謂三次握手(Three-way Handshake)毯欣,是指建立一個TCP連接時,需要客戶端和服務(wù)器總共發(fā)送3個包臭脓。

三次握手的目的是連接服務(wù)器指定端口酗钞,建立TCP連接,并同步連接雙方的序列號和確認號并交換 TCP 窗口大小信息.在socket編程中,客戶端執(zhí)行connect()時来累。將觸發(fā)三次握手砚作。

image

三次握手過程:

1)第一次握手:建立連接時,客戶端A發(fā)送SYN包(SYN=j)到服務(wù)器B佃扼,并進入SYN_SEND狀態(tài)偎巢,等待服務(wù)器B確認。

2)第二次握手:服務(wù)器B收到SYN包兼耀,必須確認客戶A的SYN(ACK=j+1)压昼,同時自己也發(fā)送一個SYN包(SYN=k),即SYN+ACK包瘤运,此時服務(wù)器B進入SYN_RECV狀態(tài)窍霞。

3)第三次握手:客戶端A收到服務(wù)器B的SYN+ACK包炫彩,向服務(wù)器B發(fā)送確認包ACK(ACK=k+1)昌简,此包發(fā)送完畢罐盔,客戶端A和服務(wù)器B進入ESTABLISHED狀態(tài)龟虎,完成三次握手掀淘。

4)TCP 四次揮手
TCP的連接的拆除需要發(fā)送四個包美侦,因此稱為四次揮手(four-way handshake)宠蚂∨彝粒客戶端或服務(wù)器均可主動發(fā)起揮手動作梦裂,在socket編程中似枕,任何一方執(zhí)行close()操作即可產(chǎn)生揮手操作。

image

四次揮手過程:

1)第一次揮手:客戶端A發(fā)送一個FIN年柠,用來關(guān)閉客戶A到服務(wù)器B的數(shù)據(jù)傳送凿歼。

2)第二次揮手:服務(wù)器B收到這個FIN,它發(fā)回一個ACK,確認序號為收到的序號加1答憔。和SYN一樣味赃,一個FIN將占用一個序號。

3)第三次揮手:服務(wù)器B關(guān)閉與客戶端A的連接虐拓,發(fā)送一個FIN給客戶端A心俗。

4)第四次揮手:客戶端A發(fā)回ACK報文確認,并將確認序號設(shè)置為收到序號加1侯嘀。

3另凌、HTTP協(xié)議的介紹及請求與響應(yīng)報文

1)HTTP報文

HTTP報文中有很多行內(nèi)人,這些行的字段都是由一些ASCII碼串組成戒幔,但各個字段的長度是不同的吠谢。HTTP報文可以分為兩種,一種是從web客戶端發(fā)往web服務(wù)端的HTTP報文诗茎,稱為請求保衛(wèi)工坊,另一種是從web服務(wù)端發(fā)往客戶端的報文,稱為響應(yīng)報文敢订。兩種報文的格式的基本相同王污。

(1)請求報文介紹

image

(2)請求報文的內(nèi)容與格式有如下:

1)請求行

作用:用來說明客戶端想要做什么。

內(nèi)容:包括方法字段GET和URL字段以及HTTP協(xié)議版本

2)請求頭

作用:通過客戶端把請求的相關(guān)信息發(fā)給服務(wù)器

內(nèi)容:包括媒體類型楚午、語言類型昭齐、支持壓縮、客戶端類型矾柜、主機等信息阱驾。

3)空行

作用:告訴服務(wù)器空行以下內(nèi)容不屬于請求頭部信息。

4)請求報文主體

作用:用來說明客戶端具體想要做的事情怪蔑。

內(nèi)容:查看信息里覆、應(yīng)用post方法。

(3)響應(yīng)報文介紹

image

(4)請求報文的內(nèi)容與格式有如下:

1)狀態(tài)行

作用:用來說明服務(wù)端響應(yīng)客戶端的狀態(tài)缆瓣。

內(nèi)容:包括洗衣及版本號喧枷、數(shù)字狀態(tài)碼、狀態(tài)情況

2)響應(yīng)頭

作用:通過服務(wù)端把響應(yīng)的相關(guān)信息給客戶端

內(nèi)容:包括Location弓坞、server隧甚、connect、vary等

3)空行

作用:告訴客戶端空行以下內(nèi)容不屬于響應(yīng)頭部信息渡冻。

4)響應(yīng)報文主體

作用:用來裝載著要返回給客戶端的數(shù)據(jù)

內(nèi)容:包括文本呻逆、html、視頻或者是圖片菩帝。

(5)GET與POST的認識

GET:當(dāng)客戶端要從服務(wù)器中讀取某個資源時,使用GET 方法。GET 方法要求服務(wù)器將URL 定位的資源放在響應(yīng)報文的數(shù)據(jù)部分呼奢,回送給客戶端宜雀,即向服務(wù)器請求某個資源。使用GET 方法時握础,請求參數(shù)和對應(yīng)的值附加在 URL 后面辐董,利用一個問號(“?”)代表URL 的結(jié)尾與請求參數(shù)的開始,傳遞參數(shù)長度受限制禀综。例如简烘,/index.jsp?id=100&op=bind、

POST:當(dāng)客戶端給服務(wù)器提供信息較多時可以使用POST 方法定枷,POST 方法向服務(wù)器提交數(shù)據(jù)孤澎,比如完成表單數(shù)據(jù)的提交,將數(shù)據(jù)提交給服務(wù)器處理欠窒。GET 一般用于獲取/查詢資源信息覆旭,POST 會附帶用戶數(shù)據(jù),一般用于更新資源信息岖妄。POST 方法將請求參數(shù)封裝在HTTP 請求數(shù)據(jù)中型将,以名稱/值的形式出現(xiàn),可以傳輸大量數(shù)據(jù);

4荐虐、用戶訪問瀏覽器的完整過程

1七兜、客戶端在瀏覽器中輸入要訪問的域名地址,如:www.baidu.com

2福扬、瀏覽器請求解析DNS服務(wù)器腕铸,把域名www.baidu.com轉(zhuǎn)換成web服務(wù)器的IP地址。

1)系統(tǒng)首先會查找本地的DNS緩存和hosts文件信息忧换,確認其中是否有與恬惯,域名www.baidu.com所對應(yīng)的IP地址。如果有亚茬,就直接訪問這個IP地址所對應(yīng)的www.baidu.com域名服務(wù)器酪耳。

2)如果沒有找到,那么刹缝,系統(tǒng)將會把瀏覽器的解析請求發(fā)送給本地主機所指定的DNS服務(wù)器碗暗,稱為LDNS。如果LDNS服務(wù)器中有域名www.baidu.com所對應(yīng)的IP地址梢夯,則返回給客戶端的瀏覽器言疗,如果沒有,則繼續(xù)請求其他DNS服務(wù)器颂砸。

3)LDNS服務(wù)器會從DNS系統(tǒng)的根(.)開始請求對域名www.baidu.com的解析噪奄。根DNS服務(wù)器全球只有13臺死姚,根域名服務(wù)器是沒有域名www.baidu.com解析記錄的。但是它會有域名www.baidu.com所對應(yīng)的頂級域.com的解析記錄勤篮,因此直接把頂級域.com所對應(yīng)的DNS地址返回給LDNS服務(wù)器都毒。

4)LDNS服務(wù)器獲取到頂級域.com對應(yīng)的DNS服務(wù)器地址后,就會去.com服務(wù)器請求對www.baidu.com域名的解析碰缔。在頂級域名服務(wù)器也不會有www.baidu.com的解析記錄的账劲。但是它有www.baidu.com的父級域名,即baidu.com金抡。因此頂級域名.com服務(wù)器又會把baidu.com所對應(yīng)的DNS服務(wù)器的IP地址返回給LDNS瀑焦。

5)LDNS服務(wù)器收到baidu.com所對應(yīng)的IP地址后,就會去baidu.com域名服務(wù)器請求對www.baidu.com的域名解析梗肝。Baidu.com域名對應(yīng)的DNS服務(wù)器是該域名的授權(quán)DNS服務(wù)器榛瓮。這個DNS服務(wù)器就是企業(yè)購買域名時用于管理解析的服務(wù)器。

6)baidu.com域名DNS服務(wù)器會吧www.baidu.com域名所對應(yīng)的IP地址給解析出來统捶,然后發(fā)給LDNS榆芦。

7)LDNS把解析出來的結(jié)果,www.baudu.com所對應(yīng)的IP地址發(fā)送給客戶端的瀏覽器喘鸟。并且LDNS也會將其域名和對應(yīng)的地址緩存到cache中匆绣。

8)客戶端瀏覽器收到后,也會將其域名以及對應(yīng)的IP地址緩存的到DNS緩存和hosts文件中什黑。

3崎淳、瀏覽器從訪問的IP地址(URL)解析出默認的斷后號:80

4、瀏覽器通過解析后得到的IP地址和端口號進行web服務(wù)器建立一條TCP連接通道愕把。

1)第一次握手:

建立連接時拣凹,客戶端A發(fā)送SYN包(SYN=j)到服務(wù)器B,并進入SYN_SEND狀態(tài)恨豁,等待服務(wù)器B確認嚣镜。

2)第二次握手:

服務(wù)器B收到SYN包,必須確認客戶A的SYN(ACK=j+1)橘蜜,同時自己也發(fā)送一個SYN包(SYN=k)菊匿,即SYN+ACK包,此時服務(wù)器B進入SYN_RECV狀態(tài)计福。

3)第三次握手:

客戶端A收到服務(wù)器B的SYN+ACK包跌捆,向服務(wù)器B發(fā)送確認包ACK(ACK=k+1),此包發(fā)送完畢象颖,客戶端A和服務(wù)器B進入ESTABLISHED狀態(tài)佩厚,完成三次握手。

5说订、建立TCP連接之后抄瓦,瀏覽器向web服務(wù)器發(fā)送一條HTTP請求報文潮瓶。

1)請求行

作用:用來說明客戶端想要做什么。

內(nèi)容:包括方法字段GET和URL字段以及HTTP協(xié)議版本

2)請求頭

作用:通過客戶端把請求的相關(guān)信息發(fā)給服務(wù)器

內(nèi)容:包括媒體類型闺鲸、語言類型筋讨、支持壓縮、客戶端類型摸恍、主機等信息。

3)空行

作用:告訴服務(wù)器空行以下內(nèi)容不屬于請求頭部信息赤屋。

4)請求報文主體

作用:用來說明客戶端具體想要做的事情立镶。

內(nèi)容:查看信息、應(yīng)用post方法类早。

6媚媒、web服務(wù)器響應(yīng)并讀取瀏覽器的請求信息,然后返回一條HTTP響應(yīng)報文涩僻。

1)狀態(tài)行

作用:用來說明服務(wù)端響應(yīng)客戶端的狀態(tài)缭召。

內(nèi)容:包括洗衣及版本號、數(shù)字狀態(tài)碼逆日、狀態(tài)情況

2)響應(yīng)頭

作用:通過服務(wù)端把響應(yīng)的相關(guān)信息給客戶端

內(nèi)容:包括Location嵌巷、server、connect室抽、vary等

3)空行

作用:告訴客戶端空行以下內(nèi)容不屬于響應(yīng)頭部信息搪哪。

4)響應(yīng)報文主體

作用:用來裝載著要返回給客戶端的數(shù)據(jù)

內(nèi)容:包括文本、html坪圾、視頻或者是圖片晓折。

7、web服務(wù)器關(guān)閉HTTP連接兽泄,關(guān)閉TCP連接漓概,web服務(wù)器顯示訪問的網(wǎng)站內(nèi)容到屏幕上。

1)第一次揮手:

客戶端A發(fā)送一個FIN病梢,用來關(guān)閉客戶A到服務(wù)器B的數(shù)據(jù)傳送胃珍。

2)第二次揮手:

服務(wù)器B收到這個FIN,它發(fā)回一個ACK飘千,確認序號為收到的序號加1堂鲜。和SYN一樣,一個FIN將占用一個序號护奈。

3)第三次揮手:

服務(wù)器B關(guān)閉與客戶端A的連接缔莲,發(fā)送一個FIN給客戶端A。

4)第四次揮手:

客戶端A發(fā)回ACK報文確認霉旗,并將確認序號設(shè)置為收到序號加1痴奏。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蛀骇,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子读拆,更是在濱河造成了極大的恐慌擅憔,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,110評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件檐晕,死亡現(xiàn)場離奇詭異暑诸,居然都是意外死亡,警方通過查閱死者的電腦和手機辟灰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評論 3 395
  • 文/潘曉璐 我一進店門个榕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人芥喇,你說我怎么就攤上這事西采。” “怎么了继控?”我有些...
    開封第一講書人閱讀 165,474評論 0 356
  • 文/不壞的土叔 我叫張陵械馆,是天一觀的道長。 經(jīng)常有香客問我武通,道長霹崎,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,881評論 1 295
  • 正文 為了忘掉前任厅须,我火速辦了婚禮仿畸,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘朗和。我一直安慰自己错沽,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,902評論 6 392
  • 文/花漫 我一把揭開白布眶拉。 她就那樣靜靜地躺著千埃,像睡著了一般。 火紅的嫁衣襯著肌膚如雪忆植。 梳的紋絲不亂的頭發(fā)上放可,一...
    開封第一講書人閱讀 51,698評論 1 305
  • 那天,我揣著相機與錄音朝刊,去河邊找鬼耀里。 笑死,一個胖子當(dāng)著我的面吹牛拾氓,可吹牛的內(nèi)容都是我干的冯挎。 我是一名探鬼主播,決...
    沈念sama閱讀 40,418評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼咙鞍,長吁一口氣:“原來是場噩夢啊……” “哼房官!你這毒婦竟也來了趾徽?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,332評論 0 276
  • 序言:老撾萬榮一對情侶失蹤翰守,失蹤者是張志新(化名)和其女友劉穎孵奶,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蜡峰,經(jīng)...
    沈念sama閱讀 45,796評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡了袁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,968評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了事示。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片早像。...
    茶點故事閱讀 40,110評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖肖爵,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情臀脏,我是刑警寧澤劝堪,帶...
    沈念sama閱讀 35,792評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站揉稚,受9級特大地震影響秒啦,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜搀玖,卻給世界環(huán)境...
    茶點故事閱讀 41,455評論 3 331
  • 文/蒙蒙 一余境、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧灌诅,春花似錦芳来、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至挎袜,卻和暖如春顽聂,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背盯仪。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評論 1 272
  • 我被黑心中介騙來泰國打工紊搪, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人全景。 一個月前我還...
    沈念sama閱讀 48,348評論 3 373
  • 正文 我出身青樓耀石,卻偏偏與公主長得像,于是被迫代替她去往敵國和親蚪燕。 傳聞我的和親對象是個殘疾皇子娶牌,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,047評論 2 355

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