広く使用されているCアプリケーションを開発しています。ソケット。
私の疑いは:私が作成した各ソケットに別のソケットからメッセージを送受信できる独自のバッファがありますか?
つまり、メッセージ交換によってソケットが影響を受けますか?間違って?
バグとは、メッセージを「意図された」受信者から別のソケットに明示的に送信するためにプログラムコードを書かずに(おそらくバグのある)1つのソケットに送信されたメッセージを別のソケットに「漏らす」ことができるということです。
答え1
私が作成する各ソケットには、他のソケットからメッセージを送受信できる独自のバッファがありますか?
はい。
それ以外の場合、ソケットAPIはデフォルトで使用できないため、提案する理由はこれです。
使用しているソケットの種類を指定していないので、明確にすると次のようになります。
各TCP /ストリームソケットには独自の送受信バッファがあります。
これらのバッファは、バックグラウンドでの再送信、承認管理、再アセンブリなどを処理するために必要です。
各UDP /データグラムソケットには独自の受信バッファがありますが、必ずしも一意で持続的な送信バッファがあるわけではありません。
永続転送バッファを必要とする再送ロジックはありません。
aは、
socketpair
2つのソケット間でバッファを共有できます(または各方向のバッファ)。比較のために、a
pipe
(ソケットとは異なり)は一方向であるため、通常、2つのファイル記述子間で共有されるバッファは1つだけです。
答え2
はい、TCPとUDPは多重化されたネットワーク用です。多くの仮想ネットワークを作成します。
IPはパケットのみを送信します。このマシンからそのマシンに移動するだけで何でもできます。チャンネルもなく、再送信もなく、配信しようとします。これがインターネットがどのように機能するかです。
TCPとUDPはここにチャンネル(ソケット)を追加します。 TCPは再送を追加します。間違っていますか?
- データの破損を検出するには、チェックサムを使用する必要があります。チェックサムは十分に強力です(TCPには十分ではないかもしれませんが、ハードウェア層には良いチェックサムがあります)。
- ソフトウェアはバグを作成し、間違ったチャンネル/ソケットで送受信できます。
- ただし、他のプロセスがファイルハンドルを渡さない限り、プロセスで開かれていないソケットでは送受信できません。