360 Followers
·
Follow

前言

Image for post
Image for post

各位好,在上一篇介紹了 MQTT 通訊協定,對 MQTT 有所認識之後,在 IoT 的世界當中,還有一個具互通性的 AMQP 協定,接下來就讓我們進入主題吧:

AMQP(Advanced Message Queuing Protocol)

Image for post
Image for post
AMQP (Advanced Message Queuing Protocol)

由 OASIS(結構化資訊標準促進組織)提出,具互通性的 AMQP 協定,這個 AMQP 協定在傳輸過程當中,訊息有佇列的功能,也就是訊息可以在 Broker 中排隊,等待有人來領取訊息。早期主要於金融系統交易訊息實做,現今於手機端與後台訊息傳送使用

AMQP 通訊流程

  • Producer:訊息的發送者,發送訊息者,傳送訊息給 AMQP Broker 。
  • Broker:訊息的中繼站,會在這邊幫訊息做分配的動作。
  • Consumer:訊息的接收者。
Image for post
Image for post
AMQP 協定中的通訊流程

與 MQTT 相同的一樣有一個發送者、中繼站與接收者,但 Broker 的構造有稍微的不同,接下來繼續介紹。

Broker

在 Broker 的角色中,其實裡面包含:

  • Exchange:所謂的交換機制,在 AMQP 協定中有四種交換機制。
  • Queue:存放訊息的地方。
Image for post
Image for post
AMQP 協定中的通訊流程

Exchange 四種交換機制

剛剛提到 Exchange 內有四種交換機制,根據交換機制的不同,訊息分配的方式也不太一樣,以下是四種交換機制的介紹:

  • Direct:bindings 跟 Message 當中都包含一個「路由鍵(routing keys)」,Broker 可以透過這個 key 將 Message 分配到指定的 Queue。
  • Topic:Message 的「路由鍵(routing keys)」與 binding 的「路由鍵(routing keys)」定的模式符合「#」(代替零個或多個層級)或「*」(代替單一層級),則會將訊息分配到綁定的 queues ,以 Message 「Meow.cat.1」為例,可以符合「Meow.#」或「Meow.cat.*」或「Meow.*.1」的 Queue。
  • Fanout:這個模式會從 exchange 分配訊息到綁定的所有 queue,而「路由鍵(routing keys)」會被忽略。
  • Headers:透過 Message 的 Header 來判別傳到何者的 queue,其中 x-match 參數為匹配模式,any 只要符合就可以匹配,all


Image for post
Image for post
MQTT 通訊協定淺談

前言

在物聯網 IoT 的世界當中有許多傳送給伺服器或接收來自伺服器訊息的方法,常見的接收與傳送的方法有:網站標準通訊協定─ HTTP 通訊協定或是透過雙方連續通訊的 WebSocket,而今天的主軸,來介紹由 IBM 提出,現在轉變成開放原始碼的 MQTT 協定,內容包含 MQTT 原理、在伺服器中安裝 MQTT Broker 以及與 MQTT 有關的 CVE。

常見的 IoT 通訊協定

Image for post
Image for post
常見的 IoT 通訊協定

在前言中提到三種通訊協定,分別為以下 HTTP、 WebSocket、 MQTT:

  1. HTTP:Web 標準通訊的協定,可以透過 Web 服務來實作傳送與接收資料。
  2. WebSocket:雙向通訊與連續接收和傳送資料,單一路徑進行收與送。
  3. MQTT:發布與訂閱,執行一對多通訊的通訊協定。

MQTT 原理

1999 年 IBM 提出第一版本的 MQTT 協定,為了滿足「簡單」、「輕量級」、「網路環境差」的需求,透過「發布」與「訂閱」方式,進行一對多通訊的通訊協定,而在 MQTT 協定中的角色有三種,分別為傳送訊息的使用者─ Publisher 、透過中繼通訊伺服器就算不知道雙方 IP 也可以輕鬆傳訊─ Broker、以及接收訊息的使用者─ Subscriber。

MQTT 的版本

  • MQTT v3.1.0
  • MQTT v3.1.1 (目前使用):使用 TCP / IP 協議
  • MQTT v5( 2018 年 01 月釋出)
  • MQTT-SN(2013 年釋出):嘗試使用 UDP 進行傳輸、近幾年規範未更新

MQTT 協定中的角色

Image for post
Image for post
MQTT 協定中的角色
  1. Publisher: 作為傳送訊息的使用者
  2. Broker:作為傳訊息的中繼通訊伺服器
  3. Subscriber:作為接受訊息的使用者,可以跟 Publisher 為同一個人。

MQTT 協定中的通訊流程

MQTT 協定簡單的通訊流程,當今天想要接收訊息的時候,在 Subscriber 也就是接收訊息的使用者要先訂閱發送者會發布的 Topic,而 Publisher 傳送訊息的使用者發布訊息時發布到 Topic 中,而已經訂閱的 Subscriber 就可以接收到發布的訊息。

Image for post
Image for post
MQTT 協定中的通訊流程

傳送訊息的流程

  1. Subscriber 先訂閱 Topic x
  2. Publisher 針對 Topic x 發布訊息
  3. Subscriber 接收訊息

MQTT 中的 Topic

Image for post
Image for post

提到 Topic ,在 MQTT 中傳送與接收訊息都會指定 Topic 的目標,而 Topic 有幾個要注意的地方,如多個使用者可以訂閱相同的 Topic ,當發送訊息給 Topic ,訂閱該 Topic 都會接收到訊息,而 Topic 為階層式架構,可以定義許多階層,而大小寫有差異,總長度不能超過…


來記錄一下,這禮拜在 GCP 透過 Docker 部屬一台 Kali 。

進入 VM 執行個體

  1. 首先你需要有 GCP ( Google Cloud Platform)
  2. 進入 Compute Engine
  3. 選擇 VM 執行個體
  4. 建立執行個體
Image for post
Image for post

建立執行個體

  1. 填寫名稱
  2. 勾選容器
  3. 在容器印象檔,輸入:kalilinux/kali-rolling
Image for post
Image for post

使用 SSH 進入 VM

  1. 開好容器之後,可以透過 GCP 內建的 SSH 連線
Image for post
Image for post

透過 Docker 操作 Kali

  1. 透過 docker ps 查看目前的容器
  2. 透過 docker exec -it [容器 ID] /bin/bash
Image for post
Image for post

透過 ssh 用密碼登入 GCP

  1. sudo passwd 使用者帳號
  2. sudo vim /etc/ssh/sshd_config
    PasswordAuthentication yes
  3. sudo systemctl restart sshd
  4. ssh 使用者帳號@ip
    打密碼就可以進去了

About

飛飛

尋找自己的意義,在資訊圈努力打滾求生存。

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store