1. 用戶訪問網站的流程
用戶訪問網站的流程 用戶在瀏覽器中輸入 www.taobao.com 到顯示頁面的過程
1.1 訪問流程
利用DNS協議進行域名解析 --> 建立tcp協議三次握手過程 --> 客戶端發出訪問網站相應頁面請求(發出http協議請求報文) --> 服務端發出相應訪問頁面的請求信息(發出http) --> 斷開tcp協議四次揮手過程
1.2 利用DNS協議進行域名解析
DNS稱為域名系統,主要作用是負責把域名解析對應的IP地址。就是把www.baidu.com 解析為對應的IP地址 111.13.101.208,有了IP地址就相當於知道百度服務器在哪了,接下來就是去找它。
DNS體系中,查找記錄,分為兩種查找方式:遞歸查詢和迭代查詢。
1、 遞歸查詢:由DNS客戶端發起,一級一級的向上提交查詢申請,直至查詢終止
2、 迭代查詢:一般情況下由DNS服務器之間完成,即本地DNS向上一級DNS提交查詢,上級DNS並不直接返回查詢結果,而是告知DNS應該向哪里去查找。
在真正的DNS查詢過程中,是包含遞歸查詢和迭代查詢的。無論任何方式的查找過程,在每個環節,都會先查找緩存。DNS服務器如果沒有了緩存就失去了意義。。。
請記住查詢順序:
HOSTS表--> 本地DNS -->上層DNS(包括根DNS)
1.3 建立tcp協議三次握手過程
好了經過DNS解析,現在我們已經知道了百度服務器的地址(111.13.101.208),可以訪問它了。
約會也得先發個邀請吧,網絡也一樣。先建立連接,才可以傳輸數據呢。接下來看看怎么和百度服務器約會吧。
1.3.1 簡單說明TCP協議
IP 協議定義了一套自己的地址規則,稱為 IP 地址。它實現了路由功能,允許某個局域網的 A 主機,向另一個局域網的 B 主機發送消息。
IP 協議只是一個地址協議,並不保證數據包的完整。如果路由器丟包(比如緩存滿了,新進來的數據包就會丟失),就需要發現丟了哪一個包,以及如何重新發送這個包。這就要依靠 TCP 協議。
簡單說,TCP 協議的作用是,保證數據通信的完整性和可靠性,防止丟包。
TCP三次握手建立過程簡單說明:
01.由客戶端(用戶)發送建立TCP連接的請求報文,其中報文中包含seq序列號,是由發送端隨機生成的。
並且還將報文中SYN字段置為1,表示需要建立TCP連接請求。
02。服務端(就是百度服務器)會回復客戶端(用戶)發送的TCP連接請求報文,其中包含seq序列號,也是由回復端隨機生成的,
並且將回復報文的SYN字段置1,而且會產生ACK驗證字段,ACK驗證字段數值是在客戶端發過來的seq序列號基礎上加1進行回復:
並且還會回復ack確認控制字段,以便客戶端收到信息時,知曉自己的TCP建立請求已得到了確認。
03.客戶端收到服務端發送的TCP建立請求后,會使自己的原有序列號加1進行再次發送序列號,
並且再次回復ACK驗證請求,在B端發送過來的seq基礎上加1,進行回復;同時也會回復ack確認控制字段,
以便B收到信息時,知曉自己的TCP建立請求已經得到了確認。
1.4 客戶端發出訪問網站相應頁面請求(發出http協議請求報文)
建立連接后,發送請求報文,想看什么數據。 輸入www.baidu.com時,默認請求的是index.html首頁文件
1.4.1 請求報文結構:
1. 請求行:
①. 請求的方法(get post)
②. 請求的數據信息(默認請求index.html首頁文件)
③. 請求http協議版本
tcp協議分為長連接(http1.1)和短連接(http1.0)
2.請求頭:
3.空行:
4.請求主體:get方法沒有請求主體內容 post方法會有請求主體信息
1.5 服務端發出相應訪問頁面的請求信息(發出http響應報文)
1.起始行(響應行)
①. HTTP協議版本信息
②. 響應的狀態碼信息(請求成功狀態碼 200)
③. 響應狀態碼說明信息
2.響應頭部:
3.空行:
4.響應主體內容:一般為html css js 等等代碼信息
1.6 斷開tcp協議四次揮手過程
當客戶端和服務器通過三次握手建立了TCP連接以后,當數據傳送完畢,肯定是要斷開TCP連接的啊。那對於TCP的斷開連接,這里就有了神秘的“四次揮手”。
- 第一次揮手:
Client發送一個FIN,用來關閉Client到Server的數據傳送,Client進入FIN_WAIT_1狀態。 - 第二次揮手:
Server收到FIN后,發送一個ACK給Client,確認序號為收到序號+1(與SYN相同,一個FIN占用一個序號),Server進入CLOSE_WAIT狀態。 - 第三次揮手:
Server發送一個FIN,用來關閉Server到Client的數據傳送,Server進入LAST_ACK狀態。 - 第四次揮手:
Client收到FIN后,Client進入TIME_WAIT狀態,接着發送一個ACK給Server,確認序號為收到序號+1,Server進入CLOSED狀態,完成四次揮手。