私の Linux C++ プログラムで、パケットの受信シーケンスが予期せず順不同であることがわかりました。受信ソケットの数を制限した後、再びパケットを順番に受信しました。さらに、boost::asio または epoll を明示的に使用して問題をテストしましたが、どちらも同じ結果になります。一方、同じプログラムは Window 環境 (boost.asio を使用) では問題なく動作します。
私はかなり奇妙だと思います.udpプロトコルはパケットが順番に受信されることを保証していないことを知っています. ただし、ブロードキャスト送信側と受信側の間のスイッチは 1 つだけです。したがって、順不同は物理的に不可能だと思います。さらに、同じプログラムが Window OS (同じネットワーク) の下で正常に動作します。
パケットがトランスポート層に順番に到着することが保証されていると仮定します。追加のシーケンス番号チェックはオプションではなく、プロトコルの変更もオプションではありません。