博客 / 詳情

返回

單工、半雙工、全雙工通信模式詳解

單工、半雙工、全雙工通信模式詳解

前言:最近在學websocket,本來想了解一下除了websocket還有其他的沒有,後面重新學了一下

一、核心概述

單工、半雙工、全雙工(簡稱“全工”)是根據 數據傳輸方向能否同時雙向傳輸 劃分的三種基礎通信模式。其核心差異在於“是否支持雙向傳輸”及“雙向傳輸時是否可同步進行”,本質是對通信信道(數據傳輸的“通道”)的使用規則定義。

該分類適用於所有通信場景,無論是硬件設備(對講機、電話)還是網絡協議(HTTP、WebSocket),均遵循此規則。對於開發場景而言,理解三種模式是掌握網絡通信協議(如HTTP/WebSocket)核心特性的基礎。

二、三種通信模式詳細拆解

以下從“定義、核心特點、典型案例”三個維度,結合日常場景與開發場景逐類説明,兼顧通俗性與實操關聯性。

2.1 單工通信:單向傳輸,不可逆

2.1.1 核心定義

數據只能從一端(發送端)向另一端(接收端)單向傳輸,接收端無法向發送端反饋數據,傳輸方向完全固定不可逆。

2.1.2 核心特點

  • 僅需1條單向通信信道,無需切換傳輸方向;
  • 實現簡單、硬件/軟件成本低;
  • 通信效率有限,僅能滿足“單向數據推送”需求。

2.1.3 典型案例

日常場景

收音機/電視廣播(電台→收音機/電視台→電視,只能接收信號無法反饋)、紅外遙控(遙控器→電視/空調,設備不回傳指令)、打印機(電腦→打印機,打印機僅接收打印指令不主動發數據)。

開發/網絡場景

簡易安防攝像頭→監控主機(僅傳輸視頻流,不接收控制指令)、串口單工通信(早期工業設備,一端固定發數據,另一端固定收數據)、部分日誌推送服務(服務端→客户端單向推送日誌,無客户端反饋)。

2.2 半雙工通信:雙向傳輸,但不同時

2.2.1 核心定義

數據可在兩端之間雙向傳輸(A→B 或 B→A),但 同一時間只能進行一個方向的傳輸,需通過切換傳輸方向實現雙向通信,類似“輪流説話”。

2.2.2 核心特點

  • 僅需1條共享通信信道,通過“信道方向切換”實現雙向傳輸;
  • 存在傳輸延遲(切換方向耗時),通信效率中等;
  • 需約定傳輸規則(如“誰先發送、發送完畢後釋放信道”),避免發送/接收衝突。

2.2.3 典型案例

日常場景

對講機(“收到請回答”,一方按住按鍵説話時,另一方只能監聽,鬆開按鍵後才能迴應)、早期對講機式客服通話、步行電台。

開發/網絡場景(重點關注)
  1. HTTP/1.1 協議:客户端發送請求→服務端返回響應,必須等服務端響應完成後,客户端才能發送下一個請求,無法同時雙向傳輸,是典型的半雙工通信;
  2. 早期藍牙(藍牙2.0及以下):手機→耳機傳輸音頻,耳機→手機回傳按鍵指令,但無法同時進行;
  3. 串口半雙工通信(RS485協議):工業設備間互傳數據,同一時間僅一端發送,另一端接收。

2.3 全雙工通信:雙向傳輸,可同時

2.3.1 核心定義

數據可在兩端之間雙向傳輸,且兩個方向的傳輸可同時進行,類似“兩個人同時説話並互相聽見”,雙向傳輸互不干擾。

2.3.2 核心特點

  • 需2條獨立的單向信道(一條A→B,一條B→A),無需切換傳輸方向;
  • 雙向同時傳輸,通信效率最高,無傳輸衝突;
  • 實現成本高於單工、半雙工,需支持雙向併發傳輸的硬件/軟件設計。

2.3.3 典型案例

日常場景

電話/微信語音通話(雙方可同時説話、同時聽到)、視頻通話(同時傳輸畫面和聲音,雙向同步)。

