

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 多工處理安全通道中的多個資料串流
<a name="multiplexing-multiple-streams"></a>

對於使用多個連接或連接埠的裝置，您可以使用多工功能。當您需要與遠端裝置進行多個連線以疑難排解任何問題時，也可以使用多工處理。例如，可使用於需要傳送多個 HTTP 和 SSH 資料串流的 Web 瀏覽器。來自兩個串流的應用程式資料會透過多工通道同時傳輸。

## 範例使用案例
<a name="multiplexing-use-case"></a>

例如，您可能需要連接至裝置上的 Web 應用程式以更改某些連網參數，同時透過終端機發出 shell 命令，驗證裝置是否在使用新的連網參數時仍然正常運作。在此案例中，您可能需要透過 HTTP 和 SSH 連線到裝置，並傳輸兩個平行資料串流，以同時存取 Web 應用程式和終端機。利用多工功能，這兩個獨立串流可在同一時間透過同一個通道進行傳輸。

![\[圖表顯示 IoT 雲端架構與來源裝置、代理伺服器和目的地裝置，用於透過不同通訊協定串流資料。\]](http://docs.aws.amazon.com/zh_tw/iot/latest/developerguide/images/tunnel-multiplexing.png)


## 如何設定多工通道
<a name="multiplexing-tutorial"></a>

下列程序將逐步引導您如何使用需要連線至多個連接埠的應用程式，來設定多工通道，以便對裝置進行疑難排解。您會設定一個具有兩個多工串流的通道：一個 HTTP 串流和一個 SSH 串流。

1. 

**(選擇性) 建立組態檔**

   您可以選擇性地使用組態檔來設定來源和目的地裝置。如果您的連接埠映射可能經常變更，請使用組態檔。如果您喜歡使用 CLI 指定連接埠映射，或無需在指定的接聽連接埠上啟動本機 Proxy，則可略過此步驟。如需有關如何使用組態檔的詳細資訊，請參閱 GitHub 中[透過 —config 設定的選項](https://github.com/aws-samples/aws-iot-securetunneling-localproxy#options-set-via---config)。

   1. 在來源裝置上，在要執行本機 Proxy 的資料夾中，建立名為 `Config` 的組態資料夾。在此資料夾中建立一個名為 `SSHSource.ini` 的檔案，其內容如下：

      ```
      HTTP1 = 5555
      SSH1 = 3333
      ```

   1. 在目的地裝置上，在要執行本機 Proxy 的資料夾中，建立名為 `Config` 的組態資料夾。在此資料夾中建立一個名為 `SSHDestination.ini` 的檔案，其內容如下：

      ```
      HTTP1 = 80
      SSH1 = 22
      ```

1. 

**開啟通道**

   使用 `OpenTunnel` API 操作或 `open-tunnel` CLI 命令開啟通道。透過將 `SSH1`和 指定`HTTP1`為服務，以及對應至遠端裝置的 AWS IoT 物件名稱來設定目的地。您的 SSH 和 HTTP 應用程式正在此遠端裝置上執行。您必須已在 AWS IoT 登錄檔中建立 IoT 物件。如需詳細資訊，請參閱[使用登錄檔管理物件](thing-registry.md)。

   ```
   aws iotsecuretunneling open-tunnel \
   	--destination-config thingName=RemoteDevice1,services=HTTP1,SSH1
   ```

   執行此命令會產生您將用來執行本機 Proxy 的來源和目的地存取字符。

   ```
   {
   	"tunnelId": "b2de92a3-b8ff-46c0-b0f2-afa28b00cecd",
   	"tunnelArn": "arn:aws:iot:us-west-2:431600097591:tunnel/b2de92a3-b8ff-46c0-b0f2-afa28b00cecd",
   	"sourceAccessToken": source_client_access_token,
   	"destinationAccessToken": destination_client_access_token
   }
   ```

1. 

**配置並啟動本機代理**

   在您執行本機代理之前，請先設定 AWS IoT 裝置用戶端，或從 [GitHub](https://github.com/aws-samples/aws-iot-securetunneling-localproxy) 下載本機代理原始程式碼，然後針對您選擇的平台建置它。然後，您可以啟動目的地和來源本機 Proxy 以連接到安全通道。如需設定和使用本機 Proxy 的詳細資訊，請參閱 [如何使用本機代理](how-use-local-proxy.md)。
**注意**  
在來源裝置上，如果您不使用任何組態檔或使用 CLI 指定連接埠映射，您仍然可以使用相同的命令來執行本機 Proxy。本機 Proxy 將會自動選取可用的連接埠供您使用並管理映射。

------
#### [ Start local proxy using configuration files ]

   執行下列命令，以使用組態檔在來源和目的地模式下執行本機 Proxy。

   ```
   // ----------------- Start the destination local proxy -----------------------
   ./localproxy -r us-east-1 -m dst -t destination_client_access_token
   
   // ----------------- Start the source local proxy ----------------------------
   // You also run the same command below if you want the local proxy to
   // choose the mappings for you instead of using configuration files.
   ./localproxy -r us-east-1 -m src -t source_client_access_token
   ```

------
#### [ Start local proxy using CLI port mapping ]

   使用 CLI 明確指定連接埠映射，以執行下列命令，在來源和目的地模式中執行本機 Proxy。

   ```
   // ----------------- Start the destination local proxy -----------------------------------
   ./localproxy -r us-east-1 -d HTTP1=80,SSH1=22 -t destination_client_access_token
   
   // ----------------- Start the source local proxy ----------------------------------------
   ./localproxy -r us-east-1 -s HTTP1=5555,SSH1=33 -t source_client_access_token
   ```

------

來自 SSH 和 HTTP 連線的應用程式資料現在可以透過多工通道同時進行傳輸。從下方對應圖中可看出，服務識別符的作用是一種可讀取格式，用來轉換來源和目的地裝置之間的連接埠映射。透過此組態，安全通道會將來源裝置上連接埠 *5555* 的任何傳入 HTTP 流量轉送至目的地裝置上的連接埠 *80*，以及從連接埠 *3333* 傳入的 SSH 流量轉送至目的地裝置上的連接埠 *22*。

![\[將服務識別符從來源和目的地本機代理映射到處理後轉譯連接埠映射的轉譯程序。\]](http://docs.aws.amazon.com/zh_tw/iot/latest/developerguide/images/multiplexing-post-mapping-translation.png)
