

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 보안 터널에서 데이터 스트림 멀티플렉싱 및 동시 TCP 연결 사용
<a name="multiplexing"></a>

보안 터널링 멀티플렉싱 기능을 사용하여 터널당 여러 데이터 스트림을 사용할 수 있습니다. 멀티플렉싱을 통해 여러 데이터 스트림을 사용하여 디바이스 문제를 해결할 수 있습니다. 또한 여러 로컬 프록시를 구축, 배포 및 시작하거나 동일한 디바이스에서 여러 터널을 열 필요가 없으므로 운영 부하를 줄일 수 있습니다. 예를 들어 여러 HTTP 및 SSH 데이터 스트림을 전송해야 하는 웹 브라우저의 경우 멀티플렉싱을 사용할 수 있습니다.

각 데이터 스트림에 대해 AWS IoT 보안 터널링은 동시 TCP 연결을 지원합니다. 동시 연결을 사용하면 클라이언트에서 요청이 여러 개 있을 때 시간 초과가 발생할 가능성이 줄어듭니다. 예를 들어 대상 디바이스에 로컬인 웹 서버에 원격으로 액세스할 때 로딩 시간을 줄일 수 있습니다.

다음 섹션에서는 멀티플렉싱 및 동시 TCP 연결 사용과 다양한 사용 사례에 대해 자세히 설명합니다.

**Topics**
+ [보안 터널에서 다중 데이터 스트림 멀티플렉싱](multiplexing-multiple-streams.md)
+ [보안 터널에서 동시 TCP 연결 사용](multiplexing-simultaneous-tcp.md)

# 보안 터널에서 다중 데이터 스트림 멀티플렉싱
<a name="multiplexing-multiple-streams"></a>

다중 연결 또는 포트를 사용하는 디바이스에 멀티플렉싱 기능을 사용할 수 있습니다. 문제 해결을 위해 원격 디바이스에 여러 번 연결해야 하는 경우에도 멀티플렉싱을 사용할 수 있습니다. 예를 들어 여러 HTTP 및 SSH 데이터 스트림을 전송해야 하는 웹 브라우저의 경우 멀티플렉싱을 사용할 수 있습니다. 두 스트림의 애플리케이션 데이터는 멀티플렉싱된 터널을 통해 디바이스로 동시에 전송됩니다.

## 사용 사례
<a name="multiplexing-use-case"></a>

예를 들어 디바이스 내 웹 애플리케이션에 연결하여 일부 네트워킹 파라미터를 변경하고 터미널을 통해 셸 명령을 실행하여 디바이스가 새 네트워킹 파라미터로 제대로 작동하는지 확인해야 할 수 있습니다. 이 시나리오에서는 웹 애플리케이션 및 터미널에 동시에 액세스하기 위해 HTTP 및 SSH 모두를 통해 디바이스에 연결하고 두 개의 병렬 데이터 스트림을 전송해야 할 수 있습니다. 멀티플렉싱 기능을 사용하면 이러한 두 개의 독립 스트림을 동일한 터널을 통해 동시에 전송할 수 있습니다.

