37

私が過去に尋ねたいくつかの質問、たとえばこのような質問は、より基本的な質問に要約されることに気づきました。

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

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

編集:

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

EDIT2:

ネットワーク通信の一般的なパターンを誰も思いつかなかったとは信じがたいです。はい、「場合による」ことは承知していますが、どのプロジェクトについても言えますが、一般的なアイデアをカバーするパターンはたくさんあります。

4

7 に答える 7

14

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

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

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

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

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

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

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

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

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

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

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

お役に立てば幸いです。

于 2009-03-26T12:25:09.310 に答える
9

一連の責任パターンは、ネットワークとの間でデータを送受信するのに役立つと思います。

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

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

コマンド --> 一部をラップ --> 暗号化 --> データを送信
データを送信する
              コマンド
              (ソース、おまけ
              場合の情報
              必要)

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

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

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

于 2009-04-05T05:38:39.450 に答える
3

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

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

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

于 2012-09-09T09:44:39.580 に答える
3

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

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

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

于 2009-03-22T11:57:24.683 に答える
-1

これを徹底的に調べていませんが、これは良いドキュメントだと思います:

また、これは良い本のように見えます:

于 2009-11-18T05:19:13.847 に答える
-1

パターン自体についてはわかりませんが、「明らかな」選択ポイントがいくつかあります。まず、ASN.1 を使用しますか? (これはロット全体に影響します)。第二に、人間が読めるプロトコルが必要ですか、それともバイナリのプロトコルが必要ですか? 第三に、プロトコルにセキュリティ面が必要ですか?

「ASN.1 を使用したい」と答えることが、プロトコル設計に関するかなりの数の質問への回答を強制するわけではありません。

于 2009-03-22T11:08:50.103 に答える