02|TCP協(xié)議:如何保證頁面文件能被完整送達瀏覽器弥姻?

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ù)”和“斷開連接”
三個階段。


一個TCP連接的生命周期

(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ù)和斷開連接嘹裂。
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末妄壶,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子寄狼,更是在濱河造成了極大的恐慌丁寄,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,084評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異伊磺,居然都是意外死亡盛正,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評論 3 392
  • 文/潘曉璐 我一進店門屑埋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來豪筝,“玉大人,你說我怎么就攤上這事雀彼∪姥粒” “怎么了?”我有些...
    開封第一講書人閱讀 163,450評論 0 353
  • 文/不壞的土叔 我叫張陵徊哑,是天一觀的道長。 經(jīng)常有香客問我聪富,道長莺丑,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,322評論 1 293
  • 正文 為了忘掉前任墩蔓,我火速辦了婚禮梢莽,結果婚禮上,老公的妹妹穿的比我還像新娘奸披。我一直安慰自己昏名,他們只是感情好,可當我...
    茶點故事閱讀 67,370評論 6 390
  • 文/花漫 我一把揭開白布阵面。 她就那樣靜靜地躺著轻局,像睡著了一般。 火紅的嫁衣襯著肌膚如雪样刷。 梳的紋絲不亂的頭發(fā)上仑扑,一...
    開封第一講書人閱讀 51,274評論 1 300
  • 那天,我揣著相機與錄音置鼻,去河邊找鬼镇饮。 笑死,一個胖子當著我的面吹牛箕母,可吹牛的內容都是我干的储藐。 我是一名探鬼主播,決...
    沈念sama閱讀 40,126評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼嘶是,長吁一口氣:“原來是場噩夢啊……” “哼钙勃!你這毒婦竟也來了?” 一聲冷哼從身側響起俊啼,我...
    開封第一講書人閱讀 38,980評論 0 275
  • 序言:老撾萬榮一對情侶失蹤肺缕,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體同木,經(jīng)...
    沈念sama閱讀 45,414評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡浮梢,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,599評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了彤路。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片秕硝。...
    茶點故事閱讀 39,773評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖洲尊,靈堂內的尸體忽然破棺而出远豺,到底是詐尸還是另有隱情,我是刑警寧澤坞嘀,帶...
    沈念sama閱讀 35,470評論 5 344
  • 正文 年R本政府宣布躯护,位于F島的核電站,受9級特大地震影響丽涩,放射性物質發(fā)生泄漏棺滞。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,080評論 3 327
  • 文/蒙蒙 一矢渊、第九天 我趴在偏房一處隱蔽的房頂上張望继准。 院中可真熱鬧,春花似錦矮男、人聲如沸移必。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽崔泵。三九已至,卻和暖如春眨补,著一層夾襖步出監(jiān)牢的瞬間管削,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評論 1 269
  • 我被黑心中介騙來泰國打工撑螺, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留含思,地道東北人。 一個月前我還...
    沈念sama閱讀 47,865評論 2 370
  • 正文 我出身青樓甘晤,卻偏偏與公主長得像含潘,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子线婚,可洞房花燭夜當晚...
    茶點故事閱讀 44,689評論 2 354