當我們遊覽網頁的時候, 在輸入連結點選回車之後到看到新網頁這中間究竟發生了什麼?
1. 遊覽器首先解析URL, 然後檢查cache, 觀察該輸入的URL是否在cache中。
如果不在cache中。遊覽器會要求 OS 根據 URL 去得到相應的IP地址, 不同的作業系統可能有不同的方法,但是簡而言之就是,OS 通過 和 DNS 伺服器 進行互動 取得 對應的IP 地址。
2. 遊覽器開始和目標伺服器進行TCP連線 - 此時傳輸的包中不包含資料
TCP連線是通過三次 “握手” 完成的. 為什麼需要三次握手?
第一次握手: 客戶端傳送syn包(syn=j)到伺服器, 並進入SYN_SEND狀態,等待伺服器確認;
第二次握手: 伺服器收到syn包, 必須確認客戶的SYN (ack=j+1), 同時自己也傳送一個SYN包 (syn=k), 即SYN+ACK包, 此時伺服器進入SYN_RECV狀態;
第三次握手: 客戶端收到SYN+ACK包, 並向伺服器傳送確認包ACK(ack=k+1), 之後伺服器和客戶端進入ESTABLISHED狀態,完成三次握手
3. 客戶端和服務端通過TCP連線, 進行資料傳輸 - 開始真正的資料交流
值得注意的是, TCP連線時使用socket 連線實現的, 當連線完成時, 服務端和客戶端使用socket進行通訊(Socket 就是一個API來表達TCP協議).連線建立後, 客戶端按照HTTP的協議向服務端傳送請求(請求中包含什麼), 注意, 這個請求是通過傳輸層的TCP進行傳輸的, 每次請求和響應都需要建立新的TCP連結(HTTP/1.1中將只建立一次TCP連結而重複的使用它傳輸一系列的請求和響應,提高效率)
4. 客戶端接受到來自伺服器的資料
首先瀏覽器會對響應進行反應, 觀察是否是錯誤碼如(404等). 如果正確就對將其放到cache中並進行解碼,顯示給使用者
什麼是TCP/IP?
TCP/IP是一組協議組的統稱. 主要包括了四個層的協議: 應用層(Application Layer), 傳輸層(Transport Layer), 網路層(Internet Layer), 鏈路層(LinkLayer).
應用層: 是用於不同伺服器應用之間的資料建立和交流的。 主要包括: SMTP(Simple Mail Transfer Protocol), FTP(File Transfer Protocol), SSH(Secure Shell), HTTP(Hypertext Transfer Protocol), DNS(Domain Name Service)等協議
傳輸層: 是用於不同伺服器之間的資料傳輸.包括 TCP協議和UDP協議
網路層: 提供路由和定址的功能, 擁有一定的擁擠控制和流量控制的功能. 主要包括: IP. ARP. RARP. ICMP等
關係如下
HTTP 請求中包含什麼?
包含: 請求方法、URI、協議版本以及相關對MIME樣式的資訊.
為什麼需要三次握手?
防止已經失效的連線請求又傳送到了服務端,因而產生錯誤。例如:
client發出的第一個連線請求報文段並沒有丟失,而是在某個網路結點長時間的滯留了,以致延誤到連線釋放以後的某個時間才到達server。本來這是一個早已失效的報文段。但server收到此失效的連線請求報文段後,就誤認為是client再次發出的一個新的連線請求。於是就向client發出確認報文段,同意建立連線。假設不採用“三次握手”,那麼只要server發出確認,新的連線就建立了。由於現在client並沒有發出建立連線的請求,因此不會理睬server的確認,也不會向server傳送資料。但server卻以為新的運輸連線已經建立,並一直等待client發來資料。這樣,server的很多資源就白白浪費掉了。
有問題歡迎指出!
相關文章
- 當你在瀏覽器輸入一個網址,回車後究竟發生了什麼?瀏覽器
- 輸入完網址按下回車,到看到網頁這個過程中發生了什麼。網頁
- 在瀏覽器輸入一個網址回車後,發生了什麼?瀏覽器
- 從瀏覽器輸入網址回車到看到頁面過程到底經歷了什麼?瀏覽器
- 從輸入url到顯示網頁發生了什麼網頁
- 當你開啟網頁的時候,世界都發生了什麼(1)網頁
- 網紅面試題:從輸入 url 到看到頁面發生了什麼面試題
- 瀏覽器位址列輸入url回車之後發生了些什麼瀏覽器
- 當你在瀏覽器中輸入URL回車後會發生什麼?瀏覽器
- 當你在瀏覽器中輸入Google.com並且按下回車之後發生了什麼?瀏覽器Go
- 一個網頁從輸入地址回車,到完整展示網頁內容這段時間裡,做了哪些工作網頁
- 在瀏覽器輸入 URL 回車之後發生了什麼(流程圖,超詳細版)瀏覽器流程圖
- 從在瀏覽器中輸 URL 網址之後到底發生了什麼?瀏覽器
- 從你輸入網址,到看到網頁——詳解中間發生的過程網頁
- 終極解密輸入網址按回車到底發生了什麼解密
- 溫故知新-輸入網址-顯示網頁-到底到底到底到底-發生了什麼?網頁
- 在瀏覽器裡輸入網址,按下Enter鍵之後發生了什麼瀏覽器
- 從輸入URL到頁面載入到底發生了什麼
- 在瀏覽器位址列輸入url到按下回車發生了什麼?瀏覽器
- 【瀏覽器】從URL輸入到頁面展現到底發生了什麼?瀏覽器
- 史上最詳細的經典面試題 從輸入URL到看到頁面發生了什麼?面試題
- 經典面試題—在瀏覽器中輸入URL之後發生了什麼?面試題瀏覽器
- oracle commit的時候究竟發生了什麼OracleMIT
- 經典面試題:在瀏覽器位址列輸入一個 URL 後回車,背後發生了什麼面試題瀏覽器
- 從輸入頁面地址到展示頁面資訊都發生了些什麼?
- 網頁開啟時都發生了什麼?我被嚇著了網頁
- 當我們談 Java 併發的時候,你們在談什麼?Java
- K8S學習之當我們部署應用的時候都發生了什麼?K8S
- (詳解)從瀏覽器輸入 URL 到頁面展示過程發生了什麼?瀏覽器
- 當我們討論TCP的連線運輸管理時,我們在說什麼TCP
- 瀏覽器從輸入網址到顯示都發生了些什麼?瀏覽器
- 從輸入URL到頁面載入完成的過程中都發生了什麼?
- 一個頁面從輸入 URL 到頁面載入顯示完成,這個過程中都發生了什麼
- 一個頁面從輸入 URL 到頁面載入顯示完成,這個過程中都發生了什麼?
- 遊戲的特質:當我們說“play”的時候,究竟在說什麼?遊戲
- 使用者輸入一個網址到頁面展示內容的這段時間內,瀏覽器和伺服器都發生了生麼事情?瀏覽器伺服器
- 當我們說外掛系統的時候,我們在說什麼
- 在瀏覽器中從URL輸入到頁面展現到底發生什麼?瀏覽器