331 votes

Quand est-il approprié d’utiliser UDP au lieu de TCP ?

Depuis TCP garantit la livraison de paquets et peuvent donc être considérées comme "fiable", alors que UDP ne garantit pas n'importe quoi et les paquets peuvent être perdus. Quel serait l'avantage de la transmission de données UDP en utilisant dans une application, plutôt que sur un flux TCP? Dans ce genre de situations UDP être le meilleur choix, et pourquoi?

Je suis en supposant que le protocole UDP est plus rapide puisqu'il n'a pas la surcharge de la création et le maintien d'un flux, mais ce ne serait pas hors de propos si certaines données n'atteint jamais sa destination?

388voto

drudru Points 2101

C'est l'une de mes questions préférées. UDP est si mal compris.

Dans les situations où votre voulez vraiment obtenir une réponse simple à un autre serveur rapidement, UDP fonctionne le mieux. En général, vous voulez la réponse à un paquet de réponse, et vous êtes prêt à mettre en œuvre votre propre protocole pour la fiabilité ou le renvoie. Le DNS est la description parfaite de ce cas d'utilisation. Les coûts de connexion configurations sont moyen à élevé (pourtant, DNS prend en charge un mode TCP).

Un autre cas est quand vous êtes à la fourniture de données qui peut être perdu parce que les données les plus récentes à venir dans le remplacera que les précédentes données/de l'état. Les données météorologiques, le streaming vidéo, un service de cotation (non utilisé pour les opérations sur le marché), ou des jeux de données viennent à l'esprit.

Un autre cas est quand vous gérez une quantité énorme de l'état et que vous voulez éviter à l'aide de TCP parce que l'OS ne peut pas gérer que de nombreuses séances. Ce cas est rare aujourd'hui. En fait, il y a maintenant de l'espace utilisateur piles TCP qui peut être utilisé de sorte que l'application de l'écrivain peut avoir plus de contrôle plus précis des ressources nécessaires pour que le protocole TCP état. Avant 2003, le protocole UDP est vraiment le seul jeu en ville.

Une autre affaire est pour le trafic de multidiffusion. UDP peuvent être multicasted à plusieurs hôtes alors que TCP ne peut pas faire cela à tous.

72voto

Stephan202 Points 27707

Si un TCP paquet est perdu, il sera renvoyé. Ce n'est pas pratique pour les applications qui s'appuient sur les données traitées dans un ordre précis, en temps réel.

Les exemples incluent des vidéos en streaming et en particulier de la VoIP (par exemple, Skype). Dans ces cas, cependant, la perte de paquet n'est pas une grosse affaire: nos sens ne sont pas parfaits, de sorte que nous ne pouvons pas le même avis. C'est pourquoi ces types d'applications utilisent UDP au lieu de TCP.

62voto

S.Lott Points 207588

Le "manque de fiabilité" de l'UDP est un formalisme. La Transmission n'est pas absolument garantie. En pratique, ils sont presque toujours à travers. Ils ne sont simplement pas reconnaître et de tentative d'appel après un délai d'attente.

La surcharge dans la négociation pour un socket TCP et poignée de main TCP des paquets est énorme. Vraiment énorme. Il n'est pas appréciable UDP frais généraux.

Plus important encore, vous pouvez facilement compléter UDP avec une certaine fiabilité de la livraison une poignée de main c'est moins de frais généraux que TCP. Lire ceci: http://en.wikipedia.org/wiki/Reliable_User_Datagram_Protocol

UDP est utile pour la diffusion de l'information dans une publication-abonnement type d'application. IIRC, TIBCO fait un usage intensif de l'UDP pour la notification de changement d'état.

Toute autre sorte de one-way "événement important" ou "enregistrement" de l'activité peut être traitée très bien avec des paquets UDP. Vous souhaitez envoyer une notification sans la construction d'un ensemble de support. Vous ne vous attendez pas une réponse de la part de différents auditeurs.

Système de "battement de cœur" ou "je suis en vie" messages sont un bon choix, aussi. Manque un n'est pas une crise. Manque une demi-douzaine (en ligne).

32voto

Mark Wilkins Points 29291

Je travaille sur un produit qui prend en charge à la fois UDP (IP) et de communication TCP/IP entre le client et le serveur. Il a commencé avec IPX plus de 15 ans avec support IP ajouté il y a 13 ans. Nous avons ajouté le support TCP/IP 3 ou 4 ans. Je devine à venir: UDP, TCP code ratio est probablement de l'ordre de 80/20. Le produit est un serveur de base de données, de sorte que la fiabilité est essentielle. Nous avons à gérer toutes les questions imposées par l'UDP (perte de paquets, le paquet de doubler, le paquet de commande, etc.) déjà mentionné dans d'autres réponses. Il y a rarement des problèmes, mais ils se produisent parfois et doit donc être manipulé. L'avantage de soutenir UDP, c'est que nous sommes en mesure de personnaliser un peu pour notre propre consommation et de peaufiner un peu plus de performance.

Chaque réseau est va être différent, mais le protocole UDP le protocole de communication est généralement un peu plus rapide pour nous. Le lecteur sceptique à juste titre la question de savoir si nous avons tout mis en œuvre correctement. De Plus, que pouvez-vous attendre d'un mec avec 2 chiffres rep? Néanmoins, je viens de maintenant, a couru un test de la curiosité. Le test de lecture 1 million d'enregistrements (select * from sometable). Je définir le nombre d'enregistrements à retourner avec chaque client demande à être de 1, 10 et 100 (trois séries de tests avec chaque protocole). Le serveur était seulement deux sauts sur une 100Mbit LAN. Le nombre semble être d'accord avec ce que d'autres ont trouvé dans le passé (UDP est environ 5% plus rapide dans la plupart des situations). Le total du temps en millisecondes ont été comme suit pour ce test en particulier:

  1. 1 enregistrement
    • IP: 390,760 ms
    • TCP: 416,903 ms
  2. 10 enregistrements
    • IP: 91,707 ms
    • TCP: 95,662 ms
  3. 100 enregistrements
    • IP: 29,664 ms
    • TCP: 30,968 ms

Le total de la quantité de données transmises était la même pour les deux IP et TCP. Nous avons des frais généraux supplémentaires avec les communications UDP parce que nous avons quelques-uns des mêmes choses que vous obtenez pour "libre" avec le protocole TCP/IP (les sommes de contrôle, les numéros de séquence, etc.). Par exemple, Wireshark a montré qu'une demande pour la prochaine série de dossiers était de 80 octets avec UDP et 84 octets avec le protocole TCP.

18voto

Andriyev Points 9238

UDP est une connexion de protocole et utilisés dans des applications comme le protocole SNMP (Simple network Management Protocol) , DNS (Domain Name System), où les paquets de données arrivant de l'ordre, le manque de fiabilité et pas d'inquiétude immédiate et l'envoyer par le biais du paquet de données de questions..

Depuis UDP n'implique pas l'établissement de la connexion, il ya avant des applications comme DNS où l'établissement de la connexion des retards doit être évitée, UDP est préféré au-dessus de TCP.

Utilisé dans SNMP de gestion de réseau doit souvent être fait lorsque le réseau est en stress c'est à dire lorsque la fiabilité de la congestion de la contrôlée de transfert de données est difficile à réaliser.

cheers

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X