【秋招】嵌入式面試八股文 - MQTT協(xié)議
【秋招】嵌入式面試八股文 - 最全專欄
1. MQTT基本概念
Q: 什么是MQTT協(xié)議?它的主要特點是什么?
MQTT(Message Queuing Telemetry Transport)是一種輕量級的發(fā)布/訂閱消息傳輸協(xié)議,專為受限設(shè)備和低帶寬、高延遲或不可靠的網(wǎng)絡(luò)設(shè)計。
主要特點:
- 輕量級:協(xié)議頭部僅2字節(jié),最小化傳輸開銷
- 發(fā)布/訂閱模式:解耦消息發(fā)送者和接收者
- QoS機制:提供三種服務(wù)質(zhì)量等級
- 保留消息:新訂閱者可以立即獲取最新狀態(tài)
- 遺囑消息:客戶端異常斷開時自動發(fā)布特定消息
- 會話保持:支持持久會話和清除會話
Q: MQTT的發(fā)布/訂閱模式是如何工作的?
MQTT基于主題(Topic)的發(fā)布/訂閱模式:
- 發(fā)布者(Publisher)將消息發(fā)送到特定主題
- 代理(Broker)接收消息并轉(zhuǎn)發(fā)給訂閱該主題的客戶端
- 訂閱者(Subscriber)接收其訂閱主題的所有消息
這種模式實現(xiàn)了發(fā)布者和訂閱者的完全解耦,雙方無需知道對方的存在。
Q: MQTT協(xié)議的版本有哪些?各版本有什么區(qū)別?
主要版本:
- MQTT 3.1:最早的標(biāo)準(zhǔn)化版本
- MQTT 3.1.1:修復(fù)了3.1的問題,成為OASIS標(biāo)準(zhǔn),目前應(yīng)用最廣泛
- MQTT 5.0:最新版本,增加了多項新功能
MQTT 5.0相比3.1.1的主要改進(jìn):
- 會話過期間隔
- 消息過期間隔
- 主題別名
- 用戶屬性
- 共享訂閱
- 請求/響應(yīng)模式支持
- 原因碼和原因字符串
2. MQTT核心功能
Q: MQTT的QoS級別有哪些?各自適用于什么場景?
MQTT提供三種QoS(Quality of Service)級別:
QoS 0 (最多一次):
- 消息發(fā)送后不等待確認(rèn),可能丟失
- 最低開銷,最高吞吐量
- 適用場景:傳感器數(shù)據(jù)等允許丟失的場景
QoS 1 (至少一次):
- 確保消息至少送達(dá)一次,但可能重復(fù)
- 中等開銷
- 適用場景:計費、日志等不能丟但可以重復(fù)的場景
QoS 2 (恰好一次):
- 確保消息只送達(dá)一次,不丟失不重復(fù)
- 最高開銷,最低吞吐量
- 適用場景:金融交易、控制命令等關(guān)鍵業(yè)務(wù)
Q: 什么是MQTT的保留消息(Retained Message)?
保留消息是一種特殊的消息,當(dāng)發(fā)布到某個主題時,Broker會保存該消息:
- 任何新訂閱該主題的客戶端會立即收到最近的保留消息
- 每個主題只能有一個保留消息
- 發(fā)布空消息可以清除保留消息
應(yīng)用場景:
- 設(shè)備狀態(tài)報告
- 配置信息發(fā)布
- 系統(tǒng)公告
Q: 什么是MQTT的遺囑消息(Will Message)?它有什么用途?
遺囑消息是客戶端連接到Broker時預(yù)設(shè)的一條消息,當(dāng)客戶端異常斷開連接時,Broker會自動發(fā)布該消息:
- 在CONNECT報文中設(shè)置
- 包含主題、消息內(nèi)容、QoS級別和保留標(biāo)志
- 只在非正常斷開時觸發(fā)
主要用途:
- 通知其他客戶端設(shè)備離線
- 發(fā)布設(shè)備最后狀態(tài)
- 觸發(fā)故障恢復(fù)機制
Q: MQTT的主題(Topic)有什么規(guī)則?如何使用通配符?
MQTT主題是UTF-8字符串,使用斜杠(/)分隔層級,例如:home/livingroom/temperature
主題通配符:
- 單層通配符(+):匹配一個層級,如
home/+/temperature
匹配所有房間的溫度 - 多層通配符(#):匹配多個層級,如
home/#
匹配home下所有主題 - 通配符只能用于訂閱,不能用于發(fā)布
- #必須是主題最后一個字符
主題設(shè)計最佳實踐:
- 避免以/開頭或結(jié)尾
- 使用具體而有意義的層級結(jié)構(gòu)
- 考慮未來擴展性
3. MQTT協(xié)議細(xì)節(jié)
Q: MQTT的報文類型有哪些?各自的作用是什么?
MQTT定義了14種報文類型(MQTT 3.1.1):
連接管理:
- CONNECT:客戶端請求連接到服務(wù)器
- CONNACK:服務(wù)器對連接請求的響應(yīng)
- DISCONNECT:客戶端請求斷開連接
- PINGREQ:客戶端發(fā)送心跳請求
- PINGRESP:服務(wù)器響應(yīng)心跳請求
消息發(fā)布:
- PUBLISH:發(fā)布消息
- PUBACK:QoS 1消息的確認(rèn)
- PUBREC:QoS 2消息的第一階段確認(rèn)
- PUBREL:QoS 2消息的第二階段確認(rèn)
- PUBCOMP:QoS 2消息的完成確認(rèn)
訂閱管理:
- SUBSCRIBE:訂閱主題
- SUBACK:訂閱確認(rèn)
- UNSUBSCRIBE:取消訂閱
- UNSUBACK:取消訂閱確認(rèn)
Q: MQTT的連接保持機制是如何工作的?
MQTT使用心跳機制維持連接:
- ?;顣r間(Keep Alive):客戶端在CONNECT報文中設(shè)置表示客戶端在無消息交換時最長允許的時間間隔單位為秒,0表示禁用心跳機制
- 心跳交換:如果在?;顣r間內(nèi)沒有消息交換,客戶端必須發(fā)送PINGREQ服務(wù)器必須響應(yīng)PINGRESP如果服務(wù)器在1.5倍?;顣r間內(nèi)未收到任何消息,會斷開連接
- 連接斷開處理:正常斷開:客戶端發(fā)送DISCONNECT異常斷開:觸發(fā)遺囑消息機制
Q: MQTT的會話(Session)是什么?持久會話和清除會話有什么區(qū)別?
MQTT會話是客戶端與服務(wù)器之間的狀態(tài)信息,包括:
- 客戶端的訂閱
- 未確認(rèn)的QoS 1和QoS 2消息
- 未接收的QoS 2消息
清除會話(Clean Session=1):
- 連接時創(chuàng)建全新會話
- 斷開連接時刪除所有會話狀態(tài)
- 適用于臨時連接或簡單場景
持久會話(Clean Session=0):
- 連接時恢復(fù)之前的會話狀態(tài)
- 斷開連接時保留會話狀態(tài)
- 適用于不穩(wěn)定網(wǎng)絡(luò)或需要消息可靠傳遞的場景
4. MQTT安全性
Q: MQTT的安全機制有哪些?如何保證通信安全?
MQTT安全機制包括:
- 傳輸層安全:TLS/SSL加密:保護數(shù)據(jù)傳輸安全端口通常為8883(加密)vs 1883(非加密)
- 認(rèn)證機制:用戶名/密碼認(rèn)證客戶端證書認(rèn)證(TLS雙向認(rèn)證)自定義認(rèn)證插件
- 授權(quán)控制:主題級別的訪問控制發(fā)布/訂閱權(quán)限分離ACL(訪問控制列表)
- 客戶端標(biāo)識:唯一的ClientID連接IP限制
安全最佳實踐:
- 使用TLS加密所有通信
- 實施強密碼策略
- 定期輪換證書和密鑰
- 實施細(xì)粒度的訪問控制
Q: 如何處理MQTT中的敏感數(shù)據(jù)?
處理MQTT敏感數(shù)據(jù)的方法:
- 傳輸層加密:使用TLS/SSL加密整個通信通道
- 消息級加密:在應(yīng)用層對消息內(nèi)容進(jìn)行加密使用對稱加密(AES)或非對稱加密(RSA)密鑰管理與分發(fā)機制
- 數(shù)據(jù)脫敏:敏感字段脫敏后再發(fā)布使用掩碼或哈希替代原始數(shù)據(jù)
- 訪問控制:限制敏感主題的訪問權(quán)限實施基于角色的訪問控制
5. MQTT性能與優(yōu)化
Q: 如何優(yōu)化MQTT的性能和資源使用?
MQTT性能優(yōu)化策略:
- 客戶端優(yōu)化:選擇合適的QoS級別優(yōu)化消息大小(壓縮、分片)合理設(shè)置保活時間使用持久會話減少重連開銷
- 主題設(shè)計優(yōu)化:避免過深的主題層級使用通配符減少訂閱數(shù)量按功能或設(shè)備類型組織主題
- Broker優(yōu)化:集群
剩余60%內(nèi)容,訂閱專欄后可繼續(xù)查看/也可單篇購買
雙非本,211碩。本碩均為機械工程,自學(xué)嵌入式,在校招過程中拿到小米、格力、美的、比亞迪、海信、海康、大華、江波龍等offer。八股文本質(zhì)是需要大家理解,因此里面的內(nèi)容一定要詳細(xì)、深刻!這個專欄是我個人的學(xué)習(xí)筆記總結(jié),是對很多面試問題進(jìn)行的知識點分析,專欄保證高質(zhì)量,讓大家可以高效率理解與吸收里面的知識點!掌握這里面的知識,面試絕對無障礙!