UDP vs TCP, comment beaucoup plus rapide est-il?
Pour général du protocole d'échange de messages, qui peuvent tolérer une certaine perte de paquets. Combien plus il est efficace, UDP TCP?
- Vous pouvez aussi ajouter le "tcp" tag depuis que la question est à propos de TCP, trop.
- Que signifie "protocole général d'échange de messages" signifie ? La question doit clarifier ce que l'efficacité est d'environ. Voulons-nous moins de latence pour un petit message ? Ou veut-on une augmentation du débit pour un flux continu de données ?
- Tcp a plus de meilleures fonctionnalités que UDP à l'exception de la Vitesse.
- La question de TCP ou UDP vitesse est discutable. La question est dans le titre de votre fait ne correspond pas au corps de la question. Les deux paquets TCP et UDP voyage exactement à la même vitesse sur le même support.
Vous devez vous connecter pour publier un commentaire.
UDP est plus rapide que TCP, et la simple raison est parce que son inexistant reconnaissez paquet (ACK) qui permet à un continu de flux de paquets, au lieu de TCP qui reconnaît un ensemble de paquets, calculé en fonction de la taille de la fenêtre TCP et round-trip time (RTT).
Pour plus d'informations je vous recommande le simple, mais très compréhensible Skullbox explication (TCP ou UDP)
De gens disent que la chose importante TCP vous donne, c'est la fiabilité. Mais ce n'est pas vraiment vrai. La chose la plus importante TCP vous donne est de contrôle de congestion: vous pouvez courir un 100 connexions TCP à travers un lien DSL tous d'aller au max de la vitesse, et tous les 100 connexions seront productifs, parce qu'ils sont tous "sens" de la bande passante disponible. Essayez cela avec plus de 100 différents UDP applications, tout en poussant des paquets aussi vite qu'ils peuvent aller, et voir comment les choses fonctionnent pour vous.
Sur une plus grande échelle, ce comportement TCP est ce qui maintient l'Internet à partir de verrouillage en congestion "effondrement".
Choses qui tendent à pousser les applications vers UDP:
De livraison du groupe de la sémantique: il est possible de faire la fiabilité de la livraison à un groupe de personnes de manière beaucoup plus efficace que le protocole TCP point-à-point de l'accusé de réception.
De livraison: dans de nombreuses applications, aussi longtemps que vous obtenez toutes les données, vous ne vous souciez pas de ce que l'ordre de leur arrivée; vous pouvez réduire application au niveau de la latence en acceptant une commande de bloc.
Froideur: sur un LAN party, vous ne pouvez pas les soins si votre navigateur web fonctions bien aussi longtemps que vous êtes blitting les mises à jour du réseau aussi vite que vous le pouvez.
Mais même si vous vous souciez de la performance, vous ne voulez probablement pas à aller avec UDP:
Vous êtes sur le crochet pour la fiabilité maintenant, et beaucoup de choses que vous pourriez faire pour mettre en œuvre la fiabilité peut être plus lente que ce que le protocole TCP déjà fait.
Maintenant, vous êtes le réseau hostile, ce qui peut causer des problèmes dans des environnements partagés.
Plus important encore, les pare-feux ne vous bloquer.
Vous pouvez potentiellement surmonter certains TCP performances et les problèmes de latence par "trunking" plusieurs connexions TCP ensemble; iSCSI cela pour contourner contrôle de congestion sur les réseaux locaux, mais vous pouvez aussi le faire pour créer une faible latence "urgent" message channel (TCP est "URGENT" comportement est totalement cassé).
listen
->accept
-> client de l'état est naturellement indépendant des autres clients). Gérer plusieurs connexions à partir d'un client en particulier devient ardu avec UDP. Et un point en UDP faveur est UDP (piles vraiment facile à mettre en œuvre, ce qui est un énorme plus sur des systèmes embarqués (microcontrôleurs, Fpga, etc., en particulier, une application TCP pour un FPGA est généralement quelque chose que vous voulez juste acheter de quelqu'un d'autre et de ne pas penser).Dans certaines applications TCP est plus rapide (meilleur débit) que UDP.
C'est le cas lorsque vous faites beaucoup de petites écrit par rapport à la taille de la MTU. Par exemple, j'ai lu un test dans lequel un flux de 300 octets des paquets a été envoyé sur Ethernet (1500 octets MTU) et TCP a été 50% plus rapide que UDP.
La raison en est que le protocole TCP essaie de tampon et les données et le remplissage complet d'un segment de réseau ainsi faire un usage plus efficace de la bande passante disponible.
UDP sur l'autre main met le paquet sur le réseau immédiatement ainsi congesting le réseau avec beaucoup de petits paquets.
Vous ne devriez probablement pas utiliser UDP, sauf si vous avez une très bonne raison de le faire. D'autant plus que vous pouvez donner TCP le même genre de latence UDP par la désactivation de la Algorithme Nagle (par exemple si vous êtes à la transmission en temps réel des données de capteur et vous n'êtes pas inquiet au sujet de congesting le réseau avec plein de petits paquets).
Voulez-vous dire "avec la perte de la tolérance" ?
Fondamentalement, UDP n'est pas une "perte tolérant". Vous pouvez envoyer 100 paquets à quelqu'un, et ils ne pourraient obtenir 95 de ces paquets, et certains sont peut-être dans le mauvais ordre.
Pour des choses comme le streaming vidéo et les jeux multi-joueurs, où il vaut mieux rater un paquet de retarder tous les autres paquets derrière elle, c'est le choix évident
Pour la plupart des autres choses bien, un manquant ou "réarrangé' paquet est critique. Vous devez écrire du code supplémentaire pour exécuter au-dessus d'UDP pour réessayer si les choses se sont manqués, et de faire respecter le bon ordre. Ce serait ajouter un petit peu de surcharge dans certains endroits.
Heureusement, certaines personnes très intelligentes ont fait cela, et ils l'ont appelé TCP.
Pensez-y de cette façon: Si un paquet est manquant, préférez-vous tout simplement obtenir le paquet suivant le plus rapidement possible et de continuer (UDP), ou avez-vous réellement besoin que les données manquantes (utilisation du protocole TCP). La surcharge ne sera pas question, sauf si vous êtes vraiment dans une bordure scénario.
Le protocole de meilleures performances (en termes de débit) - UDP ou TCP - dépend des caractéristiques du réseau et le trafic réseau. Robert S. Barnes, par exemple, met en avant un scénario où TCP fonctionne mieux (de petite taille pour l'écrit). Maintenant, imaginez un scénario dans lequel le réseau est congestionné et a la fois le trafic TCP et UDP. Les expéditeurs du réseau utilisant le protocole TCP, sera le sens de la "congestion" et de réduire leur envoyant des taux. Cependant, UDP n'a pas l'encombrement d'évitement ou de mécanismes de contrôle, et les expéditeurs utilisant UDP continuera à pomper dans les données à la même vitesse. Progressivement, TCP expéditeurs de réduire leur envoyant des taux minimum et si UDP expéditeurs ont suffisamment de données pour être envoyé sur le réseau, ils porc jusqu'à la majorité de la bande passante disponible. Alors, dans ce cas, UDP expéditeurs ont un débit plus élevé, comme ils obtiennent la plus grande tarte de la bande passante du réseau. En fait, c'est un sujet de recherche actif - Comment améliorer le débit TCP en présence de trafic UDP. Une façon, à ce que je sache, à l'aide duquel les applications TCP peut améliorer le débit est par l'ouverture de plusieurs connexions TCP. De cette façon, même si, à chaque connexion TCP est le débit peut être limité, la somme totale de la production de toutes les connexions TCP peut être plus élevé que le débit pour une application utilisant le protocole UDP.
Chaque connexion TCP nécessite une poignée de main initiale avant l'envoi des données. Aussi, l'en-tête TCP contient beaucoup de frais généraux destinés à différents signaux et la livraison d'un message de détection. Pour un échange de messages, UDP sera probablement suffisant si une petite chance d'échec est acceptable. Si la réception doit être vérifiée, le protocole TCP est votre meilleure option.
@Andrew, Je prie de différer. UDP est le choix de certains types d'applications, en raison des exigences de performance. Un exemple classique est celui de la visioconférence. Ce type d'application ne répondent pas bien à la de contrôle TCP.
Autre aspect à prendre en compte est que si vous allez avoir besoin de multidiffusion. Si oui, utiliser UDP.
Quand il parle de "ce qui est plus rapide" - il y a au moins deux aspects très différents: le débit et la latence.
Si parler de débit - TCP du contrôle de flux (comme mentionné dans d'autres réponses), est extrêmement important, et faire quelque chose de comparable sur UDP, si possible, serait un Grand mal de tête(tm). Comme un résultat en utilisant UDP lorsque vous en avez besoin débit, rarement considéré comme un bonne idée (sauf si vous voulez obtenir un avantage injuste sur TCP).
Toutefois, si parler de latences - le tout est complètement différent. Tandis qu'en l'absence de perte de paquets TCP et UDP se comportent très similaires (toutes les différences, le cas échéant, être marginal) - après que le paquet est perdu, le modèle change radicalement.
Après la perte de paquets, le protocole TCP attendre pour retransmettre au moins de 200ms (1sec par le paragraphe 2.4 de RFC6298, mais en pratique les implémentations modernes ont tendance à le réduire à 200ms). En outre, avec le protocole TCP, même ceux des paquets qui n'a atteindre la destination de l'hôte ne sera pas livré à votre application jusqu'à ce que le manque paquet est reçu (c'est à dire, l'ensemble de la communication est un retard d'environ 200ms) - BTW, cet effet, connu en tant que Chef de Blocage, est inhérente à tous les fiable commandé flux, si le protocole TCP ou fiable+commandés UDP. Pour rendre les choses encore pire - si le paquet est retransmis également perdu, alors nous allons parler de retard de ~600ms (en raison de soi-disant intervalle exponentielle, 1er retransmettre est de 200ms, et la seconde est de 200*2=400ms). Si notre canal a 1% de perte de paquets (ce qui n'est pas mauvais par les normes d'aujourd'hui), et nous avons un jeu avec 20 mises à jour par seconde - tel 600ms les retards se produisent en moyenne tous les 8 minutes. Et comme 600ms est plus que suffisant pour vous tué dans un fast-paced jeu - eh bien, c'est assez mauvais pour le gameplay. Ces effets sont exactement pourquoi gamedevs préfèrent souvent UDP TCP.
Cependant, lors de l'utilisation d'UDP pour réduire les latences - il est important de réaliser que le simple fait de "l'aide du protocole UDP" n'est pas suffisante pour obtenir substantielle amélioration de la latence, il est tout au sujet de la FAÇON dont vous utilisez le protocole UDP. En particulier, alors que RUDP les bibliothèques d'éviter que "l'intervalle exponentielle" et plus courtes retransmettre fois - si elles sont utilisées comme "fiable ordonné" de flux, ils ont encore à souffrir de la Tête-de-Ligne de Blocage (ainsi dans le cas d'une double perte de paquets, au lieu de 600ms, nous allons obtenir environ 1,5*2*RTT ou pour une jolie 80ms RTT, c'est un ~250ms retard, ce qui est une amélioration, mais il est toujours possible de faire mieux). D'autre part, si l'utilisation de techniques abordées dans http://gafferongames.com/networked-physics/snapshot-compression/ et/ou http://ithare.com/udp-from-mog-perspective/#low-latency-compression , il EST possible d'éliminer la Tête de blocage entièrement (donc une double perte de paquets pour un jeu avec 20 mises à jour/seconde, le délai sera de 100ms, indépendamment de la RTT).
Et comme une note de côté - si vous arrive d'avoir accès uniquement à TCP, mais pas de UDP (comme dans le navigateur, ou si votre client est derrière un de 6-9% de laid pare-feu bloquant UDP) - il y semble être une façon de mettre en œuvre des UDP-sur-TCP sans encourir trop de latences, voir ici: http://ithare.com/almost-zero-additional-latency-udp-over-tcp/ (assurez-vous de lire les commentaires trop(!)).
Si vous avez besoin rapidement souffle d'un message à travers le net entre deux adresses IP qui n'en a même pas parlé encore, puis une UDP va arriver au moins 3 fois plus rapide, généralement 5 fois plus rapide.
UDP est légèrement plus rapide dans mon expérience, mais pas de beaucoup. Le choix ne doit pas être faite sur le rendement, mais sur le contenu du message et des techniques de compression.
Si c'est un protocole de message échange, je proposerais que le très léger gain de performance que vous prenez avec le protocole TCP est plus que la peine. Vous avez donné un lien entre deux points d'extrémité qui vous donnera tout ce dont vous avez besoin. N'essayez pas de les fabriquer votre propre système à deux voies protocole au-dessus d'UDP, sauf si vous êtes vraiment confiant dans ce que vous êtes entreprise.
Garder à l'esprit que le protocole TCP tient habituellement plusieurs messages sur le fil. Si vous voulez mettre en UDP, vous aurez beaucoup de travail si vous voulez le faire de manière fiable. Votre solution va être de moins en moins fiable, moins rapide ou une quantité incroyable de travail. Il y a des demandes valides de l'UDP, mais si vous vous posez cette question, la vôtre l'est probablement pas.
Je vais juste mettre les choses au clair. TCP/UDP sont deux voitures sont que le fait d'être conduit sur la route. supposons que les panneaux de signalisation & les obstacles sont les Erreurs TCP soucis pour les panneaux de signalisation, respecte tout autour. Conduite lente parce que quelque chose peut arriver à la voiture. Alors que UDP juste s'éloigne, pleine vitesse, aucun respect pour les plaques de rue. Rien, une folle pilote. UDP n'a pas de reprise sur erreur, Si il y a un obstacle, il sera tout simplement entrer en collision avec elle, puis continuer. Alors que TCP permet de s'assurer que tous les paquets sont envoyés & reçu parfaitement, Pas d'erreurs , donc , la voiture passe les obstacles sans risque de collision. J'espère que c'est un bon exemple pour vous faire comprendre, Pourquoi UDP est préféré dans le jeu. Jeux pour les besoins de la vitesse. TCP est ouve dans les téléchargements, ou téléchargé des fichiers peut être corrompu.
Il y a eu un peu de travail pour permettre au programmeur d'avoir les avantages des deux mondes.
SCTP
Elle est indépendante de la couche de transport protolol, mais il peut être utilisé comme une bibliothèque fournissant couche supplémentaire sur UDP. L'unité de base de la communication est un message (mappé à un ou plusieurs paquets UDP). Il y a de la congestion de contrôle intégré. Le protocole a boutons et twiddles pour basculer sur
si tout cela est nécessaire pour votre application particulière.
Un problème, c'est que l'établissement de la connexion est compliqué (et donc des processus lent)
D'autres trucs similaires
Une plus similaires propriétaire expérimentale chose
Cette tente également d'améliorer la triple poignée de main TCP et modifier le contrôle de congestion pour mieux faire face à la rapide des lignes.
Qu'il est vain de parler de TCP ou UDP sans prendre l'état du réseau en compte.
Si le réseau entre les deux points ont une très haute qualité, UDP est absolument plus rapide que TCP, mais dans d'autres cas, tels que le réseau GPRS, TCP peut être plus rapide et une plus grande fiabilité que UDP.
La configuration du réseau est cruciale pour toutes les mesures. Cela fait une énorme différence, si vous êtes de la communication par sockets sur votre ordinateur local ou à l'autre bout du monde.
Trois choses que je veux ajouter à la discussion:
contexte de développement d'un jeu.
très bon outil pour répondre à votre question vous-même par la mesure.