J'utilise 2 ordinateurs avec une application pour envoyer et recevoir des datagrammes UDP. Il n'y a pas de contrôle de flux et ICMP est désactivé. Fréquemment, lorsque j'envoie un fichier sous forme de datagrammes UDP via l'application, je reçois deux paquets changeant leur commande et donc - la perte de paquets. P>
J'ai désactivé et un type de pare-feu et il n'y a pas de commutateur de matériel connecté entre les ordinateurs (ils sont directement câblés). P>
Y a-t-il un moyen de s'assurer que Winsock et ou est le système d'exploitation qui fait cela? p>
ou configuration de périphérique réseau nécessaire? P> Envoyer () Code> Enverra les paquets de la même manière qu'ils sont arrivés là-bas? p>
4 Réponses :
UDP est un protocole léger que par conception ne gère pas de choses comme le séquençage de paquets. TCP est un meilleur choix si vous voulez une livraison de paquets robuste et un séquençage. P>
UDP est généralement conçu pour les applications où la perte de paquets est acceptable ou préférable au retard que TCP encourage lorsqu'il doit réapparaître des paquets. UDP est donc couramment utilisé pour le streaming des médias. P>
Si vous êtes limité à l'utilisation de UDP, vous devez développer une méthode d'identification des paquets de séquence et de les résouiller. P>
UDP ne garantit pas que vos paquets arriveront dans l'ordre. (Cela ne garantit même pas que vos paquets arriveront du tout.) Si vous avez besoin de ce niveau de robustesse, vous êtes meilleur avec TCP. Sinon, vous pouvez ajouter des marqueurs de séquence à vos datagrammes et les réorganiser à l'autre extrémité, mais pourquoi réinventer la roue? P>
D'une raison praticulaire, je ne peux pas décrire que je suis limitée à UDP uniquement. un paquet rare une fois, puis est accapable. Il suffit que 1 des 3 fichiers obtiennent une perte. J'ai juste besoin de trouver un moyen pour l'expéditeur d'envoyer les paquets dans le bon ordre, le reste ne compte pas pour moi. Merci
Ce n'est pas tellement une question de l'expéditeur qui envoie les paquets dans le bon ordre que pour le récepteur de les réassembler dans le bon ordre. Comme je l'ai dit, ajoutez des marqueurs de séquence à un niveau approprié.
UDP garantit qu'un paquet arrivera intact ou non du tout (c'est-à-dire qu'il a une somme de contrôle) et ajoute également des numéros de port à la propriété intellectuelle brute. Il ne garantit pas la livraison ou le séquençage; Ce sont ce que TCP ajoute (en criant essentiellement un paquet jusqu'à ce que l'autre extrémité indique qu'il est arrivé). La livraison correcte correcte est suffisante pour que vous puissiez prétendre que vous avez un flux de données (par conséquent, TCP est une prise en streaming, car c'est assez couramment souhaité).
Y a-t-il un moyen de s'assurer que Winsock et d'envoyer () enverra les paquets de la même manière qu'ils sont arrivés là-bas? BlockQuote>Ça s'appelle TCP. P>
Essayez également un protocole UDP fiable tel que udt . Je suppose que vous êtes peut-être sur une petite plate-forme intégrée afin que vous souhaitiez un protocole plus compact comme Rudp a>. p>
Il n'y a pas de contrôle de débit (ICMP désactivé) p> blockQuote>
Vous pouvez implémenter votre propre contrôle de flux à l'aide de UDP: p>
- Envoyez un ou plusieurs paquets UDP li>
- Attendez l'accusé de réception (envoyé sous forme de paquets UDP à partir du récepteur à l'expéditeur) LI>
- répéter comme ci-dessus li> ul>
voir Protocole de fenêtre coulissante pour plus de détails. P>
[Ce serait en plus de fort> ayant un numéro de séquence dans les paquets que vous envoyez.] p>
Dans une connexion point à point, je m'attendrais à ce que les paquets soient en ordre, c'est une hypothèse qui s'est avérée à 100% à droite avec mon expérience avec des systèmes embarqués. Pourrait-il recevoir une échelle latérale causant ce que vous voyez?