網(wǎng)絡(luò)協(xié)議驅(qū)動互聯(lián)網(wǎng)
在分布式系統(tǒng)中,數(shù)據(jù)通過各種網(wǎng)絡(luò)協(xié)議在網(wǎng)絡(luò)中傳輸。作為應(yīng)用程序開發(fā)者,這往往在問題出現(xiàn)之前似乎是一個黑盒子。
在本文中,我們將解釋常見網(wǎng)絡(luò)協(xié)議的工作原理,它們在分布式系統(tǒng)中的應(yīng)用以及我們?nèi)绾谓鉀Q常見問題。
讓我們首先了解網(wǎng)絡(luò)協(xié)議的使用情況。
互聯(lián)網(wǎng)和OSI模型
互聯(lián)網(wǎng)連接了世界各地的各種計算設(shè)備。我們可以從下面的圖表中大致了解。假設(shè)我們從智能手機(jī)或筆記本電腦訪問一個網(wǎng)站,它連接到一個移動網(wǎng)絡(luò)基站。基站連接到路由器,然后通過互聯(lián)網(wǎng)服務(wù)提供商(ISP)訪問互聯(lián)網(wǎng)。數(shù)據(jù)包被轉(zhuǎn)發(fā)到本地ISP,然后到達(dá)托管網(wǎng)站的網(wǎng)絡(luò)。一旦數(shù)據(jù)包到達(dá)公司網(wǎng)絡(luò),它們經(jīng)過鏈路層交換機(jī)并到達(dá)適當(dāng)?shù)姆?wù)器。
路由器和鏈路層交換機(jī)都是數(shù)據(jù)包交換機(jī),它們的工作是轉(zhuǎn)發(fā)數(shù)據(jù)包。區(qū)別在于,路由器通常用于網(wǎng)絡(luò)核心連接多個網(wǎng)絡(luò),而鏈路層交換機(jī)用于訪問網(wǎng)絡(luò)(物理連接終端系統(tǒng)和邊緣路由器的網(wǎng)絡(luò)),在單個網(wǎng)絡(luò)中連接多個設(shè)備。
為什么我們需要網(wǎng)絡(luò)協(xié)議?互聯(lián)網(wǎng)連接的設(shè)備需要使用它們可以理解的語言進(jìn)行通信。各種計算機(jī)系統(tǒng)使用OSI(開放系統(tǒng)互連)模型規(guī)定的標(biāo)準(zhǔn)相互通信。OSI模型有七個抽象層,每個層都有獨特的職責(zé)和協(xié)議。
下圖顯示了OSI模型中各層的作用。每個中間層為上面的層提供一類功能,并由下面的層提供服務(wù)。
應(yīng)用層
應(yīng)用層最接近最終用戶。大多數(shù)應(yīng)用程序位于此層。我們向后端服務(wù)器請求數(shù)據(jù),無需了解數(shù)據(jù)傳輸?shù)木唧w細(xì)節(jié)。此層的協(xié)議包括HTTP、SMTP、FTP、DNS等,我們稍后會詳細(xì)介紹它們。
表示層
該層處理數(shù)據(jù)編碼、加密和壓縮,為應(yīng)用層準(zhǔn)備數(shù)據(jù)。例如,HTTPS使用TLS(傳輸層安全)在客戶端和服務(wù)器之間進(jìn)行安全通信。
會話層
該層在兩個設(shè)備之間建立和關(guān)閉通信。如果數(shù)據(jù)量較大,會話層設(shè)置檢查點以避免從頭重新發(fā)送。
傳輸層
該層處理兩個設(shè)備之間的端到端通信。它在發(fā)送端將數(shù)據(jù)分割為段,并在接收端重新組裝它們。此層具有流量控制以防止擁塞。在該層中的關(guān)鍵協(xié)議是TCP和UDP,我們稍后會討論它們。
網(wǎng)絡(luò)層
該層實現(xiàn)不同網(wǎng)絡(luò)之間的數(shù)據(jù)傳輸。它將段或數(shù)據(jù)報進(jìn)一步分割為較小的數(shù)據(jù)包,并使用IP地址找到到達(dá)目標(biāo)的最佳路由。這個過程稱為路由。
數(shù)據(jù)鏈路層
該層允許在同一網(wǎng)絡(luò)上的設(shè)備之間進(jìn)行數(shù)據(jù)傳輸。數(shù)據(jù)包被分割為幀,并限制在本地區(qū)域網(wǎng)絡(luò)中。
物理層
該層通過電纜和交換機(jī)發(fā)送比特流,因此與設(shè)備之間的物理連接密切相關(guān)。
與OSI模型相比,TCP/IP模型只有4層。在討論層次結(jié)構(gòu)時,重要的是要指定上下文。
現(xiàn)在我們了解了每個層的職責(zé),讓我們通過以下圖表總結(jié)數(shù)據(jù)傳輸過程。這被稱為封裝和解封裝。封裝是在數(shù)據(jù)朝向目的地的過程中添加頭部信息。解封裝則是去除這些頭部以恢復(fù)原始數(shù)據(jù)。
- 步驟1:當(dāng)設(shè)備A使用HTTP通過網(wǎng)絡(luò)向設(shè)備B發(fā)送數(shù)據(jù)時,應(yīng)用層會添加HTTP頭部。
- 步驟2:在傳輸層,TCP或UDP頭部會添加到數(shù)據(jù)中。數(shù)據(jù)會在傳輸層被封裝成TCP段。頭部包含源端口、目標(biāo)端口和序列號。
- 步驟3:接下來,段會在網(wǎng)絡(luò)層被封裝成IP頭部。IP頭部包含源IP地址和目標(biāo)IP地址。
- 步驟4:在數(shù)據(jù)鏈路層,MAC頭部會添加到IP數(shù)據(jù)報中,其中包含源MAC地址和目標(biāo)MAC地址。
- 步驟5:封裝后的幀會發(fā)送到物理層,并以比特流的形式通過網(wǎng)絡(luò)發(fā)送。
- 步驟6-10:當(dāng)設(shè)備B從網(wǎng)絡(luò)接收到比特流時,每一層都會解封裝數(shù)據(jù),并將其傳遞到相應(yīng)的層。