當我們遊覽網頁的時候, 在輸入連結點選回車之後到看到新網頁這中間究竟發生了什麼?

殷老實發表於2016-12-08

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的很多資源就白白浪費掉了。





有問題歡迎指出!

    

相關文章