

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

# 多工處理資料串流，並在安全通道中使用同步 TCP 連線
<a name="multiplexing"></a>

您可使用安全通道多工功能，在每個通道中使用多個資料串流。透過多工處理，您可以使用多個資料串流對裝置進行疑難排解。您還可透過消除建置、部署及啟動多個本機裝置或為相同裝置開啟多個通道的需求來減少作業負載。例如，對於需要傳送多個 HTTP 和 SSH 資料串流的 Web 瀏覽器，可使用多工處理。

對於每個資料串流， AWS IoT 安全通道支援同時 TCP 連線。使用同時連線可減少用戶端發出多個請求時逾時的可能性。例如，它可以減少遠端存取目標裝置本機的 Web 伺服器時的載入時間。

以下各節將詳細說明多工處理和使用同時 TCP 連線，以及它們的不同使用案例。

**Topics**
+ [多工處理安全通道中的多個資料串流](multiplexing-multiple-streams.md)
+ [在安全通道中使用 TCP 連線](multiplexing-simultaneous-tcp.md)

# 多工處理安全通道中的多個資料串流
<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)


# 在安全通道中使用 TCP 連線
<a name="multiplexing-simultaneous-tcp"></a>

AWS IoT 安全通道為每個資料串流同時支援多個 TCP 連線。當您需要同時連線至遠端裝置時，可以使用此功能。如果有多個請求來自用戶端，使用同時 TCP 連線可以降低逾時的可能性。例如，當存取具有執行多個元件的 Web 伺服器時，同時 TCP 連線可減少載入網站所需的時間。

**注意**  
同時 TCP 連線的頻寬限制為每秒 800 KB AWS 帳戶。 AWS IoT 安全通道可根據傳入請求的數量為您設定此限制。

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

假設您需要遠端存取位於目的地裝置本機上，且其上有多個元件運行的 Web 服務器。若使用單一 TCP 連線，嘗試存取 Web 伺服器時，循序載入可能會增加載入網站上資源所需的時間。同時 TCP 連線可透過滿足網站的資源需求來減少加載時間，從而縮短存取時間。下圖顯示對於通往遠端裝置上執行之 Web 伺服器應用程式的資料串流如何支援同時 TCP 連線。

**注意**  
如果您想要使用通道存取遠端裝置上執行的多個應用程式，您可以使用通道多工處理。如需詳細資訊，請參閱[多工處理安全通道中的多個資料串流](multiplexing-multiple-streams.md)。

![\[顯示 IoT 雲端設定與來源裝置、本機代理、代理伺服器，以及目的地裝置與 Web 伺服器應用程式，透過 TCP 和 WSS 通訊協定連接。\]](http://docs.aws.amazon.com/zh_tw/iot/latest/developerguide/images/tcp-tunneling.png)


## 如何使用同時 TCP 連線
<a name="multiple-tcp-tutorial"></a>

下列程序將逐步引導您如何使用同時 TCP 連線來存取遠端裝置上的 Web 瀏覽器。當用戶端有多個請求時， AWS IoT 安全通道會自動設定同時 TCP 連線來處理請求，進而縮短載入時間。

1. 

**開啟通道**

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

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

   執行此命令會產生您將用來執行本機 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. 

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

   您已從 [GitHub](https://github.com/aws-samples/aws-iot-securetunneling-localproxy) 下載了本機代理原始碼，並為您選擇的平台進行建置。然後，您可以啟動目的地和來源本機 Proxy，以連線到安全通道，並開始使用遠端 Web 伺服器應用程式。
**注意**  
若要讓 AWS IoT 安全通道使用同時 TCP 連線，您必須升級至最新版本的本機代理。如果您使用 AWS IoT 裝置用戶端設定本機 Proxy，則無法使用此功能。

   ```
   // Start the destination local proxy
   ./localproxy -r us-east-1 -d HTTP=80 -t destination_client_access_token
   
   // Start the source local proxy
   ./localproxy -r us-east-1 -s HTTP=5555 -t source_client_access_token
   ```

   如需設定和使用本機 Proxy 的詳細資訊，請參閱 [如何使用本機代理](how-use-local-proxy.md)。

您現在可以使用通道存取 Web 伺服器應用程式。當用戶端有多個請求時， AWS IoT 安全通道會自動設定和處理同時 TCP 連線。