2011-02-03 1 views
0

私は、ネットワーク上でデータを送受信する必要のあるアプリケーション(クライアント側とサーバー側の両方)を構築しています。メッセージは短く、おそらくほとんどがバイナリです。公共のネットワークでも接続が安全である必要があります。シンプルで安全で軽量なネットワークプロトコルを選択する

私は、プロトコルがすべてのセッション管理オーバーヘッド(ハンドシェイク、ドロップされたパケットの処理、ACK応答の返送など)を処理するなら、私は大好きです。 Windows、Linux、OS X(.netフレームワークと* NIXカーネル)で自然にサポートされているのであれば、それはいいかもしれません。

これまでのところ、私はいくつかのオプションと考えられてきました:

  • HTTPSは - オーバーヘッドを除いて、上記のすべてのために良いサポートしています。メッセージが短い場合は、すべてのHTTPヘッダーが冗長になります。ネイティブにサポートされています。
  • IPSEC - ネイティブでサポートされていますが、セッションを自分で処理する必要があります。
  • HTTPS経由のGoogleのプロトコルバッファ - 現在のところ最適なオプションですが、実装には多少の労力が必要です。

私はネットワークプログラミングの世界には新しいので、アドバイスやヒントをいただければ幸いです。

+2

SSL経由でのインストールを忘れないでください。 –

答えて

2

まず、あなたは仕事をしたいレベルで決めなければならないと思います。プロトコルとしてのIPSECは、IPとほぼ同じレベルで動作します。基本的にはすべて自分で行う必要があります。 HTTPSは、かなり高いレベルのプロトコルです。

HTTP/HTTPSは(ほとんどの作業で)プロキシなどを介して動作します.HTTPを使用すると、わずかな追加コストでエンドポイントのプライバシーとオプションの認証が提供されます。オペレーティングシステムでは、既に使用できるキーストアを提供している場合もあります。

ソケットを開いて、暗号化されたデータを前後にプッシュすることもできます。 telnetまたはSSHを考えてみてください(ただし、SSHはプロトコルネゴシエーションフェーズでかなり重いですが)。暗号化ライブラリはほとんどのフレームワークで使用できますが、キー管理と交換には注意が必要です。ただし、事前共有キーを使用して暮らすことができれば、これは必ずしも問題ではありません。それ以外の場合、X509証明書は、多くのプラットフォームで容易にサポートされる実行可能な方法かもしれません。

2

IPSecはIPレベルで動作し、システムレベルでネットワーク接続を保護するために使用されます。アプリケーションレベルでは使用できません。したがって、SSL/TLSは最も普及していてネイティブにサポートされているものとして最高の選択肢です。UDPを使用したい場合は、DTLSプロトコル(UDP over TLS)がありますが、通常のTLSほど広くサポートされていません。

ソケットを一切扱わずにビジネスロジックに重点を置いておきたい場合は、MsgConnect製品をご覧ください。これは軽量なクロスプラットフォームのメッセージ指向ミドルウェアで、メッセージの送受信を可能にし、MsgConnectはソケット自体を処理します。

関連する問題