1

個人的なプロジェクトとして、私は C を使用してネットワーク時刻同期プロトコルを設計しようとしています。私を本当に驚かせていることの 1 つは、カーネルが udp パケットをバッファリングする方法についての知識がまったくないことです。パケットが必要なときに正確に送信され、特定のブロックサイズなどにバッファリングされないようにしたいと考えています。また、バッファがデータグラム間の分割を確実にする方法を知りたいのですが、これを行う方法はまだ見てきました。私はかなりの量のBeej's Guide to Network Programmingを読みましたが、私を助けるものは何も見つかりませんでした。

編集: UDP 自体のしくみを理解しています。カーネル ソケット インターフェイスのプロパティについて質問しているだけです。

4

1 に答える 1

-1

パケット シーケンスおよび/またはすべてのパケットの受信が問題である場合、プロトコルを実装する必要があります。つまり、送信者はパケットを送信し、ACK のパケット (受信の確認) を受信するまで待機します。受信機から。送信者が妥当な時間内に ACK パケットを受信しない場合、同じパケットを再送信します。また、パケットのデータには、送信されるパケットごとに増加する整数であるパケット ID を含めることができます。この ID を使用すると、パケットの重複を回避できます。大まかに言うと、これが UDP パケットの流れです。

UDPは接続指向ではありません。サーバーとクライアントの間に接続がなく、クライアントがパケットを送信し、サーバーがパケットを受信します。パケットがそこに到達する保証も、送信された順序で取得される保証もありません。接続指向のプロトコルについては、TCP の使用を検討してください。

于 2013-07-21T12:30:23.500 に答える