終於有人把tcp、http、rpc和grpc總結完整了

7small7發表於2023-04-27

隨著微服務的迅速發展,各大網際網路企業也投入到微服務的​使用種。微服務最大的特點是,跨程式、跨服務、跨語言之間的呼叫,使得我們能夠像呼叫本地類、函式一樣。當微服務具備該特點,將我們複雜的業務拆分成不同的服務,​服務之間在相互呼叫。這也是微服務為什麼火的原因之一。
要使用好微服務,不僅僅是對業務的拆分能力要求高,同時對服務之間的通訊也要求高,今天就來給大家總結幾種常用的通訊協議,它們分別是什麼、有什麼優缺點以及各種協議之間的對比。

前面一篇文章對微服務的架構,做了一個簡單的介紹,這一篇就來針對各種常用的通訊協議做一個彙總。一篇文章快速理解微服務架構

什麼是tcp

TCP(傳輸控制協議)是一種面向連線的、可靠的、基於位元組流的傳輸層協議。TCP協議具有以下特點:

  1. 面向連線:TCP協議在資料傳輸之前需要建立連線,資料傳輸完成後需要釋放連線,保證了資料傳輸的可靠性和完整性。
  2. 可靠性高:TCP協議採用確認機制、序列號和校驗和等技術,可以保證資料傳輸的可靠性和完整性。
  3. 擁塞控制:TCP協議採用擁塞控制演算法,可以避免網路擁塞和丟包等問題,保證了資料傳輸的穩定性和公平性。
  4. 全雙工通訊:TCP協議支援全雙工通訊,即客戶端和伺服器端都可以同時傳送和接收資料,實現了雙向通訊。
  5. 高效性:TCP協議採用滑動視窗機制和分段傳輸技術,可以提高資料傳輸的效率和效能。
  6. 支援多種應用協議:TCP協議可以支援多種應用層協議,例如HTTP、FTP、SMTP等。
  7. 可靠的錯誤恢復:TCP協議可以對丟失、重複、損壞和超時等錯誤進行恢復和處理,保證了資料傳輸的可靠性和完整性。

TCP協議的資料傳輸過程如下:

  1. 客戶端向伺服器端傳送SYN(同步)請求,請求建立連線。
  2. 伺服器端收到SYN請求後,向客戶端傳送SYN+ACK(同步和確認)應答,表示可以建立連線。
  3. 客戶端收到SYN+ACK應答後,向伺服器端傳送ACK(確認)應答,表示連線已經建立成功。
  4. 資料傳輸完成後,客戶端和伺服器端分別傳送FIN(結束)請求,請求釋放連線。
  5. 收到FIN請求後,另一方傳送ACK應答,表示已經收到了結束請求。
  6. 雙方都收到了對方的ACK應答後,即完成了連線的釋放。

TCP協議具有面向連線、可靠性高、擁塞控制、全雙工通訊、高效性、支援多種應用協議等特點,是一種非常重要的傳輸層協議。

tcp的優缺點

tcp的優點

TCP(Transmission Control Protocol)是一種面向連線的、可靠的、基於位元組流的傳輸層協議,具有以下優點:

  1. 可靠性高:TCP採用確認機制、序列號和校驗和等技術,可以保證資料傳輸的可靠性和完整性。
  2. 擁塞控制:TCP採用擁塞控制演算法,可以避免網路擁塞和丟包等問題,保證了資料傳輸的穩定性和公平性。
  3. 全雙工通訊:TCP支援全雙工通訊,即客戶端和伺服器端都可以同時傳送和接收資料,實現了雙向通訊。
  4. 高效性:TCP採用滑動視窗機制和分段傳輸技術,可以提高資料傳輸的效率和效能。
  5. 支援多種應用協議:TCP可以支援多種應用層協議,例如HTTP、FTP、SMTP等。
  6. 可靠的錯誤恢復:TCP可以對丟失、重複、損壞和超時等錯誤進行恢復和處理,保證了資料傳輸的可靠性和完整性。
  7. 可靠的順序傳輸:TCP可以保證資料按照傳送的順序進行傳輸,避免了資料亂序的問題。
  8. 適用於長連線:TCP適用於長連線,可以減少建立和釋放連線的開銷,提高了網路傳輸的效率和效能。

