15
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

セゾンテクノロジーAdvent Calendar 2024

Day 17

SmartProxyでインターネット接続を実現しているWebSocketについて

Last updated at Posted at 2024-12-17

この記事は セゾンテクノロジー Advent Calendar 2024 17日目の記事です。
シリーズ2は HULFT10 のエンジニアによる投稿をお届けします。

はじめに

12月10日にリリースされたHULFT10のラインナップとして、オンプレ環境に導入してインターネット経由での安全なファイル集配信を実現するSmartProxyが追加されました。
SmartProxyはインターネット経由のファイル転送を実現する仕組みとして、元々のラインナップであるHULFT-WebConnectと同様にWebSocketの仕組みが使用されています。このWebSocketについて触れてみたいと思います。

SmartProxyについて

基本的な構成としては以下のように配信HULFTと集信HULFTの両側にSmartProxyが配置される構成となります。
(以下は簡易的な図となります)
画像1.png
このSmartProxyの間の通信でWebSocketの仕組みが使用されています。

WebSocketの特徴

  1. 双方向通信
    サーバーとクライアント間で双方向のデータ通信が可能です。
  2. フルデュプレックス通信
    サーバーとクライアントが同時にデータを送受信できます。
  3. 低遅延
    接続の確立後、データの送受信に必要なオーバーヘッドが非常に少ないため、低遅延で通信が可能になります。
  4. 効率的なリソース使用
    一度のハンドシェイクで接続が確立され、その接続を維持することで、リソースの使用が効率化されます。

WebSocketの手順

大まかなWebSocketの手順としては

  1. 接続の確立 (openingハンドシェイク)
  2. データの送受信
  3. 接続のclose (closingハンドシェイク)

です。

1. 接続の確立 (openingハンドシェイク)

まずは接続を確立するために、接続をopenしてハンドシェイクと呼ばれる接続確立のプロセスを行います。
具体的には以下のようなリクエストをクライアント側から送信します。
HULFTの配信要求時の転送ではクライアントは配信HULFTとなるので、配信HULFT側のSmartProxyから送信します。

GET /chat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Origin: http://example.com
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Version: 13

このリクエストはHTTPの乗っ取った形式となっています。リクエストの中身にもあるようにHTTPをWebSocketにUpgradeするような要請となります。

サーバ側 (集信HULFT側のSmartProxy)から応答が返ってくることで接続が確立されます。

2. データの送受信

接続確立後はクライアント、サーバのどちらからも、接続がcloseされるまでいつでもデータを伝送することができます。
データは一連のフレームを利用して伝送されます。フレームはデータの情報を付与したデータの小さな塊のようなものです。
データの情報としては

  • データの種類
  • データが最後かどうか
  • データを隠すための情報 (WebSocketにはマスクと呼ばれるデータを隠す仕組みがある)

等々の情報があげられます。
HULFTの転送においてはここで転送される実データがHULFT独自のプロトコルで流れることになります。

3. 接続のclose

前述のフレームの中でcloseを通知するようなCloseフレームが存在します。これを送信後、相手からの応答のCloseフレームを受信することで接続を安全にcloseします。

まとめ

以上のような仕組み+TLS暗号化 を用いたWSS(WebSocket Secure)を使用して、安全なインターネット接続を実現しています。
これをまとめるためにRFC6455を読みつつ、他の方の記事を読みつつでしたが、理解がふんわりだった部分があるのを実感しました。仕組みを理解していなくても今はライブラリのおかげで一行に書けてしまう部分もあります。こういった根本の技術の理解もすすめることを心掛けたいです。

参考

15
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?