7

私が取り組んでいるプロジェクトでは、ネットワークからUDPストリームを読み取っているときに、SMPシステムの特定の状況で異常な問題が発生しています。送信者と受信者の間に接続されたハブをスニッフィングすることで、ネットワークから順番に到着していることがわかります。ただし、ソケットから読み取ったときに、順序が狂って到着しているように見える場合があります。この場合、UDPパケットの保証はありますか、それともアプリケーションはリオーダーバッファを実装する必要がありますか?ここではCPUアフィニティを設定していません。これが役立つと思いますが、理想的には、すべてのCPU/hwスレッドでネットワークトラフィックを処理する必要があります。

4

2 に答える 2

10

UDPは、いかなる順序付けも保証しません。アプリケーションの責任です。実際、パケットが繰り返されたりドロップされたりしないことを保証するものでもありません。http://en.wikipedia.org/wiki/User_Datagram_Protocolを読むことをお勧めします。

アプリケーションが順序付けを必要とする場合、カーネルは(合理的に)アプリケーションがそれを処理することを期待できるため、特に着信パケット自体が故障している可能性がある場合、カーネルがそのような保証を行うことは意味がありません。

于 2010-06-25T16:37:15.800 に答える
1

送信中にUDPパケットがドロップされないことを保証することはできないため、順序を保証することはできません。たとえば、システムがパケット#14とパケット#16を受信した場合、パケット#15が着信するのを待ってからパケット#16を配信する必要があるのか​​、パケット#15がドロップされて到達しないのかを知る方法はありません。システムはあなたにたくさんのパケットを渡すだけで、それらを整理するのはあなた次第です。

于 2010-06-25T16:48:36.657 に答える