TCP具有可靠性高、擁塞控制、全雙工通訊、高效性、支援多種應用協議等優點,是一種非常重要的傳輸層協議。

tcp的缺點

TCP(Transmission Control Protocol)雖然具有很多優點,但仍存在以下缺點:

  1. 較為複雜:TCP協議的實現較為複雜,需要考慮到各種網路環境和異常情況,對於開發人員而言學習成本較高。
  2. 傳輸效率相對較低:TCP採用確認機制、序列號等技術,保證了資料傳輸的可靠性和完整性,但也使得資料傳輸效率相對較低。
  3. 不適用於短連線:TCP適用於長連線,對於短連線的支援不夠友好,會增加建立和釋放連線的開銷。
  4. 不適用於實時性要求高的場景:由於TCP採用確認機制和重傳機制,無法保證資料的實時性,不適用於實時性要求較高的場景。
  5. 不適用於高負載場景:當網路負載較大時,TCP採用擁塞控制演算法可能會導致傳輸速度下降,影響了資料傳輸的效率和效能。
  6. 無法支援廣播和多播:TCP協議無法支援廣播和多播,只能進行點對點的資料傳輸。

TCP雖然具有很多優點,但仍存在一些缺點,例如傳輸效率相對較低、不適用於短連線等。在選擇協議時,需要根據具體的需求和場景進行綜合考慮。

什麼是rcp

RPC是遠端過程呼叫(Remote Procedure Call)的縮寫。它是一種計算機通訊協議,使得程式可以請求另一個程式或者計算機上的服務,就像呼叫本地的函式一樣,從而實現分散式系統之間的互動和通訊。RPC可以大大簡化分散式系統的開發,提高系統的可維護性和可擴充套件性。

rpc的優缺點

rpc的優點

RPC具有以下優勢:

  1. 抽象遮蔽:RPC框架可以遮蔽底層的網路通訊細節,使得遠端呼叫就像本地呼叫一樣簡單。
  2. 可擴充套件性:RPC框架可以支援多種協議和編碼方式,可以適應不同場景的需求,同時也可以方便地新增新的功能和服務。
  3. 可靠性:RPC框架通常會提供各種機制來保證通訊的可靠性,如超時重試、錯誤處理等。
  4. 高效性:RPC框架通常使用二進位制協議和高效的序列化方式,可以大大減少網路傳輸的資料量,提高系統的效能。
  5. 語言無關性:RPC框架可以支援多種程式語言,使得不同語言的程式可以方便地進行互動和通訊。

rpc的缺點

RPC也有以下缺點:

  1. 依賴網路:RPC需要透過網路進行通訊,因此對網路的穩定性和延遲要求比較高。
  2. 難以除錯:由於RPC是跨程式或者跨計算機的呼叫,因此除錯起來比較困難,需要使用一些特殊的工具和技術。
  3. 資料格式限制:RPC框架通常會限制資料的格式和大小,如果需要傳輸大量的資料或者複雜的資料結構,可能會導致效能問題。
  4. 安全性問題:RPC通常不會提供加密和認證等安全機制,需要在應用層進行處理,否則容易受到攻擊。
  5. 可靠性問題:RPC框架雖然提供了一些機制來保證通訊的可靠性,但仍然可能出現通訊失敗、丟失訊息等情況,需要應用程式自己處理。

什麼是grpc

gRPC是Google開源的一種高效能、通用的遠端過程呼叫(RPC)框架,基於Protocol Buffers序列化協議進行資料傳輸。與其他RPC框架相比,gRPC具有以下優勢:

  1. 高效能:gRPC採用基於HTTP/2的二進位制傳輸協議,可以實現雙向流、頭部壓縮和多路複用等特性,提高了網路傳輸的效率和效能。
  2. 多語言支援:gRPC支援多種程式語言,包括C++、Java、Python、Go、Ruby等,可以方便地構建跨語言的分散式系統。
  3. 自動生成程式碼:gRPC可以根據服務定義檔案自動生成客戶端和伺服器端的程式碼,大大簡化了開發過程。
  4. 可擴充套件性:gRPC支援多種負載均衡演算法和服務發現機制,可以適應不同場景的需求。
  5. 安全性:gRPC支援TLS加密和認證等安全機制,保障通訊的安全性。
  6. 易於使用和維護:gRPC提供了豐富的文件和工具鏈,使得開發和維護分散式系統變得更加容易。

