丁鹿學(xué)堂:前端工程師要了解的網(wǎng)絡(luò)協(xié)議知識(shí)(2)
互聯(lián)網(wǎng)協(xié)議群(TCPIP協(xié)議群)
類似osi模型,是一種網(wǎng)絡(luò)協(xié)議的概念模型。?是如今應(yīng)用最廣泛的模型。它對(duì)ois進(jìn)行了簡(jiǎn)化,把osi的應(yīng)用層,會(huì)話層和表現(xiàn)層簡(jiǎn)化為了應(yīng)用層。
這樣更符合做架構(gòu)的習(xí)慣。所以總共有5層。
應(yīng)用層,傳輸層,網(wǎng)絡(luò)層,鏈接層,物理層。
應(yīng)用層
提供應(yīng)用間通信能力。
應(yīng)用層是對(duì)頂層api的一個(gè)抽象。比如http協(xié)議。
傳輸層
提供主機(jī)到主機(jī)的通信能力,比如TCP、UDP協(xié)議
比如他們要求主機(jī)帶一個(gè)端口號(hào),這個(gè)端口號(hào)就代表應(yīng)用。瀏覽器常用的是80端口,代表是web服務(wù)。
網(wǎng)絡(luò)層
提供地址到地址的通信能力
比如ip協(xié)議。數(shù)據(jù)從一個(gè)ip地址到另一個(gè)ip地址,中間會(huì)有很多網(wǎng)絡(luò)設(shè)備,通過ip協(xié)議進(jìn)行規(guī)范傳輸。
鏈接層
提供的是設(shè)備到設(shè)備的通信能力
在一個(gè)局域網(wǎng)內(nèi),不同的設(shè)備會(huì)有不同的標(biāo)識(shí)號(hào),這個(gè)標(biāo)識(shí)號(hào)不是ip地址,而是mac地址。
TCP/IP封包
最上層是應(yīng)用層,應(yīng)用層的數(shù)據(jù)是我們程序員自己定義的數(shù)據(jù)。
當(dāng)我們的這組數(shù)據(jù)要傳輸?shù)臅r(shí)候(從客戶端到服務(wù)器),通常會(huì)轉(zhuǎn)換成傳輸層的數(shù)據(jù)格式。比如TCP Header 和TCP 數(shù)據(jù)這樣的格式。TCP Header 包含了傳輸?shù)脑丝谔?hào)和目標(biāo)端口號(hào)一類的數(shù)據(jù)。
在傳輸過程中,在網(wǎng)絡(luò)傳輸中又會(huì)轉(zhuǎn)化成網(wǎng)絡(luò)層的數(shù)據(jù)格式,比如會(huì)添加ip Header和ip數(shù)據(jù),這個(gè)頭部會(huì)增加原地址和目標(biāo)地址。傳輸層的數(shù)據(jù)在網(wǎng)絡(luò)層會(huì)被切成更小的片段。
在鏈接層會(huì)增加一個(gè)頭部和尾部,因?yàn)閿?shù)據(jù)到了鏈接層都會(huì)轉(zhuǎn)換為二進(jìn)制的數(shù)據(jù),用頭部去區(qū)分不同的塊的數(shù)據(jù)。
TCP協(xié)議的三次握手
1.第一次握手:客戶端發(fā)送請(qǐng)求建立連接,請(qǐng)求報(bào)文段。
2.第二次握手:服務(wù)器收到請(qǐng)求,發(fā)送同意并請(qǐng)求與客戶端建立連接。
3.第三次握手:客戶端收到請(qǐng)求,發(fā)送同意與服務(wù)器建立連接。
為什么要進(jìn)行三次握手?一句話就是,防止服務(wù)器端的一直等待而浪費(fèi)資源
解決傳輸順序問題
首頁要確定消息的順序。不能使用時(shí)間,因?yàn)榉?wù)器之間真實(shí)時(shí)間不可得,而且服務(wù)器之間不能保證沒有時(shí)差。
消息的絕對(duì)順序用SEQ,和ACK 這一對(duì)元組表示。
SEQ;這個(gè)消息發(fā)送前一共發(fā)送了多少字節(jié)
ACK:這個(gè)消息發(fā)送前一共收到了多少字節(jié)
TCP協(xié)議的四次分手
1.第一次分手:客戶端發(fā)送斷開請(qǐng)求
2.第二次分手:服務(wù)器收到斷開請(qǐng)求,發(fā)送同意斷開連接的請(qǐng)求
3.第三次分手:服務(wù)器發(fā)送請(qǐng)求斷開連接
4.第四次分手:客戶端收到,發(fā)送同意斷開連接
我們可以類比我們請(qǐng)假下班的情況。
員工:有點(diǎn)事兒,我要請(qǐng)假下班(第一次分手)
老板:收到,同意(第二次分手)
員工:打下班卡(第三次分手)
老板:確認(rèn)打卡,記錄同意。(第四次分手)