開發/網絡場景(重點關注)
  1. WebSocket 協議:客户端與服務端建立TCP連接後,服務端可主動向客户端推送數據,同時客户端也可向服務端發送數據(如實時聊天、實時通知);
  2. TCP 協議(底層核心):TCP本身是全雙工協議,為上層協議提供雙向同時傳輸的基礎;
  3. SSH 遠程連接:本地終端向服務器發送命令的同時,服務器可實時返回日誌/執行結果;
  4. 數據庫長連接(MySQL/Redis):客户端發送查詢指令的同時,服務端可主動推送狀態信息(如Redis訂閲消息);
  5. 以太網/網線通信:電腦與路由器之間,上傳數據(電腦→路由器)和下載數據(路由器→電腦)可同時進行(如邊下載文件邊上傳文檔)。

三、三種通信模式核心區別對比表

通信模式 傳輸方向 能否同時雙向傳輸 信道數量 核心特點 開發/網絡典型案例
單工 單向不可逆 ❌ 不支持雙向傳輸 1條單向信道 簡單、低成本、效率低 日誌單向推送、簡易攝像頭視頻流傳輸
半雙工 雙向可逆 ❌ 雙向但不同時 1條共享信道 需切換方向、有延遲、中等效率 HTTP/1.1 協議、早期藍牙通信
全雙工 雙向可逆 ✅ 雙向且同時 2條獨立單向信道 無延遲、效率最高、成本較高 WebSocket、TCP、SSH、Redis/MySQL長連接

四、關鍵補充:開發場景避坑要點

4.1 通信模式與底層傳輸層的關係

上層應用協議的通信模式,依賴底層傳輸層協議的支持:

  • TCP 是全雙工傳輸層協議,因此基於TCP的上層協議(HTTP、WebSocket、SSH、Redis)均具備全雙工傳輸的底層基礎;但上層協議可通過規則限制為半雙工(如HTTP的“請求-響應”規則);
  • UDP 是無連接傳輸層協議,本身不保證可靠傳輸,但可支持半雙工或全雙工(如QUIC協議基於UDP實現全雙工)。

4.2 誤區澄清:HTTP/2 是全雙工嗎?

不是。HTTP/2 支持“多路複用”(多個請求可通過同一TCP連接併發傳輸),但本質仍遵循“請求-響應”模式,服務端無法主動向客户端發送數據,因此仍屬於半雙工通信。

4.3 為什麼 WebSocket 能實現全雙工?

WebSocket 與HTTP一樣基於TCP(全雙工底層),但握手成功後打破了“請求-響應”的限制:客户端和服務端均無需等待對方迴應,可主動向對方發送數據,且兩個方向的傳輸可同時進行,因此實現全雙工。

五、與開發常用技術的關聯映射

結合日常開發場景,將常用技術與通信模式對應,幫助快速理解:

  • HTTP 接口(1.1/2版本):半雙工(客户端請求→服務端響應,輪流進行);
  • WebSocket 實時通信:全雙工(服務端主動推送、客户端主動發送,同時進行);
  • SSH 遠程連接:全雙工(本地輸命令+服務器返日誌,同步進行);
  • MySQL/Redis 長連接:全雙工(客户端發查詢指令+服務端推訂閲消息,同步進行);
  • 簡易日誌推送服務:單工(服務端→客户端單向推送)。

六、記憶口訣與總結

6.1 記憶口訣(快速區分)

  • 單工:單行線,只能單向走;
  • 半雙工:雙向單車道,車輛輪流過,不可對開;
  • 全雙工:雙向雙車道,兩方向車輛同時開,互不干擾。

6.2 核心總結

三種通信模式的核心差異在於“雙向傳輸能力”和“同步傳輸能力”:

  • 單工:放棄雙向傳輸,追求簡單低成本;
  • 半雙工:支持雙向傳輸,但犧牲同步性,平衡成本與需求;
  • 全雙工:兼顧雙向與同步傳輸,追求最高效率,適用於實時通信場景(如聊天、監控)。
user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.