ソケットを使用する2つのプログラム間の通信にアプリケーション層プロトコルが存在する必要がありますか?

ソケットを使用する2つのプログラム間の通信にアプリケーション層プロトコルが存在する必要がありますか?

どちらのプログラムがどんなに単純でも複雑でも、インターネットドメインソケット(またはUnixドメインソケット)を介して通信するときは、必ず次のことがありますか?アプリケーション層プロトコル 彼らのコミュニケーションのために?

そのようなアプリケーション層プロトコルはよく知られており、定義することができます(HTTPなど)か一時的(明確に定義されていません)?

たとえば、Virtual Machine ManagerとKVM / QEMUはUnixまたはインターネットドメインソケットを介して通信しますpsqlpostgresql serverそのようなプログラムが通信に独自のプロトコルを使用すべきかどうか疑問に思います。

これは、プロトコル(特にアプリケーション層プロトコル)の概念を理解するのに役立ちます。

ありがとうございます。

答え1

プロトコルは単に通信方法のセットです。他の人はいません。どれほど厳しくて緩いかは別の問題です。

コミュニケーションが完全に混乱するのを防ぐ方法はありません。これを使用してnetcat2つのエンドポイント間で通信することができ、2つのエンドポイント間で送信されるデータは、データ交換が達成しようとする目標によってのみ制限されます。必要に応じて、これは純粋なごみです。つまり、制限がないことを意味します。

答え2

はい。互いに通信する2つのプログラムは、通信方法を決定するためにいくつかのプロトコルに従う必要があります。プロトコルは、標準または公式(公開または記録された)プロトコルである必要はありませんが、通信がどのように、どの順序で行われるべきか、およびどのデータが各プロトコルに一貫して配信されるかについて、ある程度同意する必要があります。別の意味。

例えば、人が食料品店を離れてレジでお金を払うことです。そこには、どの言語を使用するのか、金銭取引にどの通貨を使用すべきかについての非公式の合意を含む合意があります。この契約はまた、人々が新しく購入した食料品を持って(合法的に)店舗を離れることを可能にするために何が起こるべきかを規定します。この合意には、人々が現金またはデビットカードで支払うかどうかを選択するために必要な情報交換も含まれます。別のものとして支払いを求めるか、チェックアウトの過程で早すぎる、または遅すぎる支払いを要求することは、カウンターの後ろにいる人を混乱させます。未知の(互換性のない)言語で話すことも同じです。

場合によっては、カード専用のカウンターで現金でお支払いし、契約に違反することがあります。その後、現金を受け取るカウンターで手順を再開します。この情報は以前の取引メッセージ(「デビットカードのみ可能」とマークされている)であなたに提供されましたが、あなたはそれを無視しました。

sshSSHサーバーに接続するときにサーバーとクライアントの間でやり取りするプロトコルメッセージを使用する例をいくつか示します-vvv。クライアント側では、リモートサーバーのSSHプロトコルバージョンを識別し、独自のクライアントバージョンを送信することに関するメッセージを表示できます。使用することに同意したパスワードと、試行される認証方法に関するメッセージが表示されます。デバッグモードでSSHデーモンを起動してクライアントを使用して接続する場合は、対応するサーバー側のメッセージも表示できます。

関連情報