![\[서로 다른 프로토콜을 통해 데이터를 스트리밍하기 위한 소스 디바이스, 프록시 서버 및 대상 디바이스가 있는 IoT 클라우드 아키텍처를 보여주는 다이어그램입니다.\]](http://docs.aws.amazon.com/ko_kr/iot/latest/developerguide/images/tunnel-multiplexing.png)


## 멀티플렉싱 터널을 설정하는 방법
<a name="multiplexing-tutorial"></a>

다음 절차에서는 여러 포트에 연결해야 하는 애플리케이션을 사용하여 디바이스 문제를 해결하기 위해 멀티플렉싱 터널을 설정하는 방법을 설명합니다. 하나의 HTTP 스트림과 하나의 SSH 스트림이라는 두 개의 멀티플렉싱된 스트림으로 하나의 터널을 설정합니다.

1. 

**(선택 사항) 구성 파일 생성**

   구성 파일을 사용하여 소스 및 대상 디바이스를 선택적으로 구성할 수 있습니다. 포트 매핑이 자주 변경될 가능성이 있는 경우 구성 파일을 사용합니다. CLI를 사용하여 포트 매핑을 명시적으로 지정하려는 경우 또는 지정된 수신 대기 포트에서 로컬 프록시를 시작할 필요가 없는 경우 이 단계를 건너뛸 수 있습니다. 구성 파일을 사용하는 방법에 대한 자세한 내용은 GitHub의 [Options set via --config](https://github.com/aws-samples/aws-iot-securetunneling-localproxy#options-set-via---config)(--config를 통해 설정되는 옵션)를 참조하세요.

   1. 소스 디바이스의 로컬 프록시가 실행될 폴더에 `Config`라는 구성 폴더를 생성합니다. 이 폴더 안에 다음 내용으로 `SSHSource.ini`라는 파일을 만듭니다.

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

   1. 대상 디바이스의 로컬 프록시가 실행될 폴더에 `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
   ```

   이 명령을 실행하면 로컬 프록시를 실행하는 데 사용할 소스 및 대상 액세스 토큰이 생성됩니다.

   ```
   {
   	"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 Device Client를 설정하거나 [GitHub](https://github.com/aws-samples/aws-iot-securetunneling-localproxy)에서 로컬 프록시 소스 코드를 다운로드하여 원하는 플랫폼에 맞게 빌드합니다. 그런 다음 대상 및 소스 로컬 프록시를 시작하여 보안 터널에 연결할 수 있습니다. 로컬 프록시 구성 및 사용에 대한 자세한 내용은 [로컬 프록시 사용 방법](how-use-local-proxy.md) 섹션을 참조하세요.
**참고**  
소스 디바이스에서 구성 파일을 사용하지 않거나 CLI를 사용하여 포트 매핑을 지정하지 않아도 동일한 명령을 사용하여 로컬 프록시를 실행할 수 있습니다. 소스 모드의 로컬 프록시는 사용할 수 있는 포트와 매핑을 자동으로 선택합니다.

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

   구성 파일을 사용하여 소스 및 대상 모드에서 로컬 프록시를 실행하려면 다음 명령을 실행합니다.

   ```
   // ----------------- 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를 사용하여 포트 매핑을 명시적으로 지정해 소스 및 대상 모드에서 로컬 프록시를 실행하려면 다음 명령을 실행합니다.

   ```
   // ----------------- 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/ko_kr/iot/latest/developerguide/images/multiplexing-post-mapping-translation.png)


# 보안 터널에서 동시 TCP 연결 사용
<a name="multiplexing-simultaneous-tcp"></a>

AWS IoT 보안 터널링은 각 데이터 스트림에 대해 둘 이상의 TCP 연결을 동시에 지원합니다. 원격 디바이스에 동시 연결이 필요한 경우 이 기능을 사용할 수 있습니다. 동시 TCP 연결을 사용하면 클라이언트에서 요청이 여러 개 있을 때 시간 초과가 발생할 가능성이 줄어듭니다. 예를 들어 여러 구성 요소가 실행되는 웹 서버에 액세스할 때 동시 TCP 연결을 사용하면 사이트를 로드하는 데 걸리는 시간을 줄일 수 있습니다.

**참고**  
동시 TCP 연결의 대역폭 제한은 각에 대해 초당 800KB입니다 AWS 계정. AWS IoT 보안 터널링은 수신 요청 수에 따라이 제한을 구성할 수 있습니다.

## 사용 사례
<a name="tcp-use-case"></a>

예를 들어 대상 디바이스에 로컬이고 여러 구성 요소가 실행되는 웹 서버에 원격으로 액세스해야 할 수 있습니다. 단일 TCP 연결을 사용하여 웹 서버에 액세스하려고 할 때 순차적으로 로드하면 사이트에서 리소스를 로드하는 데 걸리는 시간이 늘어날 수 있습니다. 동시 TCP 연결은 사이트의 리소스 요구 사항을 충족하여 로딩 시간을 단축함으로써 액세스 시간을 줄일 수 있습니다. 다음 다이어그램은 원격 디바이스에서 실행되는 웹 서버 애플리케이션에 대한 데이터 스트림에 동시 TCP 연결이 지원되는 방법을 보여줍니다.

**참고**  
터널을 사용하여 원격 디바이스에서 실행되는 여러 애플리케이션에 액세스하려는 경우 터널 멀티플렉싱을 사용할 수 있습니다. 자세한 내용은 [보안 터널에서 다중 데이터 스트림 멀티플렉싱](multiplexing-multiple-streams.md) 단원을 참조하십시오.

![\[TCP 및 WSS 프로토콜을 통해 연결된 소스 디바이스, 로컬 프록시, 프록시 서버 및 웹 서버 애플리케이션이 있는 대상 디바이스를 사용한 IoT 클라우드 설정을 보여주는 그림입니다.\]](http://docs.aws.amazon.com/ko_kr/iot/latest/developerguide/images/tcp-tunneling.png)


## 동시 TCP 연결을 사용하는 방법
<a name="multiple-tcp-tutorial"></a>

다음 절차에서는 동시 TCP 연결을 사용하여 원격 디바이스의 웹 브라우저에 액세스하는 방법을 안내합니다. 클라이언트의 요청이 여러 개 있는 경우 AWS IoT 보안 터널링은 요청을 처리하기 위해 동시 TCP 연결을 자동으로 설정하여 로드 시간을 줄입니다.

1. 

**터널 열기**

   `OpenTunnel` API 작업 또는 `open-tunnel` CLI 명령을 사용하여 터널을 엽니다. `HTTP`를 서비스로 지정하고 원격 디바이스에 해당하는 AWS IoT 사물의 이름을 지정하여 대상을 구성합니다. 웹 서버 애플리케이션이 이 원격 디바이스에서 실행되고 있습니다. AWS IoT 레지스트리에서 IoT 사물을 이미 생성했어야 합니다. 자세한 내용은 [레지스트리로 사물 관리](thing-registry.md) 단원을 참조하십시오.

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

   이 명령을 실행하면 로컬 프록시를 실행하는 데 사용할 소스 및 대상 액세스 토큰이 생성됩니다.

   ```
   {
   	"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)에서 로컬 프록시 소스 코드를 다운로드하여 선택한 플랫폼에 맞게 빌드해야 합니다. 그런 다음 대상 및 소스 로컬 프록시를 시작하여 보안 터널에 연결하고 원격 웹 서버 애플리케이션을 사용할 수 있습니다.
**참고**  
 AWS IoT 보안 터널링에서 동시 TCP 연결을 사용하려면 최신 버전의 로컬 프록시로 업그레이드해야 합니다. AWS IoT 디바이스 클라이언트를 사용하여 로컬 프록시를 구성한 경우에는 이 기능을 사용할 수 없습니다.

   ```
   // 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
   ```

   로컬 프록시 구성 및 사용에 대한 자세한 내용은 [로컬 프록시 사용 방법](how-use-local-proxy.md) 섹션을 참조하세요.

이제 터널을 사용하여 웹 서버 애플리케이션에 액세스할 수 있습니다. 클라이언트에서 여러 요청이 있을 때 AWS IoT 보안 터널링이 자동으로 설정되고 동시 TCP 연결을 처리합니다.