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