grpc的優缺點

grpc的優點

gRPC是一種高效能、通用的遠端過程呼叫(RPC)框架,具有以下優點:

  1. 高效能:gRPC採用基於HTTP/2的二進位制傳輸協議,可以實現雙向流、頭部壓縮和多路複用等特性,提高了網路傳輸的效率和效能。
  2. 多語言支援:gRPC支援多種程式語言,包括C++、Java、Python、Go、Ruby等,可以方便地構建跨語言的分散式系統。
  3. 自動生成程式碼:gRPC可以根據服務定義檔案自動生成客戶端和伺服器端的程式碼,大大簡化了開發過程。
  4. 可擴充套件性:gRPC支援多種負載均衡演算法和服務發現機制,可以適應不同場景的需求。
  5. 安全性:gRPC支援TLS加密和認證等安全機制,保障通訊的安全性。
  6. 易於使用和維護:gRPC提供了豐富的文件和工具鏈,使得開發和維護分散式系統變得更加容易。
  7. 支援多種序列化協議:gRPC支援多種序列化協議,包括Google開發的Protocol Buffers序列化協議和JSON等,可以根據實際需求選擇最適合的序列化方式。
  8. 支援流式資料傳輸:gRPC支援雙向流、客戶端流和伺服器端流等多種流式資料傳輸方式,可以滿足不同的業務需求。

gRPC具有高效能、多語言支援、自動生成程式碼、可擴充套件性、安全性、易於使用和維護等優點,是一種非常適合構建分散式系統的RPC框架。

grpc的缺點

雖然gRPC是一種非常優秀的RPC框架,但仍存在以下缺點:

  1. 學習曲線較陡峭:相比於傳統的RESTful API,gRPC需要使用IDL檔案來定義服務和訊息型別,並且需要生成客戶端和伺服器端的程式碼,需要掌握這些新的概念和技術。
  2. 不支援RESTful API:gRPC不支援基於HTTP的RESTful API,無法與現有的RESTful API進行相容和整合。
  3. 不支援瀏覽器端:gRPC目前不支援Web瀏覽器端,因為瀏覽器不支援HTTP/2協議。
  4. 依賴Protocol Buffers:gRPC預設使用Google開發的Protocol Buffers序列化協議,如果需要使用其他的序列化協議,則需要自行實現。
  5. 難以除錯:由於gRPC採用二進位制協議,資料的傳輸和解析都是以二進位制形式進行的,對於除錯和排錯帶來了一定的困難。
  6. 安全性依賴於TLS:雖然gRPC支援TLS加密和認證等安全機制,但這些機制都依賴於TLS協議,如果TLS協議本身存在漏洞或被攻擊,則會影響gRPC的安全性。

gRPC雖然具有很多優點,但仍存在一些缺點,例如學習曲線較陡峭、不支援RESTful API等。在選擇RPC框架時,需要根據具體的需求和場景進行綜合考慮。

什麼是http

HTTP協議是一種基於請求-響應模式的應用層協議,用於在Web瀏覽器和Web伺服器之間傳遞資料。它是一種無狀態的協議,每個請求和響應都是獨立的,沒有任何關聯性。

HTTP通常使用TCP作為傳輸層協議,使用埠號80進行通訊。HTTP協議定義了客戶端和伺服器之間交換的訊息格式和規則,包括請求方法、請求頭部、請求正文、響應狀態碼、響應頭部和響應正文等。

HTTP請求由三部分組成:請求行、請求頭部和請求正文。其中,請求行包括請求方法、URL和HTTP版本號;請求頭部包括請求的附加資訊,如Cookie、User-Agent等;請求正文包括請求的資料內容,如表單資料、JSON資料等。

HTTP響應由三部分組成:狀態行、響應頭部和響應正文。其中,狀態行包括HTTP版本號、狀態碼和狀態描述;響應頭部包括響應的附加資訊,如Content-Type、Content-Length等;響應正文包括響應的資料內容,如HTML頁面、圖片等。

HTTP協議具有以下特點:

  1. 簡單易用:HTTP協議的訊息格式簡單明瞭,易於理解和使用。
  2. 無狀態:HTTP協議是一種無狀態協議,每個請求和響應都是獨立的,沒有任何關聯性。
  3. 可擴充套件性:HTTP協議支援多種請求方法和響應狀態碼,並且可以使用擴充套件頭部來傳遞附加資訊。
  4. 易於快取:HTTP協議支援快取機制,可以減少網路傳輸的資料量,提高系統的效能。
  5. 安全性較低:HTTP協議通常不提供加密和認證等安全機制,容易受到中間人攻擊和竊聽。

http的優缺點

http的優點

HTTP(超文字傳輸協議)是一種應用層協議,常被用於Web瀏覽器和Web伺服器之間的通訊。HTTP具有以下優點:

  1. 簡單易用:HTTP採用文字協議和請求-響應模型,訊息格式簡單、易於理解和使用。
  2. 易於擴充套件:HTTP支援外掛和擴充套件機制,可以根據需求新增新的功能和特性。
  3. 可靠性高:HTTP採用TCP協議進行資料傳輸,保證了資料的可靠性和完整性。
  4. 良好的相容性:HTTP是網際網路上最常用的協議之一,幾乎所有的瀏覽器和伺服器都支援HTTP協議,具有良好的相容性。
  5. 支援快取機制:HTTP支援快取機制,可以提高網路傳輸的效率和效能。
  6. 安全性高:HTTP支援SSL/TLS加密和認證等安全機制,保證了資料的安全性和隱私性。
  7. 支援多種媒體型別:HTTP支援多種媒體型別,例如HTML、XML、JSON等,可以滿足不同的業務需求。

綜上所述,HTTP具有簡單易用、易於擴充套件、可靠性高、良好的相容性、支援快取機制、安全性高、支援多種媒體型別等優點。這些特性使得HTTP成為了Web應用程式開發中不可或缺的協議之一。

http的缺點

HTTP(超文字傳輸協議)雖然具有很多優點,但仍存在以下缺點:

  1. 傳輸效率較低:HTTP採用明文傳輸,訊息格式較為冗長,資料傳輸效率相對較低。
  2. 安全性較低:HTTP採用明文傳輸,資料在傳輸過程中容易被竊聽和篡改,安全性較低。
  3. 不支援雙向通訊:HTTP採用請求-響應模式,不支援伺服器主動向客戶端傳送訊息,無法實現雙向通訊。
  4. 不支援流式資料傳輸:HTTP採用短連線方式,每次請求都需要建立一次TCP連線,無法實現流式資料傳輸。
  5. 無狀態協議:HTTP是一種無狀態協議,伺服器不能儲存客戶端的狀態資訊,每次請求都需要重新驗證身份和許可權等資訊。
  6. 不支援服務發現:HTTP沒有內建的服務發現機制,需要透過第三方工具或平臺來實現服務發現。
  7. RESTful API限制:RESTful API是基於HTTP協議的一種API設計風格,但由於HTTP協議本身的限制,RESTful API無法完全滿足所有場景的需求。

協議對比

rpc、grpc和http對比

RPC、gRPC、TCP和HTTP是常見的網路通訊協議,它們之間具有以下相同點和不同點,以及各自的優劣勢。

  1. 相同點:

(1)都是應用層協議,用於在不同的程式或計算機之間進行資料傳輸和通訊。

(2)都支援客戶端和伺服器端的通訊模式,可以實現分散式系統的構建。

(3)都需要使用特定的訊息格式和規則來進行資料的傳輸和解析。

  1. 不同點:

(1)RPC和gRPC是遠端過程呼叫框架,主要用於在不同的程式或計算機之間進行函式呼叫和資料交換。而TCP和HTTP是基礎協議,主要用於資料傳輸和通訊。

(2)RPC和gRPC通常採用二進位制協議和高效的序列化方式,可以大大減少網路傳輸的資料量,提高系統的效能。而TCP和HTTP通常採用文字協議和基於ASCII碼的編碼方式,資料傳輸效率較低。

(3)RPC和gRPC通常需要使用專門的IDL檔案來定義服務和訊息型別,並且需要生成客戶端和伺服器端的程式碼。而TCP和HTTP沒有這個限制,可以直接使用套接字進行通訊。

(4)RPC和gRPC通常需要使用底層的網路庫進行封裝和實現,例如Netty、Thrift等。而TCP和HTTP通常已經被作業系統封裝好,可以直接使用。

  1. 優劣勢:

(1)RPC的優勢在於效能高、可擴充套件性強、支援多種程式語言、易於維護和開發等。缺點在於安全性較低、除錯困難等。

(2)gRPC的優勢在於效能高、支援多種程式語言、自動生成程式碼等。缺點在於學習曲線較陡峭、不支援RESTful API等。

(3)TCP的優勢在於可靠傳輸、支援流式資料傳輸、使用廣泛等。缺點在於傳輸效率較低、需要手動處理分包和粘包等問題。

(4)HTTP的優勢在於簡單易用、良好的相容性、支援快取機制等。缺點在於傳輸效率較低、不支援雙向流式資料傳輸、安全性較低等。

綜上所述,這幾種協議各有優劣勢,應根據具體的需求來選擇合適的協議。例如,如果需要高效能、支援多種語言、易於維護和開發,可以選擇RPC或gRPC;如果需要可靠傳輸、支援流式資料傳輸,可以選擇TCP;如果需要簡單易用、良好的相容性、支援快取機制,可以選擇HTTP。

grpc和rpc的對比

gRPC和傳統的RPC框架之間有以下區別:

  1. 通訊協議不同:gRPC基於HTTP/2協議進行資料傳輸,而傳統的RPC框架通常使用TCP或UDP等傳輸層協議。
  2. 序列化方式不同:gRPC使用Protocol Buffers作為預設的序列化協議,而傳統的RPC框架則使用JSON、XML等格式。
  3. 支援多種語言:gRPC支援多種程式語言,包括C++、Java、Python、Go、Ruby等,而傳統的RPC框架通常只支援少數幾種語言。
  4. 高效能:由於採用了HTTP/2協議和Protocol Buffers序列化協議,gRPC具有更高的效能和效率。
  5. 自動生成程式碼:gRPC可以根據服務定義檔案自動生成客戶端和伺服器端的程式碼,大大簡化了開發過程。
  6. 安全性:gRPC提供了TLS加密和認證等安全機制,保障通訊的安全性。

http與tcp的對比

TCP(Transmission Control Protocol)協議和HTTP(Hypertext Transfer Protocol)協議都是網際網路中的重要協議,但兩者之間存在以下區別:

  1. 位置不同:TCP協議位於傳輸層,負責資料的傳輸;而HTTP協議位於應用層,負責客戶端和伺服器之間的通訊。
  2. 目的不同:TCP協議的主要目的是保證資料傳輸的可靠性和完整性;而HTTP協議的主要目的是實現Web瀏覽器和Web伺服器之間的通訊。
  3. 連線方式不同:TCP協議採用面向連線的方式進行資料傳輸,需要先建立連線然後再進行資料傳輸;而HTTP協議採用無狀態的方式進行資料傳輸,每次請求和響應都是獨立的,沒有長期的連線。
  4. 資料格式不同:TCP協議只負責資料的傳輸,對資料的內容和格式沒有限制;而HTTP協議規定了資料的格式和內容,例如請求頭、響應頭、訊息體等。
  5. 埠號不同:TCP協議使用埠號來標識不同的程式或應用程式;而HTTP協議預設使用80埠號進行資料傳輸。
  6. 應用場景不同:TCP協議適用於各種資料傳輸場景,例如檔案傳輸、郵件傳輸等;而HTTP協議適用於Web瀏覽器和Web伺服器之間的通訊,主要用於實現Web頁面的訪問和資料互動。

相關文章