web-dev-qa-db-ja.com

ネットワーク通信のデザインパターン

this など、過去に尋ねたいくつかの質問は、実際にはもっと基本的な質問に要約されることに気づきました。

ネットワーク通信のよく知られたデザインパターンはありますか?その性質上、プロトコルの構築/解析はあ​​りますか?グーグル検索はあまり明らかにしていません。

特定の問題の解決策を探しているのではなく、ネットワーク通信とそのプロトコルを扱う文書化されたデザインパターンを探していることに注意してください。

編集:

デザインパターンに結び付けられていない限り、さまざまな実装の詳細を提案したり、特定のプロトコルについて話し合ったりしないでください。プロトコルの設計は問題ではありません。通信パターン自体は言うまでもなく、私が探しているプロトコルを作成または解析するための設計パターンです。

EDIT2:

ネットワーク通信の一般的なパターンを誰も思い付いていないなんて信じられません。はい、私は「状況によって異なります」と知っていますが、どのプロジェクトについても言えるでしょう。それでも、一般的なアイデアをカバーするパターンはたくさんあります。

37

責任の連鎖パターンは、ネットワークとの間でデータを送受信するのに役立つ可能性があると言えます。

クライアントからサーバーに送信する一連のコマンドを作成します。各コマンドは責任の連鎖を通じて処理され、コマンドを正しく処理するためにデータが追加されます。

データ送信では、チェーンは次のようになります

 
コマンド->一部をラップ->暗号化->データの送信
 
コマンド
(ソース、追加
 
が必要な場合の情報)
 

データの受信では、チェーンは似ている可能性がありますが、その逆です。

データの受信->復号化->余分なデータのアンラップ->コマンドの実行

責任の連鎖の詳細については、この記事を確認してください。 http://www.vincehuston.org/dp/chain.html

9
Martin

これはかなり幅広い質問であり、その扱いにはかなり密な本が必要になる可能性があります。

私自身はそのようなリソースを知りませんが、これをよく考えて、ネットワーク通信パターン空間の次元を考えてみましょう。

接続モダリティ:{コネクションベース、コネクションレス}

相互作用モダリティ:{同期、非同期}

会話の複雑さ:{コマンド-応答、ダイアログ}

メッセージフォーム:{freeform-stream、半構造化ブロック、完全構造化ブロック} ..?

開始するのに適した場所は、TCP/IPファミリーのプロトコルを取得し、それらを上記のスペースにマッピングして、上記のプロトコル特性パターンで一意の位置を占める1つ以上の標本の実装を確認することです。スペース。お気に入りの* nixosのソースコードを見るとよいでしょう。

パーサーの実装は、おそらく2つの大きなカテゴリに分類されます。{コマンドスイッチ処理、有限状態マシン}。

前者は(明らかに)2つのうちのより単純であり、おそらく最初の実装です(以前にこの種のことを行ったことがない限り)。

後者は(おそらく)より堅牢で効率的であり(locの観点から)、プロトコルへの変更を採用することができます(それがまだ設計変更の対象である場合)。

(基盤となる(仮想)OSネットワーキング機能も(もちろん)実装に大きく影響します。たとえば、JVMを取り上げます。NIO選択ベースのチャネル処理はFSMで非常にうまく機能します。)

お役に立てば幸いです。

14
alphazero

アクセプター/コネクターパターン: http://www.cs.wustl.edu/~schmidt/PDF/Acceptor.pdf

フィルターのチェーンはGofチェーンの責任に基づいており、多くのネットワークスタック/フレームワークで使用されています。

PDUをエンコード/デコードするためのステートマシン。

3

私がお勧めするのは、ネットワークプロトコルを抽象化することです。

まず、機能、モジュール、およびそれらの間のAPIを決定します。次に、データがネットワークを通過するプロトコルを決定します。

次に、すべてのネットワークの問題を独自のレイヤーに慎重にカプセル化して、後で暗号化、圧縮、httpトランスポートの追加(ファイアウォールを通過させるため)、または機能に直交する方法で後で追加したいものを追加できるようにします。

3
flybywire

デザインパターンについてはわかりませんが、既存のプロトコル、特に標準化された「最新の」プロトコルを調査することは、おそらく良い出発点です。

BitTorrentは非常に人気のある分散型プロトコルであり、多くの拡張機能があります。

OpenSSHも良い候補です。機能ネゴシエーション、複数の暗号化タイプ、およびデ/マルチプレクサチャネルをサポートします。

VoIPプロトコルはストリーミングアプリケーションに適しています:RTPおよびH.323

ネットワークルーティングプロトコルも優れています:BGP(および拡張機能)、LDP、VRRP/CARP。

0
HUAGHAGUAH