今天我們來(lái)聊聊網(wǎng)絡(luò)協(xié)議。
網(wǎng)絡(luò)協(xié)議是網(wǎng)絡(luò)中兩臺(tái)計(jì)算機(jī)之間傳輸數(shù)據(jù)的標(biāo)準(zhǔn)語(yǔ)言。各種計(jì)算機(jī)系統(tǒng)使用 OSI(Open Systems Interconnection)模型規(guī)定的標(biāo)準(zhǔn)相互通信。OSI 模型有七個(gè)抽象層,每個(gè)層都有不同的職責(zé)和協(xié)議。
下圖顯示了 OSI 模型中每一層的功能。每一層都為其上層提供一類(lèi)功能,并由其下層為其提供服務(wù)。
應(yīng)用層最接近終端用戶(hù)。大多數(shù)應(yīng)用程序都位于這一層。我們從后端服務(wù)器請(qǐng)求數(shù)據(jù),無(wú)需了解數(shù)據(jù)傳輸?shù)木唧w細(xì)節(jié)。這一層的協(xié)議包括 HTTP、SMTP、FTP、DNS 等。
這一層處理數(shù)據(jù)編碼、加密和壓縮,為應(yīng)用層準(zhǔn)備數(shù)據(jù)。例如,HTTPS 利用 TLS(Transport Layer Security)實(shí)現(xiàn)客戶(hù)端與服務(wù)器之間的安全通信。
該層用于打開(kāi)和關(guān)閉兩個(gè)設(shè)備之間的通信。如果數(shù)據(jù)量較大,會(huì)話(huà)層就會(huì)設(shè)置檢查點(diǎn),避免從頭開(kāi)始重新發(fā)送。
該層處理兩個(gè)設(shè)備之間的端到端的通信。它在發(fā)送方將數(shù)據(jù)分解成段,然后在接收方重新組裝。這一層有流量控制,以防止擁塞。這一層的主要協(xié)議是 TCP 和 UDP。
這一層實(shí)現(xiàn)不同網(wǎng)絡(luò)之間的數(shù)據(jù)傳輸。它進(jìn)一步將網(wǎng)段或數(shù)據(jù)報(bào)分解成更小的數(shù)據(jù)包,并使用 IP 地址找到通往最終目的地的最佳路由。
這一層允許在同一網(wǎng)絡(luò)的設(shè)備之間傳輸數(shù)據(jù)。數(shù)據(jù)包被分解成幀,這些幀被限制在局域網(wǎng)內(nèi)。
這一層通過(guò)電纜和交換機(jī)發(fā)送比特流,因此與設(shè)備之間的物理連接密切相關(guān)。
與 OSI 模型相比,TCP/IP 模型只有 4 層。在討論網(wǎng)絡(luò)協(xié)議的層次時(shí),必須明確上下文。
既然我們已經(jīng)了解了每一層的職責(zé),那就讓我們用下圖來(lái)總結(jié)一下數(shù)據(jù)傳輸過(guò)程。這就是所謂的封裝(encapsulation)和去封裝(decapsulation)。封裝是指在數(shù)據(jù)向目的地傳輸?shù)倪^(guò)程中為數(shù)據(jù)添加報(bào)頭。解封裝會(huì)移除這些報(bào)頭,以獲取原始數(shù)據(jù)。
當(dāng)設(shè)備 A 使用 HTTP 通過(guò)網(wǎng)絡(luò)向設(shè)備 B 發(fā)送數(shù)據(jù)時(shí),最初會(huì)在應(yīng)用層添加一個(gè) HTTP 報(bào)頭。
在數(shù)據(jù)中添加 TCP 或 UDP 報(bào)頭。它在傳輸層被封裝成 TCP 段。報(bào)頭包含源端口、目的端口和序列號(hào)。
然后在網(wǎng)絡(luò)層用 IP 報(bào)頭對(duì)這些段落進(jìn)行封裝。IP 報(bào)頭包含源 IP 地址和目的 IP 地址。
在數(shù)據(jù)鏈路層為 IP 數(shù)據(jù)報(bào)添加 MAC 報(bào)頭,其中包含源 MAC 地址和目的 MAC 地址。
封裝幀被發(fā)送到物理層,并作為比特流在網(wǎng)絡(luò)上發(fā)送。
設(shè)備 B 從網(wǎng)絡(luò)接收到比特流后,會(huì)啟動(dòng)去封裝過(guò)程,這與封裝過(guò)程相反。報(bào)頭逐層去除,直到設(shè)備 B 可以訪問(wèn)原始數(shù)據(jù)。
請(qǐng)注意,每一層都使用報(bào)頭來(lái)處理指令,而不需要解封上一層的數(shù)據(jù)。
下面的動(dòng)圖展示了常用的一些網(wǎng)絡(luò)協(xié)議及其使用場(chǎng)景。
HTTP 是一種用于獲取 HTML 文檔等資源的協(xié)議。它是網(wǎng)絡(luò)數(shù)據(jù)交換的基礎(chǔ),也是一種客戶(hù)端-服務(wù)器協(xié)議。
HTTP/3 是 HTTP 的下一個(gè)重要修訂版本。它在 QUIC 上運(yùn)行。QUIC 是一種新的傳輸協(xié)議,專(zhuān)為移動(dòng)互聯(lián)網(wǎng)而設(shè)計(jì)。它依賴(lài)于 UDP 而不是 TCP,這使得網(wǎng)頁(yè)響應(yīng)速度更快。VR 應(yīng)用程序需要更多帶寬來(lái)迅速呈現(xiàn)虛擬場(chǎng)景的復(fù)雜細(xì)節(jié),因此遷移到由 QUIC 支持的 HTTP/3 會(huì)從中受益。
HTTPS 擴(kuò)展了 HTTP,并使用加密技術(shù)實(shí)現(xiàn)安全通信。
WebSocket 是一種通過(guò) TCP 提供全雙工通信的協(xié)議。客戶(hù)端通過(guò)建立 WebSocket 從后端服務(wù)接收實(shí)時(shí)更新。與總是 "拉取 "數(shù)據(jù)的 REST 不同,WebSocket 可以 "推送 "數(shù)據(jù)。在線游戲、股票交易和消息應(yīng)用程序等都利用 WebSocket 進(jìn)行實(shí)時(shí)通信。
TCP 設(shè)計(jì)用于在互聯(lián)網(wǎng)上發(fā)送數(shù)據(jù)包,確保數(shù)據(jù)和信息在網(wǎng)絡(luò)上成功傳遞。許多應(yīng)用層協(xié)議都建立在 TCP 協(xié)議之上。
UDP
UDP 直接向目標(biāo)計(jì)算機(jī)發(fā)送數(shù)據(jù)包,無(wú)需先建立連接。UDP 通常用于對(duì)時(shí)間敏感的通信,因?yàn)檫@種情況下偶爾丟棄數(shù)據(jù)包比等待更好。語(yǔ)音和視頻應(yīng)用通常使用此協(xié)議發(fā)送數(shù)據(jù)。
SMTP
SMTP 是一種標(biāo)準(zhǔn)協(xié)議,用于將電子郵件從一個(gè)用戶(hù)傳輸?shù)搅硪粋€(gè)用戶(hù)。
FTP 用于在客戶(hù)端和服務(wù)器之間傳輸計(jì)算機(jī)文件。它有獨(dú)立的控制通道和數(shù)據(jù)通道連接。
我們來(lái)把這些網(wǎng)絡(luò)協(xié)議放到分布式系統(tǒng)中看看它們的典型應(yīng)用。
相關(guān)閱讀:HTTPS是怎么工作的? 系統(tǒng)設(shè)計(jì)面試終極指南
聯(lián)系客服