FP(First Paint)是從頁面加載到首次開始繪制的時長,這個指標直接影響用戶的跳出率睡陪。更快的頁面響應意味著更多的PV寺渗、更高的參與度以及更高的轉化率。影響FP指標的一個重要因素就是網(wǎng)絡加載速度兰迫。
在web世界中的TCP/IP是如何工作的信殊?
文件傳輸過程
在網(wǎng)絡中,一個文件通常會被拆分為很多數(shù)據(jù)包來進行傳輸汁果,而數(shù)據(jù)包在傳輸過程中又有很大概率丟失或者出錯涡拘,如何保證頁面文件能夠被完整的送達瀏覽器呢?
- 數(shù)據(jù)包如何送達主機
互聯(lián)網(wǎng)實際上是一套理念和協(xié)議組成的體系架構据德■Γ互聯(lián)網(wǎng)中的數(shù)據(jù)是通過數(shù)據(jù)包來傳輸?shù)孽纬担绻l(fā)送的數(shù)據(jù)很大,就會被拆分為很多小數(shù)據(jù)包來傳輸橱野。
1. IP:把數(shù)據(jù)包送達目的主機
數(shù)據(jù)包要在互聯(lián)網(wǎng)上進行傳輸朽缴,就要符合網(wǎng)際協(xié)議(簡稱IP)標準∷互聯(lián)網(wǎng)上不同的在線設備都有唯一的地址密强,計算機的地址就稱為IP地址,訪問任何網(wǎng)絡實際上只是你的計算機向另一臺計算機請求信息蜗元。
如果想要把一個數(shù)據(jù)包從主機A發(fā)送給主機B或渤,那么在傳輸之前,數(shù)據(jù)包會被附加上主機B的IP地址信息许帐,這樣在傳輸過程中才能正確尋址劳坑。額外的,數(shù)據(jù)包上還會附加上主機A本身的IP地址成畦,有了這些信息主機B才可以回復信息給主機A距芬。這些附加的信息會被封裝進一個叫IP頭的數(shù)據(jù)結構里。IP頭是IP數(shù)據(jù)包開頭的信息循帐,包含IP版本框仔、源IP地址、目標IP地址拄养、生存時間等信息离斩。
把網(wǎng)絡簡單分為三層結構:
上層-->網(wǎng)絡層-->底層
(1)上層將數(shù)據(jù)包交給網(wǎng)絡層
(2)網(wǎng)絡層將IP頭附加到數(shù)據(jù)包上,組成新的IP數(shù)據(jù)包瘪匿,并交給底層
(3)底層通過物理網(wǎng)絡將數(shù)據(jù)包傳輸給主機B
(4)數(shù)據(jù)包被傳輸?shù)街鳈CB的網(wǎng)絡層跛梗,主機B拆開數(shù)據(jù)包的IP頭信息,并將拆開來的數(shù)據(jù)交給上層
(5)最終棋弥,數(shù)據(jù)包就達到了主機B的上層了
2. UDP:把數(shù)據(jù)包送達應用程序
IP是非常底層的協(xié)議核偿,只負責把數(shù)據(jù)包傳送到對方電腦,但是對方電腦并不知道把數(shù)據(jù)包交給哪個程序顽染。因此需要基于IP之上開發(fā)能和應用打交道的協(xié)議漾岳,最常見的是”用戶數(shù)據(jù)包協(xié)議(User Datagram Protocol)“,簡稱UDP粉寞。
UDP中一個最重要的信息是端口號尼荆,端口號其實就是一個數(shù)字,每個想訪問網(wǎng)絡的程序都需要綁定一個端口號唧垦。通過端口號UDP就能把指定的數(shù)據(jù)包發(fā)送給指定的程序了捅儒,所以IP通過IP地址信息把數(shù)據(jù)包發(fā)送到指定的電腦,而UDP通過端口號把數(shù)據(jù)包分發(fā)給正確的程序。和IP頭一樣野芒,端口號會被裝進UDP頭里面蓄愁,UDP頭再和原始數(shù)據(jù)包合并組成新的UDP數(shù)據(jù)包双炕。UDP頭中除了目的端口狞悲,還有源端口號等信息。
(1)上層將數(shù)據(jù)包交給傳輸層
(2)傳輸層會在數(shù)據(jù)包前面附加上UDP頭妇斤,組成新的UDP數(shù)據(jù)包摇锋,再將新的UDP數(shù)據(jù)包交給網(wǎng)絡層
(3)網(wǎng)絡層再將IP頭附加到數(shù)據(jù)包上,組成新的IP數(shù)據(jù)包并傳給底層
(4)底層通過物理傳輸將數(shù)據(jù)包送達至主機B站超,到達主機B的網(wǎng)絡層
(5)主機B的網(wǎng)絡層拆開IP頭信息荸恕,將拆開來的數(shù)據(jù)部分交給傳輸層
(6)傳輸層拆開UDP頭,通過端口號死相,將數(shù)據(jù)送到到上層的應用程序
UDP不能保證數(shù)據(jù)的可靠性融求,但是傳輸速度非常快算撮,所以UDP會應用在一些關注速度生宛、但不那么嚴格要求數(shù)據(jù)完整性的領域,如在線視頻肮柜,互動游戲等陷舅。
3. TCP:把數(shù)據(jù)完整的送達應用程序
對于瀏覽器請求,或者郵件這類要求數(shù)據(jù)傳輸可靠性的應用审洞,如果使用UDP傳輸會存在兩個問題:一是數(shù)據(jù)包在傳輸過程中容易丟失莱睁,另一個是大文件被拆分成很多小的數(shù)據(jù)包來傳輸,這些小的數(shù)據(jù)包會經(jīng)過不同的路由芒澜,并在不同的時間到達接收端仰剿,而UDP協(xié)議并不知道如何組裝這些數(shù)據(jù),從而把這些數(shù)據(jù)包還原成完整的文件痴晦。
基于這兩個問題南吮,引入了TCP(Transmission Control Protocol)傳輸控制協(xié)議,是一種面向連接的阅酪、可靠的旨袒、基于字節(jié)流的傳輸層通信協(xié)議。相對于UDP术辐,TCP有下面兩個特點:
一:對于數(shù)據(jù)包丟失的情況砚尽,TCP提供重傳機制;
二:TCP引入了數(shù)據(jù)包排序機制辉词,用來保證把亂序的數(shù)據(jù)包組合成一個完整的文件
和UDP頭一樣必孤,TCP頭除了包含目標端口和本機端口號外,還提供了用于排序的序列號,以便接收端通過序列號來重排數(shù)據(jù)包敷搪。
一個完整的TCP連接的生命周期包括了“建立連接”兴想、“傳輸數(shù)據(jù)”和“斷開連接”
三個階段。
(1)首先赡勘,建立連接階段嫂便。這個階段是通過“三次握手”來建立客戶端與服務器之間的連接。TCP提供面向連接的通信傳輸闸与。面向連接是指在數(shù)據(jù)通信開始之前先做好兩端之間的準備工作毙替。所謂三次握手,是指在建立一個TCP連接時践樱,客戶端和服務器總共要發(fā)送三個數(shù)據(jù)包以確認連接的建立厂画。
(2)其次,傳輸數(shù)據(jù)包拷邢。接收端需要對每個數(shù)據(jù)包進行確認操作袱院,也就是接收端在接收到數(shù)據(jù)包之后,需要發(fā)送確認數(shù)據(jù)包給發(fā)送端瞭稼。所以當發(fā)送端發(fā)送了一個數(shù)據(jù)包之后忽洛,在規(guī)定時間內沒有接收到接收端反饋的確認消息,則判斷為數(shù)據(jù)包丟失弛姜,并觸發(fā)發(fā)送端的重發(fā)機制脐瑰。同樣,一個大的文件在傳輸過程中會被拆分成很多小的數(shù)據(jù)包廷臼,這些數(shù)據(jù)包到達接收端后苍在,接收端會按照TCP頭中的序號為其排序,從而保證組成完整的數(shù)據(jù)荠商。
(3)最后寂恬,斷開連接階段。數(shù)據(jù)傳輸完成之后莱没,就要終止連接了初肉,涉及到最后一個階段的“四次揮手”來保證雙方都能斷開連接。
- 互聯(lián)網(wǎng)中的數(shù)據(jù)是通過數(shù)據(jù)包來傳輸?shù)氖味悖瑪?shù)據(jù)包在傳輸過程中容易丟失或出錯
- IP負責把數(shù)據(jù)包送達目的主機
- UDP負責把數(shù)據(jù)包送達具體應用
- TCP保證了數(shù)據(jù)完整的傳輸牙咏,它的連接可以分為三個階段:建立連接、傳輸數(shù)據(jù)和斷開連接嘹裂。