1. 程式人生 > >瀏覽器輸入一個URL地址後發生的事情

瀏覽器輸入一個URL地址後發生的事情

在瀏覽器中輸入一個URL至頁面呈現,發生的事情?

1、域名解析:瀏覽器獲得URL地址,向作業系統請求該URL對應的IP地址,作業系統查詢DNS(首先查詢本地HOST檔案,沒有則查詢網路)獲得對應的IP地址

解釋:

把URL分割成幾個部分:協議、網路地址、資源路徑

協議:指從該計算機獲取資源的方式,常見的是HTTP、FTP

網路地址:可以是域名或者是IP地址,也可以包括埠號,如果不註明埠號,預設是80埠

如果地址不是一個IP地址,則需要通過DNS(域名系統)將該地址解析成IP地址,IP地址對應著網路上的一臺計算機,DNS伺服器本身也有IP,你的網路設定包含DNS伺服器的IP,例如,www.abc.com不是一個IP,則需要向DNS詢問請求www.abc.com對應的IP,獲得IP,在這個過程中,你的電腦直接詢問DNS伺服器可能沒有發現www.abc.com對應的IP,就會向它的上級伺服器詢問,這樣依次一層層向上級找,最高可達根節點,直到找到或者全部找不到為止

埠號就相當於銀行的視窗,不同的視窗負責不同的服務,如果輸入www.abc.com:8080/,則表示不使用預設的80埠,而使用指定的8080埠

2、確認好了IP和埠號,則可以向該IP地址對應的伺服器的該埠號發起TCP連線請求

3、伺服器接收到TCP連線請求後,回覆可以連線請求

4、瀏覽器收到回傳的資料後,還會向伺服器傳送資料包,表示三次握手結束

5、三次握手成功後,開始通訊,根據HTTP協議的要求,組織一個請求的資料包,裡面包含請求的資源路徑、你的身份資訊等,例如,www.abc.com/images/1/表示的資源路徑是images/1/,傳送後,伺服器響應請求,將資料返回給瀏覽器,資料可以是根據HTML協議組織的網頁,裡面包含頁面的佈局、文字等等,也可以是圖片或者指令碼程式等,如果資源路徑指定的資源不存在,伺服器就會返回404錯誤,如果返回的是一個頁面,則根據頁面裡的一些外鏈URL地址,重複上述步驟,再次獲取

6、渲染頁面,並開始響應使用者的操作

7、視窗關閉時,瀏覽器終止與伺服器的連線

以上只是基本步驟,還有一些可選的步驟,例如:網頁快取、連線池、載入策略、加密解密、代理中轉等

TCP表示傳輸控制協議,是一種面向連線的、可靠的、基於位元組流的傳輸層通訊協議

TCP/IP即傳輸控制協議/網間協議,是為廣域網設計的

TCP三次握手和四次揮手

TCP三次握手:

所謂的三次握手,是指建立一個TCP連線時,需要客戶端和伺服器端總共傳送三個包,三次握手的目的是連線伺服器的指定埠,建立TCP連線,並同步連線雙方的序列號和確認號並交換TCP視窗大小資訊,在SOCKET程式設計中,客戶端執行connect()時,將會觸發三次握手


解釋:

ACK:TCP協議規定,只有ACK=1時有效,也規定連線建立後所有傳送的報文的ACK必須為1

SYN:在連線建立時用來同步序號,當SYN=1而ACK=0時,表明這是一個連線請求報文,對方若同意建立連線,則應在響應報文中使SYN=1和ACK=1,因此,SYN置1就表示這是一個連線請求或連線接受報文

FIN:即終結的意思,用來釋放一個連線,當FIN=1時,表明此報文段的傳送方的資料已經發送完畢,並要求釋放連線

為什麼要進行三次握手(兩次確認)?

主要是為了防止客戶端發出的已失效的連線請求報文段突然又傳送到了伺服器端,因而產生錯誤,考慮一種正常情況,A發出連線請求,但因連線請求報文丟失而未收到確認,於是A再重傳一次連線請求,後來收到了確認,建立了連線,資料傳輸完畢後,就釋放了連線,A共傳送了兩個連線請求報文段,其中第一個丟失,第二個到達了B,正常,再考慮一種異常情況,即A發出的第一個連線請求報文段並沒有丟失,而是在某個網路節點長時間滯留了,以致延誤到連線釋放以後的某個時間才到達B,本來這是一個早已失效的報文段,但B收到此失效的連線請求報文段後,會誤以為是A又發出一次新的連線請求,於是就向A發出確認報文段,同意建立連線,假定不採用第三次握手,那麼只要B發出確認,新的連線就建立了,一直等待A傳送資料過來,使得B的許多資源就浪費了,所以採用三次握手的方法可以防止上述現象的發生,在剛才的情況下,A不會向B發出第二次確認,B由於收不到確認,就知道A並沒有要求建立連線

TCP四次揮手:

TCP連線的拆除需要傳送四個包,客戶端或者伺服器端均可主動發起揮手動作,在SOCKET程式設計中,任何一方執行close()即可產生揮手操作

解釋:當A沒有資料要傳送時,就要釋放A這邊的連線,A會發送一個報文(沒有資料),B收到後會給應用程式一個信,這時候A那邊的連線已經關閉,即A不再發送資訊(但仍可接收資訊),A收到B的確認後進入等待狀態,等待B請求釋放連線,B資料傳送完成後就向A請求連線釋放,A收到後回覆一個確認資訊,並等待2MSL時間

為什麼要等待呢?

考慮到這種情況,B向A傳送釋放連線請求,但這個報文丟失了,A沒有接收到不會發送確認資訊,B超時會重傳,這時A在等待時間內還能夠接收到這個請求,再回復一個確認就行了

另外伺服器B存在一個保活狀態,如果A突然宕機了,保活時間到了後,B會發送探測資訊,以決定是否釋放連線

常見的狀態程式碼、狀態描述:

200 客戶端請求成功

400 客戶端請求有語法錯誤,不能被伺服器理解

401 請求未經授權

403 伺服器收到請求,但是拒絕提供服務

404 請求資源不存在

500 伺服器發生了不可預期的錯誤

503 伺服器當前不能處理客戶端請求,一段時間後可能恢復正常

參考連結: