私はC#でサーバーを開発しています(* Asyncメソッドを使用しています)。片方がプロトコルに違反するまで(例えば、サーバーへの攻撃)、すべてうまく動作します。プロトコルエラー耐性ソケットサーバー
以下の構造のクライアントとサーバー交換メッセージ:
- 最初の4つのバイトは、次のNバイトはメッセージボディ
誰かが間違った長さを送信した場合、このクライアントとサーバー間の通信はすべて予測不可能になります。
したがって、アイデアは最も簡単な方法で自己同期プロトコルを作成することです。
私はTCPプロトコルを使用しているので、メッセージをパケットに分割し、同じパケットを2つのメッセージで共有する必要はありません。このようにして、プロトコル違反を無視して通信を復元できます間違っている。
私はそのためにTCPを使いたいので、パケットはTCPセグメントと同じになります。しかし、いくつかの漁獲があります
- (MSSを定義する)MTUが異なる可能性があり、私が使用できるバッファサイズには事前に定義された値がありません(私が間違っているなら、私を修正)
- 私は「couldn TCPセグメントを直接( "ストリーム"抽象化なしで)手動で管理する方法を見つけることができます。
私はソケットサーバプログラミングには新しく、助けが必要です。おそらく、誰かがこの問題(耐故障性プロトコル)に対する共通の解決策を共有したり、一般的な落とし穴を記述したり、役に立つリンクを提供することができます。
私は.NETで開発しており、避けることができればP/Invokesを使用したくありません。
誰かが送信にいくつかの壊れたバイトを挿入した場合、どうすればよいでしょうか。たとえば、「メソッドインデックス」と「メッセージ長」の間にある場合 – dipyalov
CRCチェックよりも見事なものにならない限り([エラー検出と修正のコーディング](http://en.wikipedia.org/wiki/) Error_detection_and_correction))、挿入されたバイトが意図したメッセージインデックスまたはメッセージ長ではないことをどのように検出するのか分かりません。 –