3

テキストネットワークプロトコルに関連する文法を表現する通常の方法は、ABNFを使用することです。通常の言語ではないテキストプロトコル?

ABNFは、EBNF関連のメタ構文と同様に、コンテキストフリーの文法を記述することができます。

これらの文脈自由文法は、非正規語を表すことができます。

ネットワークスタックを実装する通常の方法は、ステートマシンを開発することです。通常の言語ではないテキストネットワークプロトコルはありますか?

答えて

3

「伝統的な」行ベースのテキストプロトコルを使用するとします。たとえば、XMLを使用するプロトコルは通常のものではありません。なぜなら、XMLは通常の言語ではないからです(実際には、個々の文字のレベルを見るとXMLは文脈自由ではありません)。その場合、私は本当に非正規のプロトコルを考えることはできません。言語構文で非規則的になる最も一般的な方法は、パーサーが数えることができるようにすることです。メッセージを解析する能力を必要とするプロトコルはちょうど複雑になります(例えば、 (例えば、任意の長いリストを許可する代わりに明示的にカウントすることによって)

BNFの使用は文脈の説明として理解しやすく、文脈自由があなたに必要な付加的な力を与えるのでではないでしょう。私が思い浮かべる主な利点は、変数を使用して一般的な構文を表すことができる点です。一般的なインターネットプロトコル仕様のBNFを見ると、実際には標準的な言語の機能(無制限の繰り返し、選択肢、オプション性)しか使用していないことに気付くでしょう。

ステートマシンのプロトコルの実装に関する言葉は、誤解のように私に聞こえます。状態マシンとして実装されたパーサーではなく、プロトコルエンジンであり、状態遷移は入力内の個々の文字またはトークンによってトリガされるのではなく、完全なメッセージによってトリガされます。そして、通常、プロトコル状態マシンの状態は、実際の通信よりも通信の確立と解体にもっと関心があります。例えば、TCPステートマシンは11の状態を有し、そのうちの1つのみが接続確立状態に十分であり、実際のデータ送信がすべて行われ、残りはすべて接続の開閉に関するものである。 TCPは文字通りではないが、それは確立された状態マシンを持つよく知られたプロトコルなので、良い例として役立つ;プロトコルエンジンのレベルでは、メッセージの構文がテキストであるか、バイナリ)

関連する問題