如何保證頁面被完整的送達瀏覽器

在衡量 Web 頁面性能的時候有一個重要的指標叫“FP(First Paint)”,是指從頁面加載到首次開始繪製的時長

那什麼影響 FP 指標呢?其中一個重要的因素是網絡加載速度。

要想優化 Web 頁面的加載速度,你需要對網絡有充分的瞭解。而理解網絡的關鍵是要對網絡協議有深刻的認識

Web 世界中的 TCP/IP 是如何工作的

在網絡中,一個文件通常會被拆分爲很多數據包來進行傳輸,而數據包在傳輸過程中又有很大概率丟失或者出錯。那麼如何保證頁面文件能被完整地送達瀏覽器呢?

互聯網中的數據是通過數據包來傳輸的。如果發送的數據很大,那麼該數據就會被拆分爲很多小數據包來傳輸。比如你現在聽的音頻數據,是拆分成一個個小的數據包來傳輸的,並不是一個大的文件一次傳輸過來的

數據包要在互聯網上進行傳輸,就要符合網際協議(Internet Protocol,簡稱 IP)標準。互聯網上不同的在線設備都有唯一的地址,地址只是一個數字,這和大部分家庭收件地址類似,你只需要知道一個家庭的具體地址,就可以往這個地址發送包裹,這樣物流系統就能把物品送到目的地。計算機的地址就稱爲 IP 地址,訪問任何網站實際上只是你的計算機向另外一臺計算機請求信息。如果要想把一個數據包從主機 A 發送給主機 B,那麼在傳輸之前,數據包上會被附加上主機 B 的 IP 地址信息,這樣在傳輸過程中才能正確尋址。額外地,數據包上還會附加上主機 A 本身的 IP 地址,有了這些信息主機 B 纔可以回覆信息給主機 A。


下面我們一起來看下一個數據包從主機 A 到主機 B 的旅程:
上層將含有“極客時間”的數據包交給網絡層;
網絡層再將 IP 頭附加到數據包上,組成新的 IP 數據包,並交給底層;
底層通過物理網絡將數據包傳輸給主機 B;
數據包被傳輸到主機 B 的網絡層,在這裏主機 B 拆開數據包的 IP 頭信息,並將拆開來的數據部分交給上層;
最終,含有“極客時間”信息的數據包就到達了主機 B 的上層了。


IP 是非常底層的協議,只負責把數據包傳送到對方電腦,但是對方電腦並不知道把數據包交給哪個程序,是交給瀏覽器還是交給王者榮耀?因此,需要基於 IP 之上開發能和應用打交道的協議,最常見的是“用戶數據包協議(User Datagram Protocol)”,簡稱 UDP。

UDP 中一個最重要的信息是端口號,端口號其實就是一個數字,每個想訪問網絡的程序都需要綁定一個端口號。通過端口號 UDP 就能把指定的數據包發送給指定的程序了,所以 IP 通過 IP 地址信息把數據包發送給指定的電腦,而 UDP 通過端口號把數據包分發給正確的程序。

下面我們一起來看下一個數據包從主機 A 旅行到主機 B 的路線:
上層將含有“極客時間”的數據包交給傳輸層;
傳輸層會在數據包前面附加上 UDP 頭,組成新的 UDP 數據包,再將新的 UDP 數據包交給網絡層;
網絡層再將 IP 頭附加到數據包上,組成新的 IP 數據包,並交給底層;
數據包被傳輸到主機 B 的網絡層,在這裏主機 B 拆開 IP 頭信息,並將拆開來的數據部分交給傳輸層;
在傳輸層,數據包中的 UDP 頭會被拆開,並根據 UDP 中所提供的端口號,把數據部分交給上層的應用程序;
最終,含有“極客時間”信息的數據包就旅行到了主機 B 上層應用程序這裏。

在使用 UDP 發送數據時,有各種因素會導致數據包出錯,雖然 UDP 可以校驗數據是否正確,但是對於錯誤的數據包,UDP 並不提供重發機制,只是丟棄當前的包,而且 UDP 在發送之後也無法知道是否能達到目的地。雖說 UDP 不能保證數據可靠性,但是傳輸速度卻非常快,所以 UDP 會應用在一些關注速度、但不那麼嚴格要求數據完整性的領域,如在線視頻、互動遊戲等

TCP(Transmission Control Protocol,傳輸控制協議)是一種面向連接的、可靠的、基於字節流的傳輸層通信協議。

相對於 UDP,TCP 有下面兩個特點:
對於數據包丟失的情況,TCP 提供重傳機制;
TCP 引入了數據包排序機制,用來保證把亂序的數據包組合成一個完整的文件。

一個完整的 TCP 連接的生命週期包括了“建立連接”“傳輸數據”和“斷開連接”三個階段。
首先,建立連接階段。這個階段是通過“三次握手”來建立客戶端和服務器之間的連接。TCP 提供面向連接的通信傳輸。面向連接是指在數據通信開始之前先做好兩端之間的準備工作。所謂三次握手,是指在建立一個 TCP 連接時,客戶端和服務器總共要發送三個數據包以確認連接的建立。
其次,傳輸數據階段。在該階段,接收端需要對每個數據包進行確認操作,也就是接收端在接收到數據包之後,需要發送確認數據包給發送端。所以當發送端發送了一個數據包之後,在規定時間內沒有接收到接收端反饋的確認消息,則判斷爲數據包丟失,並觸發發送端的重發機制。同樣,一個大的文件在傳輸過程中會被拆分成很多小的數據包,這些數據包到達接收端後,接收端會按照 TCP 頭中的序號爲其排序,從而保證組成完整的數據。
最後,斷開連接階段。數據傳輸完畢之後,就要終止連接了,涉及到最後一個階段“四次揮手”來保證雙方都能斷開連接。


總結好了,這一節就到這裏,下面我來做一個簡單的總結。

互聯網中的數據是通過數據包來傳輸的,數據包在傳輸過程中容易丟失或出錯。

IP 負責把數據包送達目的主機。

UDP 負責把數據包送達具體應用。

而 TCP 保證了數據完整地傳輸,它的連接可分爲三個階段:建立連接、傳輸數據和斷開連接。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章