TCP est Garanti dans l'ordre?
Si j'envoie deux messages TCP, ai-je besoin pour gérer le cas où ce dernier arrive devant l'ancienne? Ou est-il garanti dans l'ordre-je l'envoyer? Je suppose que ce n'est pas un Tordu spécifiques exemple, parce qu'il doit se conformer à la TCP standard, mais si quelqu'un est familier avec Twisted pourrait fournir une entorse à une réponse pour ma propre tranquillité d'esprit, que j'avais apprécié 🙂
- Depuis TCP n'a aucune idée de l'endroit où vos messages de début ou de fin, comment pourrait-il éventuellement réorganiser même si elle le voulait?
Vous devez vous connecter pour publier un commentaire.
Aussi longtemps que les deux messages ont été envoyés sur la même connexion TCP, l'ordre sera maintenu. Si plusieurs connexions sont ouvertes entre la même paire de processus, vous pourriez être en difficulté.
Concernant Tordu, ou de tout autre événement asynchrone du système: j'espère que vous aurez la
dataReceived
les messages dans l'ordre d'octets reçus. Toutefois, si vous commencez à pousser de travail sur les différés d'appels, vous pouvez, erm... "twist" de votre flux de contrôle au-delà de la reconnaissance.TCP est orienté connexion et offre à ses Clients dans l'ordre de livraison. Bien sûr, cela s'applique au niveau de la connexion: connexions individuelles sont indépendantes.
Vous devriez noter que, normalement, nous nous référons à "flux TCP" et "messages UDP".
Quelle que soit la bibliothèque de Client que vous utilisez (par exemple Tordu), la connexion TCP sous-jacente est indépendant de celui-ci. TCP prononcera le "protocole des messages" pour votre client. Par "protocole de message" je me réfère, bien sûr, le protocole que vous utilisez sur la couche TCP.
Note en outre que l'opération d'e/S sont asynchrones dans la nature et très dépendant de la charge du système + aussi aggravant les retards de réseau & les pertes, vous ne pouvez pas compter sur de message de commande entre connexions TCP.
TCP "garanties" qu'un récepteur reçoit la reconstitution des flux d'octets comme il a été initialement envoyé par l'expéditeur. Cependant, entre le protocole TCP envoyer/recevoir des points de terminaison (c'est à dire, le réseau physique), les données peuvent être reçues dans l'ordre, il peut être fragmenté, il peut être corrompu, et il peut même être perdu. TCP comptes de ces problèmes à l'aide d'un mécanisme de poignée de main que les causes de la mauvaise paquets à retransmettre. La pile TCP sur le récepteur, ces paquets dans l'ordre dans lequel ils ont été transmis de sorte que lorsque vous lisez à partir de votre socket TCP, vous recevez les données comme il a été envoyé initialement.
Lorsque vous appelez la doRead méthode Tordus, les données sont lues à partir de la douille jusqu'à la taille de la mémoire tampon. Ces données peuvent représenter un seul message, un message partiel, ou plusieurs messages. C'est à vous d'extraire les messages à partir de la mémoire tampon, mais vous avez la garantie que les octets sont dans leur transmises commande à ce moment là.
Désolé pour brouiller les cartes avec mon précédent post...
TCP est un flux UDP est un message. Vous êtes de mélange de termes. Pour TCP, il est vrai que le flux arrivent dans le même ordre qu'il a été envoyer. Il n'y a aucun district messages TCP, les octets apparaissent comme ils arrivent, les interpréter comme des messages est à vous.