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