您好,登錄后才能下訂單哦!
在瀏覽器輸入想要訪問(wèn)的域名之后,瀏覽器會(huì)進(jìn)行域名解析獲得IP地址,在經(jīng)過(guò)TCP的連接,實(shí)現(xiàn)數(shù)據(jù)的傳輸就會(huì)有兩種報(bào)文,及請(qǐng)求報(bào)文和響應(yīng)報(bào)文。最終才能實(shí)現(xiàn)通信。因此想要實(shí)現(xiàn)通信,就得先弄懂DNS的解析原理以及TCP連接通道的流程。
理論內(nèi)容:
1、DNS的介紹以及原理
2、TCP/IP協(xié)議的介紹和三次握手及四次揮手
3、HTTP協(xié)議的介紹及請(qǐng)求與響應(yīng)報(bào)文
4、用戶訪問(wèn)瀏覽器的完整過(guò)程
1、DNS的介紹及解析原理
1)說(shuō)說(shuō)DNS是什么:
DNS(Domain Name System,域名系統(tǒng)),因特網(wǎng)上作為域名和IP地址相互映射的一個(gè)分布式數(shù)據(jù)庫(kù),能夠使用戶更方便的訪問(wèn)互聯(lián)網(wǎng),而不用去+·記住能夠被機(jī)器直接讀取的IP數(shù)串。通過(guò)主機(jī)名,最終得到該主機(jī)名對(duì)應(yīng)的IP地址的過(guò)程叫做域名解析(或主機(jī)名解析)。DNS協(xié)議運(yùn)行在UDP協(xié)議之上,使用端口號(hào)53。訪問(wèn)網(wǎng)站的實(shí)質(zhì)就是解析其域名得到IP地址,再轉(zhuǎn)向其網(wǎng)站。
2)DNS的解析原理:
原理步驟:
1)系統(tǒng)首先會(huì)查找本地的DNS緩存和hosts文件信息,確認(rèn)其中是否有與,域名www.baidu.com所對(duì)應(yīng)的IP地址。如果有,就直接訪問(wèn)這個(gè)IP地址所對(duì)應(yīng)的www.baidu.com域名服務(wù)器。
2)如果沒(méi)有找到,那么,系統(tǒng)將會(huì)把瀏覽器的解析請(qǐng)求發(fā)送給本地主機(jī)所指定的DNS服務(wù)器,稱為LDNS。如果LDNS服務(wù)器中有域名www.baidu.com所對(duì)應(yīng)的IP地址,則返回給客戶端的瀏覽器,如果沒(méi)有,則繼續(xù)請(qǐng)求其他DNS服務(wù)器。
3)LDNS服務(wù)器會(huì)從DNS系統(tǒng)的根(.)開(kāi)始請(qǐng)求對(duì)域名www.baidu.com的解析。根DNS服務(wù)器全球只有13臺(tái),根域名服務(wù)器是沒(méi)有域名www.baidu.com解析記錄的。但是它會(huì)有域名www.baidu.com所對(duì)應(yīng)的頂級(jí)域.com的解析記錄,因此直接把頂級(jí)域.com所對(duì)應(yīng)的DNS地址返回給LDNS服務(wù)器。
4)LDNS服務(wù)器獲取到頂級(jí)域.com對(duì)應(yīng)的DNS服務(wù)器地址后,就會(huì)去.com服務(wù)器請(qǐng)求對(duì)www.baidu.com域名的解析。在頂級(jí)域名服務(wù)器也不會(huì)有www.baidu.com的解析記錄的。但是它有www.baidu.com的父級(jí)域名的解析記錄,即baidu.com。因此頂級(jí)域名.com服務(wù)器又會(huì)把baidu.com所對(duì)應(yīng)的DNS服務(wù)器的IP地址返回給LDNS。
5)LDNS服務(wù)器收到baidu.com所對(duì)應(yīng)的IP地址后,就會(huì)去baidu.com域名服務(wù)器請(qǐng)求對(duì)www.baidu.com的域名解析。Baidu.com域名對(duì)應(yīng)的DNS服務(wù)器是該域名的授權(quán)DNS服務(wù)器。這個(gè)DNS服務(wù)器就是企業(yè)購(gòu)買(mǎi)域名時(shí)用于管理解析的服務(wù)器。
6)baidu.com域名DNS服務(wù)器會(huì)吧www.baidu.com域名所對(duì)應(yīng)的IP地址給解析出來(lái),然后發(fā)給LDNS。
7)LDNS把解析出來(lái)的結(jié)果,www.baudu.com所對(duì)應(yīng)的IP地址發(fā)送給客戶端的瀏覽器。并且LDNS也會(huì)將其域名和對(duì)應(yīng)的地址緩存到cache中。
8)客戶端瀏覽器收到后,也會(huì)將其域名以及對(duì)應(yīng)的IP地址緩存的到DNS緩存和hosts文件中。
2、TCP/IP協(xié)議的介紹和三次握手及四次揮手
1)說(shuō)說(shuō)TCP/IP協(xié)議是什么
Transmission Control Protocol/Internet Protocol的簡(jiǎn)寫(xiě),中譯名為傳輸控制協(xié)議/因特網(wǎng)互聯(lián)協(xié)議,又名網(wǎng)絡(luò)通訊協(xié)議,是Internet最基本的協(xié)議、Internet國(guó)際互聯(lián)網(wǎng)絡(luò)的基礎(chǔ),由網(wǎng)絡(luò)層的IP協(xié)議和傳輸層的TCP協(xié)議組成。TCP/IP 定義了電子設(shè)備如何連入因特網(wǎng),以及數(shù)據(jù)如何在它們之間傳輸?shù)臉?biāo)準(zhǔn)。協(xié)議采用了4層的層級(jí)結(jié)構(gòu),每一層都呼叫它的下一層所提供的協(xié)議來(lái)完成自己的需求。通俗而言:TCP負(fù)責(zé)發(fā)現(xiàn)傳輸的問(wèn)題,一有問(wèn)題就發(fā)出信號(hào),要求重新傳輸,直到所有數(shù)據(jù)安全正確地傳輸?shù)侥康牡?。?/span>IP是給因特網(wǎng)的每一臺(tái)聯(lián)網(wǎng)設(shè)備規(guī)定一個(gè)地址。
2)各個(gè)狀態(tài)的意義如下:
(1)LISTEN - 偵聽(tīng)來(lái)自遠(yuǎn)方TCP端口的連接請(qǐng)求;
(2)SYN-SENT -在發(fā)送連接請(qǐng)求后等待匹配的連接請(qǐng)求;
(3)SYN-RECEIVED - 在收到和發(fā)送一個(gè)連接請(qǐng)求后等待對(duì)連接請(qǐng)求的確認(rèn);
(4)ESTABLISHED- 代表一個(gè)打開(kāi)的連接,數(shù)據(jù)可以傳送給用戶;
(5)FIN-WAIT-1 - 等待遠(yuǎn)程TCP的連接中斷請(qǐng)求,或先前的連接中斷請(qǐng)求的確認(rèn);
(6)FIN-WAIT-2 - 從遠(yuǎn)程TCP等待連接中斷請(qǐng)求;
(7)CLOSE-WAIT - 等待從本地用戶發(fā)來(lái)的連接中斷請(qǐng)求;
(8)CLOSING -等待遠(yuǎn)程TCP對(duì)連接中斷的確認(rèn);
(9)LAST-ACK - 等待原來(lái)發(fā)向遠(yuǎn)程TCP的連接中斷請(qǐng)求的確認(rèn);
(10)TIME-WAIT - 等待足夠的時(shí)間以確保遠(yuǎn)程TCP接收到連接中斷請(qǐng)求的確認(rèn);
(11)CLOSED - 沒(méi)有任何連接狀態(tài);
3)TCP三次握手
所謂三次握手(Three-way Handshake),是指建立一個(gè)TCP連接時(shí),需要客戶端和服務(wù)器總共發(fā)送3個(gè)包。
三次握手的目的是連接服務(wù)器指定端口,建立TCP連接,并同步連接雙方的序列號(hào)和確認(rèn)號(hào)并交換 TCP 窗口大小信息.在socket編程中,客戶端執(zhí)行connect()時(shí)。將觸發(fā)三次握手。
三次握手過(guò)程:
1)第一次握手:建立連接時(shí),客戶端A發(fā)送SYN包(SYN=j)到服務(wù)器B,并進(jìn)入SYN_SEND狀態(tài),等待服務(wù)器B確認(rèn)。
2)第二次握手:服務(wù)器B收到SYN包,必須確認(rèn)客戶A的SYN(ACK=j+1),同時(shí)自己也發(fā)送一個(gè)SYN包(SYN=k),即SYN+ACK包,此時(shí)服務(wù)器B進(jìn)入SYN_RECV狀態(tài)。
3)第三次握手:客戶端A收到服務(wù)器B的SYN+ACK包,向服務(wù)器B發(fā)送確認(rèn)包ACK(ACK=k+1),此包發(fā)送完畢,客戶端A和服務(wù)器B進(jìn)入ESTABLISHED狀態(tài),完成三次握手。
4)TCP 四次揮手
TCP的連接的拆除需要發(fā)送四個(gè)包,因此稱為四次揮手(four-way handshake)??蛻舳嘶蚍?wù)器均可主動(dòng)發(fā)起揮手動(dòng)作,在socket編程中,任何一方執(zhí)行close()操作即可產(chǎn)生揮手操作。
四次揮手過(guò)程:
1)第一次揮手:客戶端A發(fā)送一個(gè)FIN,用來(lái)關(guān)閉客戶A到服務(wù)器B的數(shù)據(jù)傳送。
2)第二次揮手:服務(wù)器B收到這個(gè)FIN,它發(fā)回一個(gè)ACK,確認(rèn)序號(hào)為收到的序號(hào)加1。和SYN一樣,一個(gè)FIN將占用一個(gè)序號(hào)。
3)第三次揮手:服務(wù)器B關(guān)閉與客戶端A的連接,發(fā)送一個(gè)FIN給客戶端A。
4)第四次揮手:客戶端A發(fā)回ACK報(bào)文確認(rèn),并將確認(rèn)序號(hào)設(shè)置為收到序號(hào)加1。
3、HTTP協(xié)議的介紹及請(qǐng)求與響應(yīng)報(bào)文
1)HTTP報(bào)文
HTTP報(bào)文中有很多行內(nèi)人,這些行的字段都是由一些ASCII碼串組成,但各個(gè)字段的長(zhǎng)度是不同的。HTTP報(bào)文可以分為兩種,一種是從web客戶端發(fā)往web服務(wù)端的HTTP報(bào)文,稱為請(qǐng)求保衛(wèi),另一種是從web服務(wù)端發(fā)往客戶端的報(bào)文,稱為響應(yīng)報(bào)文。兩種報(bào)文的格式的基本相同。
(1)請(qǐng)求報(bào)文介紹
(2)請(qǐng)求報(bào)文的內(nèi)容與格式有如下:
1)請(qǐng)求行
作用:用來(lái)說(shuō)明客戶端想要做什么。
內(nèi)容:包括方法字段GET和URL字段以及HTTP協(xié)議版本
2)請(qǐng)求頭
作用:通過(guò)客戶端把請(qǐng)求的相關(guān)信息發(fā)給服務(wù)器
內(nèi)容:包括媒體類型、語(yǔ)言類型、支持壓縮、客戶端類型、主機(jī)等信息。
3)空行
作用:告訴服務(wù)器空行以下內(nèi)容不屬于請(qǐng)求頭部信息。
4)請(qǐng)求報(bào)文主體
作用:用來(lái)說(shuō)明客戶端具體想要做的事情。
內(nèi)容:查看信息、應(yīng)用post方法。
(3)響應(yīng)報(bào)文介紹
(4)請(qǐng)求報(bào)文的內(nèi)容與格式有如下:
1)狀態(tài)行
作用:用來(lái)說(shuō)明服務(wù)端響應(yīng)客戶端的狀態(tài)。
內(nèi)容:包括洗衣及版本號(hào)、數(shù)字狀態(tài)碼、狀態(tài)情況
2)響應(yīng)頭
作用:通過(guò)服務(wù)端把響應(yīng)的相關(guān)信息給客戶端
內(nèi)容:包括Location、server、connect、vary等
3)空行
作用:告訴客戶端空行以下內(nèi)容不屬于響應(yīng)頭部信息。
4)響應(yīng)報(bào)文主體
作用:用來(lái)裝載著要返回給客戶端的數(shù)據(jù)
內(nèi)容:包括文本、html、視頻或者是圖片。
(5)GET與POST的認(rèn)識(shí)
GET:當(dāng)客戶端要從服務(wù)器中讀取某個(gè)資源時(shí),使用GET 方法。GET 方法要求服務(wù)器將URL 定位的資源放在響應(yīng)報(bào)文的數(shù)據(jù)部分,回送給客戶端,即向服務(wù)器請(qǐng)求某個(gè)資源。使用GET 方法時(shí),請(qǐng)求參數(shù)和對(duì)應(yīng)的值附加在 URL 后面,利用一個(gè)問(wèn)號(hào)(“?”)代表URL 的結(jié)尾與請(qǐng)求參數(shù)的開(kāi)始,傳遞參數(shù)長(zhǎng)度受限制。例如,/index.jsp?id=100&op=bind、
POST:當(dāng)客戶端給服務(wù)器提供信息較多時(shí)可以使用POST 方法,POST 方法向服務(wù)器提交數(shù)據(jù),比如完成表單數(shù)據(jù)的提交,將數(shù)據(jù)提交給服務(wù)器處理。GET 一般用于獲取/查詢資源信息,POST 會(huì)附帶用戶數(shù)據(jù),一般用于更新資源信息。POST 方法將請(qǐng)求參數(shù)封裝在HTTP 請(qǐng)求數(shù)據(jù)中,以名稱/值的形式出現(xiàn),可以傳輸大量數(shù)據(jù);
4、用戶訪問(wèn)瀏覽器的完整過(guò)程
1、客戶端在瀏覽器中輸入要訪問(wèn)的域名地址,如:www.baidu.com
2、瀏覽器請(qǐng)求解析DNS服務(wù)器,把域名www.baidu.com轉(zhuǎn)換成web服務(wù)器的IP地址。
1)系統(tǒng)首先會(huì)查找本地的DNS緩存和hosts文件信息,確認(rèn)其中是否有與,域名www.baidu.com所對(duì)應(yīng)的IP地址。如果有,就直接訪問(wèn)這個(gè)IP地址所對(duì)應(yīng)的www.baidu.com域名服務(wù)器。
2)如果沒(méi)有找到,那么,系統(tǒng)將會(huì)把瀏覽器的解析請(qǐng)求發(fā)送給本地主機(jī)所指定的DNS服務(wù)器,稱為LDNS。如果LDNS服務(wù)器中有域名www.baidu.com所對(duì)應(yīng)的IP地址,則返回給客戶端的瀏覽器,如果沒(méi)有,則繼續(xù)請(qǐng)求其他DNS服務(wù)器。
3)LDNS服務(wù)器會(huì)從DNS系統(tǒng)的根(.)開(kāi)始請(qǐng)求對(duì)域名www.baidu.com的解析。根DNS服務(wù)器全球只有13臺(tái),根域名服務(wù)器是沒(méi)有域名www.baidu.com解析記錄的。但是它會(huì)有域名www.baidu.com所對(duì)應(yīng)的頂級(jí)域.com的解析記錄,因此直接把頂級(jí)域.com所對(duì)應(yīng)的DNS地址返回給LDNS服務(wù)器。
4)LDNS服務(wù)器獲取到頂級(jí)域.com對(duì)應(yīng)的DNS服務(wù)器地址后,就會(huì)去.com服務(wù)器請(qǐng)求對(duì)www.baidu.com域名的解析。在頂級(jí)域名服務(wù)器也不會(huì)有www.baidu.com的解析記錄的。但是它有www.baidu.com的父級(jí)域名,即baidu.com。因此頂級(jí)域名.com服務(wù)器又會(huì)把baidu.com所對(duì)應(yīng)的DNS服務(wù)器的IP地址返回給LDNS。
5)LDNS服務(wù)器收到baidu.com所對(duì)應(yīng)的IP地址后,就會(huì)去baidu.com域名服務(wù)器請(qǐng)求對(duì)www.baidu.com的域名解析。Baidu.com域名對(duì)應(yīng)的DNS服務(wù)器是該域名的授權(quán)DNS服務(wù)器。這個(gè)DNS服務(wù)器就是企業(yè)購(gòu)買(mǎi)域名時(shí)用于管理解析的服務(wù)器。
6)baidu.com域名DNS服務(wù)器會(huì)吧www.baidu.com域名所對(duì)應(yīng)的IP地址給解析出來(lái),然后發(fā)給LDNS。
7)LDNS把解析出來(lái)的結(jié)果,www.baudu.com所對(duì)應(yīng)的IP地址發(fā)送給客戶端的瀏覽器。并且LDNS也會(huì)將其域名和對(duì)應(yīng)的地址緩存到cache中。
8)客戶端瀏覽器收到后,也會(huì)將其域名以及對(duì)應(yīng)的IP地址緩存的到DNS緩存和hosts文件中。
3、瀏覽器從訪問(wèn)的IP地址(URL)解析出默認(rèn)的斷后號(hào):80
4、瀏覽器通過(guò)解析后得到的IP地址和端口號(hào)進(jìn)行web服務(wù)器建立一條TCP連接通道。
1)第一次握手:
建立連接時(shí),客戶端A發(fā)送SYN包(SYN=j)到服務(wù)器B,并進(jìn)入SYN_SEND狀態(tài),等待服務(wù)器B確認(rèn)。
2)第二次握手:
服務(wù)器B收到SYN包,必須確認(rèn)客戶A的SYN(ACK=j+1),同時(shí)自己也發(fā)送一個(gè)SYN包(SYN=k),即SYN+ACK包,此時(shí)服務(wù)器B進(jìn)入SYN_RECV狀態(tài)。
3)第三次握手:
客戶端A收到服務(wù)器B的SYN+ACK包,向服務(wù)器B發(fā)送確認(rèn)包ACK(ACK=k+1),此包發(fā)送完畢,客戶端A和服務(wù)器B進(jìn)入ESTABLISHED狀態(tài),完成三次握手。
5、建立TCP連接之后,瀏覽器向web服務(wù)器發(fā)送一條HTTP請(qǐng)求報(bào)文。
1)請(qǐng)求行
作用:用來(lái)說(shuō)明客戶端想要做什么。
內(nèi)容:包括方法字段GET和URL字段以及HTTP協(xié)議版本
2)請(qǐng)求頭
作用:通過(guò)客戶端把請(qǐng)求的相關(guān)信息發(fā)給服務(wù)器
內(nèi)容:包括媒體類型、語(yǔ)言類型、支持壓縮、客戶端類型、主機(jī)等信息。
3)空行
作用:告訴服務(wù)器空行以下內(nèi)容不屬于請(qǐng)求頭部信息。
4)請(qǐng)求報(bào)文主體
作用:用來(lái)說(shuō)明客戶端具體想要做的事情。
內(nèi)容:查看信息、應(yīng)用post方法。
6、web服務(wù)器響應(yīng)并讀取瀏覽器的請(qǐng)求信息,然后返回一條HTTP響應(yīng)報(bào)文。
1)狀態(tài)行
作用:用來(lái)說(shuō)明服務(wù)端響應(yīng)客戶端的狀態(tài)。
內(nèi)容:包括洗衣及版本號(hào)、數(shù)字狀態(tài)碼、狀態(tài)情況
2)響應(yīng)頭
作用:通過(guò)服務(wù)端把響應(yīng)的相關(guān)信息給客戶端
內(nèi)容:包括Location、server、connect、vary等
3)空行
作用:告訴客戶端空行以下內(nèi)容不屬于響應(yīng)頭部信息。
4)響應(yīng)報(bào)文主體
作用:用來(lái)裝載著要返回給客戶端的數(shù)據(jù)
內(nèi)容:包括文本、html、視頻或者是圖片。
7、web服務(wù)器關(guān)閉HTTP連接,關(guān)閉TCP連接,web服務(wù)器顯示訪問(wèn)的網(wǎng)站內(nèi)容到屏幕上。
1)第一次揮手:
客戶端A發(fā)送一個(gè)FIN,用來(lái)關(guān)閉客戶A到服務(wù)器B的數(shù)據(jù)傳送。
2)第二次揮手:
服務(wù)器B收到這個(gè)FIN,它發(fā)回一個(gè)ACK,確認(rèn)序號(hào)為收到的序號(hào)加1。和SYN一樣,一個(gè)FIN將占用一個(gè)序號(hào)。
3)第三次揮手:
服務(wù)器B關(guān)閉與客戶端A的連接,發(fā)送一個(gè)FIN給客戶端A。
4)第四次揮手:
客戶端A發(fā)回ACK報(bào)文確認(rèn),并將確認(rèn)序號(hào)設(shè)置為收到序號(hào)加1。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。