阿里云代理商:用戶訪問網(wǎng)站經(jīng)過了那些過程?
建站服務(wù)器
在瀏覽器輸入想要訪問的域名之后,瀏覽器會進(jìn)行域名解析獲得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),而不用去+·記住能夠被機(jī)器直接讀取的IP數(shù)串。通過主機(jī)名,最終得到該主機(jī)名對應(yīng)的IP地址的過程叫做域名解析(或主機(jī)名解析)。DNS協(xié)議運行在UDP協(xié)議之上,使用端口號53。訪問網(wǎng)站的實質(zhì)就是解析其域名得到IP地址,再轉(zhuǎn)向其網(wǎng)站。
2)DNS的解析原理:
原理步驟:
1)系統(tǒng)首先會查找本地的DNS緩存和hosts文件信息,確認(rèn)其中是否有與,域名www.jusoucn.com所對應(yīng)的IP地址。如果有,就直接訪問這個IP地址所對應(yīng)的www.jusoucn.com域名服務(wù)器。
2)如果沒有找到,那么,系統(tǒng)將會把瀏覽器的解析請求發(fā)送給本地主機(jī)所指定的DNS服務(wù)器,稱為LDNS。如果LDNS服務(wù)器中有域名www.jusoucn.com所對應(yīng)的IP地址,則返回給客戶端的瀏覽器,如果沒有,則繼續(xù)請求其他DNS服務(wù)器。
3)LDNS服務(wù)器會從DNS系統(tǒng)的根(.)開始請求對域名www.jusoucn.com的解析。根DNS服務(wù)器全球只有13臺,根域名服務(wù)器是沒有域名www.jusoucn.com解析記錄的。但是它會有域名www.jusoucn.com所對應(yīng)的頂級域.com的解析記錄,因此直接把頂級域.com所對應(yīng)的DNS地址返回給LDNS服務(wù)器。
4)LDNS服務(wù)器獲取到頂級域.com對應(yīng)的DNS服務(wù)器地址后,就會去.com服務(wù)器請求對www.jusoucn.com域名的解析。在頂級域名服務(wù)器也不會有www.jusoucn.com的解析記錄的。但是它有www.jusoucn.com的父級域名的解析記錄,即jusoucn.com。因此頂級域名.com服務(wù)器又會把jusoucn.com所對應(yīng)的DNS服務(wù)器的IP地址返回給LDNS。
5)LDNS服務(wù)器收到j(luò)usoucn.com所對應(yīng)的IP地址后,就會去jusoucn.com域名服務(wù)器請求對www.jusoucn.com的域名解析。jusoucn.com域名對應(yīng)的DNS服務(wù)器是該域名的授權(quán)DNS服務(wù)器。這個DNS服務(wù)器就是企業(yè)購買域名時用于管理解析的服務(wù)器。
6)jusoucn.com域名DNS服務(wù)器會吧www.jusoucn.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ù)臉?biāo)準(zhǔn)。協(xié)議采用了4層的層級結(jié)構(gòu),每一層都呼叫它的下一層所提供的協(xié)議來完成自己的需求。通俗而言:TCP負(fù)責(zé)發(fā)現(xiàn)傳輸?shù)膯栴},一有問題就發(fā)出信號,要求重新傳輸,直到所有數(shù)據(jù)安全正確地傳輸?shù)侥康牡亍6鳬P是給因特網(wǎng)的每一臺聯(lián)網(wǎng)設(shè)備規(guī)定一個地址。
2)各個狀態(tài)的意義如下:
?。?)LISTEN - 偵聽來自遠(yuǎn)方TCP端口的連接請求;
?。?)SYN-SENT -在發(fā)送連接請求后等待匹配的連接請求;
?。?)SYN-RECEIVED - 在收到和發(fā)送一個連接請求后等待對連接請求的確認(rèn);
?。?)ESTABLISHED- 代表一個打開的連接,數(shù)據(jù)可以傳送給用戶;
?。?)FIN-WAIT-1 - 等待遠(yuǎn)程TCP的連接中斷請求,或先前的連接中斷請求的確認(rèn);
?。?)FIN-WAIT-2 - 從遠(yuǎn)程TCP等待連接中斷請求;
?。?)CLOSE-WAIT - 等待從本地用戶發(fā)來的連接中斷請求;
?。?)CLOSING -等待遠(yuǎn)程TCP對連接中斷的確認(rèn);
?。?)LAST-ACK - 等待原來發(fā)向遠(yuǎn)程TCP的連接中斷請求的確認(rèn);
?。?0)TIME-WAIT - 等待足夠的時間以確保遠(yuǎn)程TCP接收到連接中斷請求的確認(rèn);
?。?1)CLOSED - 沒有任何連接狀態(tài);
3)TCP三次握手
所謂三次握手(Three-way Handshake),是指建立一個TCP連接時,需要客戶端和服務(wù)器總共發(fā)送3個包。
三次握手的目的是連接服務(wù)器指定端口,建立TCP連接,并同步連接雙方的序列號和確認(rèn)號并交換 TCP 窗口大小信息.在socket編程中,客戶端執(zhí)行connect()時。將觸發(fā)三次握手。
三次握手過程:
1)第一次握手:建立連接時,客戶端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),同時自己也發(fā)送一個SYN包(SYN=k),即SYN+ACK包,此時服務(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ā)送四個包,因此稱為四次揮手(four-way handshake)??蛻舳嘶蚍?wù)器均可主動發(fā)起揮手動作,在socket編程中,任何一方執(zhí)行close()操作即可產(chǎn)生揮手操作。
四次揮手過程:
1)第一次揮手:客戶端A發(fā)送一個FIN,用來關(guān)閉客戶A到服務(wù)器B的數(shù)據(jù)傳送。
2)第二次揮手:服務(wù)器B收到這個FIN,它發(fā)回一個ACK,確認(rèn)序號為收到的序號加1。和SYN一樣,一個FIN將占用一個序號。
3)第三次揮手:服務(wù)器B關(guān)閉與客戶端A的連接,發(fā)送一個FIN給客戶端A。
4)第四次揮手:客戶端A發(fā)回ACK報文確認(rèn),并將確認(rèn)序號設(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)報文。兩種報文的格式的基本相同。
?。?)請求報文介紹
?。?)請求報文的內(nèi)容與格式有如下:
1)請求行
作用:用來說明客戶端想要做什么。
內(nèi)容:包括方法字段GET和URL字段以及HTTP協(xié)議版本
2)請求頭
作用:通過客戶端把請求的相關(guān)信息發(fā)給服務(wù)器
內(nèi)容:包括媒體類型、語言類型、支持壓縮、客戶端類型、主機(jī)等信息。
3)空行
作用:告訴服務(wù)器空行以下內(nèi)容不屬于請求頭部信息。
4)請求報文主體
作用:用來說明客戶端具體想要做的事情。
內(nèi)容:查看信息、應(yīng)用post方法。
(3)響應(yīng)報文介紹
?。?)請求報文的內(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的認(rèn)識
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.jusoucn.com
2、瀏覽器請求解析DNS服務(wù)器,把域名www.jusoucn.com轉(zhuǎn)換成web服務(wù)器的IP地址。
1)系統(tǒng)首先會查找本地的DNS緩存和hosts文件信息,確認(rèn)其中是否有與,域名www.jusoucn.com所對應(yīng)的IP地址。如果有,就直接訪問這個IP地址所對應(yīng)的www.jusoucn.com域名服務(wù)器。
2)如果沒有找到,那么,系統(tǒng)將會把瀏覽器的解析請求發(fā)送給本地主機(jī)所指定的DNS服務(wù)器,稱為LDNS。如果LDNS服務(wù)器中有域名www.jusoucn.com所對應(yīng)的IP地址,則返回給客戶端的瀏覽器,如果沒有,則繼續(xù)請求其他DNS服務(wù)器。
3)LDNS服務(wù)器會從DNS系統(tǒng)的根(.)開始請求對域名www.jusoucn.com的解析。根DNS服務(wù)器全球只有13臺,根域名服務(wù)器是沒有域名www.jusoucn.com解析記錄的。但是它會有域名www.jusoucn.com所對應(yīng)的頂級域.com的解析記錄,因此直接把頂級域.com所對應(yīng)的DNS地址返回給LDNS服務(wù)器。
4)LDNS服務(wù)器獲取到頂級域.com對應(yīng)的DNS服務(wù)器地址后,就會去.com服務(wù)器請求對www.jusoucn.com域名的解析。在頂級域名服務(wù)器也不會有www.jusoucn.com的解析記錄的。但是它有www.jusoucn.com的父級域名,即jusoucn.com。因此頂級域名.com服務(wù)器又會把jusoucn.com所對應(yīng)的DNS服務(wù)器的IP地址返回給LDNS。
5)LDNS服務(wù)器收到j(luò)usoucn.com所對應(yīng)的IP地址后,就會去jusoucn.com域名服務(wù)器請求對www.jusoucn.com的域名解析。jusoucn.com域名對應(yīng)的DNS服務(wù)器是該域名的授權(quán)DNS服務(wù)器。這個DNS服務(wù)器就是企業(yè)購買域名時用于管理解析的服務(wù)器。
6)jusoucn.com域名DNS服務(wù)器會吧www.jusoucn.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)解析出默認(rèn)的斷后號:80
4、瀏覽器通過解析后得到的IP地址和端口號進(jìn)行web服務(wù)器建立一條TCP連接通道。
1)第一次握手:
建立連接時,客戶端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),同時自己也發(fā)送一個SYN包(SYN=k),即SYN+ACK包,此時服務(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請求報文。
1)請求行
作用:用來說明客戶端想要做什么。
內(nèi)容:包括方法字段GET和URL字段以及HTTP協(xié)議版本
2)請求頭
作用:通過客戶端把請求的相關(guān)信息發(fā)給服務(wù)器
內(nèi)容:包括媒體類型、語言類型、支持壓縮、客戶端類型、主機(jī)等信息。
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,確認(rèn)序號為收到的序號加1。和SYN一樣,一個FIN將占用一個序號。
3)第三次揮手:
服務(wù)器B關(guān)閉與客戶端A的連接,發(fā)送一個FIN給客戶端A。
4)第四次揮手:
客戶端A發(fā)回ACK報文確認(rèn),并將確認(rèn)序號設(shè)置為收到序號加1。
