assurer l’ordre des paquets dans UDP

im utilisant 2 ordinateurs avec une application pour envoyer et recevoir des datagrammes udp.
il n’y a pas de contrôle de stream (ICMP désactivé)
Souvent, lorsque j’envoie un fichier sous forme de datagrammes udp via l’application, j’obtiens 2 paquets modifiant leur ordre et, par conséquent, la perte de paquets.

existe-t-il un moyen de s’assurer que winsock et send () enverront les paquets de la même manière qu’ils sont arrivés là?
ou est-ce que l’OS fait ça? ive désactivé et le type de pare-feu et il n’y a pas de commutateur matériel connecté entre les ordinateurs (ils sont directement câblés). configuration du périphérique réseau nécessaire?
Merci

UDP est un protocole léger qui, de par sa conception, ne gère pas les choses comme le séquençage des paquets. TCP est un meilleur choix si vous souhaitez une livraison et un séquençage de paquets robustes.

UDP est généralement conçu pour les applications dans lesquelles la perte de paquets est acceptable ou préférable au délai que TCP supporte lorsqu’il doit demander à nouveau des paquets. UDP est donc couramment utilisé pour la diffusion multimédia.

Si vous êtes limité à utiliser UDP, vous devrez développer une méthode pour identifier les paquets hors séquence et les reséquencer.

UDP ne garantit pas que vos paquets arriveront dans l’ordre. (Il ne garantit même pas que vos paquets arriveront à tous.) Si vous avez besoin de ce niveau de robustesse, vous êtes mieux avec TCP. Sinon, vous pouvez append des marqueurs de séquence à vos datagrammes et les réorganiser à l’autre extrémité, mais pourquoi réinventer la roue?

existe-t-il un moyen de s’assurer que winsock et send () enverront les paquets de la même manière qu’ils sont arrivés là?

Il s’appelle TCP.

Sinon, essayez un protocole UDP fiable tel que UDT . Je suppose que vous êtes peut-être sur une petite plate-forme embarquée, donc vous voulez un protocole plus compact comme le RUDP du Bell Lab.

il n’y a pas de contrôle de stream (ICMP désactivé)

Vous pouvez implémenter votre propre contrôle de stream en utilisant UDP:

  • Envoyer un ou plusieurs paquets UDP
  • Attendre l’accusé de réception (envoyé comme un autre paquet UDP du destinataire à l’expéditeur)
  • Répéter comme ci-dessus

Voir Protocole de fenêtre coulissante pour plus de détails.

[Ce serait en plus d’ avoir un numéro de séquence dans les paquets que vous envoyez.]