從瀏覽器輸入網址、回車后,到用戶看到網頁內容,經過的步驟如下:
(1)dns解析,獲取ip地址;
(2)建立TCP連接,3次握手;
(3)發送HTTP請求報文;
(4)服務器接收請求並作處理;
(5)服務器發送HTTP響應報文;
(6)斷開TCP連接,4次握手。
--------------------------------------------------------------------------------
(1)DNS解析階段
http://www.cnblogs.com/yuan2016/p/DNS.html
本機系統先訪問本機的hosts文件和緩存,再去找dns(叫做local dns)詢問,一般在運營商那里。
(2)建立TCP連接,3次握手
客戶端首先與服務器建立連接,發送SYN請求;服務器收到請求后,發送SYN/ACK確認連接請求;客戶端收到后再發送ACK進行確認。
(3)HTTP請求報文
分為4部分:
① 請求行(3部分信息):請求方法、請求url、http協議版本。
請求方法:GET、POST、HEAD、PUT等;
HTTP協議版本:一般為兩種:http1.0、http1.1。其中,http1.0在每次請求之后,都釋放連接,針對網頁中的不同元素,如視頻、圖片,要分別進行tcp連接,需請求多次;而http1.1可進行持久連接,例如,網頁中的元素可一次性請求完,而只需進行一次tcp連接。
② 請求頭部。客戶端的信息、字符集等。
③ 空白行。
④ 請求主體。
(5)服務器的HTTP響應報文
也分為4部分:
① 起始行:http協議版本、狀態碼、響應頭部信息。
狀態碼:
(1)100~199 表示成功接收請求,要求客戶端繼續提交下一次請求才能完成整個處理過程 。
(2)200~299 表示成功接收請求並已完成整個處理過程 。
(3)300~399 為完成請求,客戶需進一步細化請求。例如,請求的資源已經移動一個新地址。
(4)400~499 客戶端的請求有錯誤。
(5)500~599 服務器端出現錯誤。
常見的幾種如下:
正確:200;
網站被重定向,永久跳轉:301;
資源存在但沒有權限,服務器設置了訪問權限(Forbidden):403;
資源不存在:404;
服務器內部錯誤,無法完成用戶請求:500;
連接不上后台服務器(Bad Gateway):502;
回復超時(Gateway Timeout):504。
② 響應頭部。
③ 空行。
④ 響應主體。靜態網頁一般就是html,無法和用戶進行交互;動態網頁,如:jsp、php、asp等,可交互以及顯示特效;偽靜態,就是動態網頁利用rewrite重寫技術變成靜態網頁,目的是方便搜索引擎收錄,搜索引擎對url的問號等識別不好,提高網站被搜索到的幾率。
(6)斷開TCP連接,4次握手
① 客戶端發送FIN=1的數據包到服務端,並進入wait 1狀態;
② 服務端接收到之后,發送ACK進行確認,表示前面的數據全都收到了,並釋放客戶端到服務端的連接,進入close wait狀態,此時服務端仍可向客戶端發送數據;
③ 客戶端收到服務器的ACK之后,進入WAIT 2狀態,進一步等待服務器發出連接釋放的數據段;
④ 當服務器發送完全部的數據后,釋放服務器向客戶端的TCP傳輸連接,向客戶機發送FIN=1,ACK=1的數據包,並進入LAST ACK(最后確認)狀態,等待客戶端的確認;
⑤ 客戶端收到服務器的FIN+ACK數據包后,向服務器發送一個ACK=1的數據包,進入到TIME WAIT狀態,需等待2MSL時間(以防最后一個ACK數據包丟失),然后,客戶端才進入closed狀態,釋放tcp連接。
⑥ 服務器收到客戶端的ACK數據包后,進入CLOSED狀態,釋放TCP連接。完成整個TCP傳輸連接釋放過程。
整個TCP建立、釋放過程如下圖所示: