技術(shù)分享 | 常見接口協(xié)議解析
本文節(jié)選自霍格沃茲測試開發(fā)學社內(nèi)部教材
服務(wù)與服務(wù)之間傳遞數(shù)據(jù)包,往往會因為不同的應(yīng)用場景,使用不同的通訊協(xié)議進行傳遞。比如網(wǎng)站的訪問,常常會使用 HTTP 協(xié)議進行傳遞,文件傳輸使用 FTP,郵件傳遞使用 SMTP。上述的三種類型的協(xié)議都處于網(wǎng)絡(luò)模型中的應(yīng)用層。除了應(yīng)用層的常用協(xié)議之外,對于傳輸層的 TCP、UDP 協(xié)議,以及 Restful 架構(gòu)風格、RPC 協(xié)議等等基礎(chǔ)網(wǎng)絡(luò)知識要有一定的了解和認知。
網(wǎng)絡(luò)協(xié)議介紹
在了解具體的協(xié)議之前,需要先了解 OSI 七層模型、TCP/IP 四層模型、五層體系結(jié)構(gòu)這三種不同的網(wǎng)絡(luò)模型。
網(wǎng)絡(luò)協(xié)議模型對比圖:

OSI 參考模型是一個在制定協(xié)調(diào)進程間通信標準時所使用的概念性框架,它并不是一個標準。
TCP/IP 四層模型是網(wǎng)際網(wǎng)絡(luò)的基礎(chǔ)通信架構(gòu)。常視為是簡化的七層 OSI 模型。
五層協(xié)議是 OSI 和 TCP/IP 的綜合,實際應(yīng)用還是 TCP/IP 的四層結(jié)構(gòu)。
TCP/IP 協(xié)議棧是對應(yīng) TCP/IP 四層模型所使用的具體的網(wǎng)絡(luò)協(xié)議。
TCP協(xié)議
TCP 協(xié)議是在傳輸層中,一種面向連接的、可靠的、基于字節(jié)流的傳輸層通信協(xié)議。TCP 協(xié)議的工作方式為在建立連接的時候需要進行“三次握手”,終止連接時需要進行“四次揮手”。“三次握手”和“四次揮手”是 TCP 協(xié)議的重要知識點,在后面的章節(jié)會通過實戰(zhàn)和理論結(jié)合具體介紹。
適用場景
TCP 協(xié)議的面向連接、錯誤重傳、擁塞控制等特性,適用于可靠性高的場景,比如涉及用戶信息的數(shù)據(jù)傳輸。
UDP協(xié)議
UDP 協(xié)議一旦把應(yīng)用程序發(fā)給網(wǎng)絡(luò)層的數(shù)據(jù)發(fā)送出去,就不保留數(shù)據(jù)備份。它僅在 IP 數(shù)據(jù)包的頭部加入復用和數(shù)據(jù)校驗字段。所以 UDP 常常被認為是不可靠的數(shù)據(jù)包協(xié)議。
適用場景
UDP 協(xié)議的不需要提前建立連接、實現(xiàn)簡單的特性,非常適用于實時性高的場景,比如流媒體、在線游戲等。
HTTP協(xié)議
HTTP 協(xié)議是接口測試中最常見的協(xié)議,是用于分布式、協(xié)作式和超媒體信息系統(tǒng)的應(yīng)用層協(xié)議。HTTP 是萬維網(wǎng)的數(shù)據(jù)通信的基礎(chǔ)??蛻舳讼蚍?wù)端發(fā)送 HTTP 請求,服務(wù)端則會在響應(yīng)中返回所請求的數(shù)據(jù)。在測試過程中,常常需要校驗請求和響應(yīng)結(jié)果,所以了解 HTTP 協(xié)議,對于接口測試來說,是重中之重。
在后面章節(jié)將會具體介紹 HTTP、HTTPS 協(xié)議的區(qū)別,以及 HTTP 協(xié)議的基礎(chǔ)知識信息。
RESTful協(xié)議
起源
Roy Thomas Fielding 博士于 2000 年在他的博士論文中提出來的一種萬維網(wǎng)軟件架構(gòu)風格。其目的是為了便于不同的軟件在網(wǎng)絡(luò)中傳遞信息。RESTful 是基于 HTTP 協(xié)議之上制定的一種資源請求、操作的風格,用一句話來概括就是使用 URL 去定位資源,使用 HTTP 動詞描述操作。
HTTP 請求方法在 RESTful api 中的典型應(yīng)用:
方法意義GET獲取資源POST新增或者更新PUT更新資源DELETE刪除資源
注意:?不同公司在使用 RESTful 架構(gòu)風格的時候存在部分差別。
RPC協(xié)議
RPC 的英文為 Remote Procedure Call ,它很好的詮釋了 RPC 協(xié)議的概念,即為以本地代碼調(diào)用的方式實現(xiàn)遠程執(zhí)行,RPC 主要用于公司內(nèi)部的服務(wù)調(diào)用。RPC 接口的優(yōu)點在于傳輸效率更高、性能損耗更低、自帶負載均衡策略、更好的服務(wù)治理能力。
常見的 RPC 協(xié)議
目前在行業(yè)內(nèi)常用的 RPC 協(xié)議主要如下:
Dubbo:Java 基礎(chǔ)之上的高性能 RPC 協(xié)議。
gRPC:高性能通用 RPC 框架,基于 Protocol Buffers。PB 是一個語言中立、平臺中立的數(shù)據(jù)序列化框架。
Thrift:與 gRPC 類似的多語言 RPC 框架。