Différence entre TCP et UDP?

144

Quelle est la différence entre TCP et UDP?

Je sais que TCP est utilisé dans le cas d'applications critiques non temporelles, et UDP est utilisé pour les jeux ou les applications qui nécessitent une transmission rapide des données. Je sais que TCP est utilisé pour HTTP, HTTP, FTP, SMTP et Telnet. Je sais que UDP est utilisé pour DNS et DHCP.

Mais pourquoi? Quelles caractéristiques de TCP et UDP le rendent utile pour leurs cas d'utilisation respectifs?

user749414
la source
13
Et ce ( skullbox.net/tcpudp.php ) - qui était le premier hit de Google - n'était pas assez clair? Qu'est-ce qui était déroutant? C'est peut-être mieux? tcpipguide.com/free/…
S.Lott
1
Je suis vraiment curieux de savoir pourquoi cette question a obtenu (au moment de la rédaction) 3 votes positifs. La première phrase n'a même pas de sens et il y a beaucoup de matériel disponible sur ce sujet si l'on cherche.
MattH
21
@MattH: 1) C'est une bonne question, si elle est assez large et un double déjà bien répondu. 2) Vous aviez une réputation plus que suffisante pour corriger la faute de frappe dans la première phrase. 3) Il n'est pas pertinent que des informations à ce sujet existent ailleurs. Stack Overflow vise à devenir un référentiel de connaissances, et répond aux questions canoniquement ici .
ire_and_curses
2
Il est intéressant de noter que presque personne ne mentionne que DHCP utilise la diffusion, mais tout le monde pense que «la réponse» concerne la garantie de livraison et de retransmission.
Heath Hunnicutt
1
Juste pour quiconque lira ceci à l'avenir, le site Skullbox mentionné ci-dessus a MALWARE selon Google (cela m'a arrêté lorsque j'ai cliqué dessus). Je conseillerais de ne pas y aller.
Alan006

Réponses:

119

TCPest un flux orienté connexion sur un réseau IP. Il garantit que tous les paquets envoyés atteindront la destination dans le bon ordre. Cela implique l'utilisation de paquets d'accusé de réception renvoyés à l'expéditeur, et une retransmission automatique, entraînant des délais supplémentaires et une transmission générale moins efficace que UDP.

UDPest un protocole sans connexion. La communication est orientée vers les datagrammes . L'intégrité n'est garantie que sur le seul datagramme. Les datagrammes arrivent à destination et peuvent arriver dans le désordre ou ne pas arriver du tout. Il est plus efficace que TCPparce qu'il n'utilise pas ACK . Il est généralement utilisé pour la communication en temps réel, où un petit pourcentage de taux de perte de paquets est préférable à la surcharge d'une TCPconnexion.

Dans certaines situations, il UDPest utilisé car il permet la transmission de paquets de diffusion. Ceci est parfois fondamental dans des cas comme le DHCPprotocole, car la machine cliente n'a toujours pas reçu d' IPadresse (c'est le DHCPbut du protocole de négociation) et il n'y aura aucun moyen d'établir un TCPflux sans l' IPadresse elle-même.

Heisenbug
la source
5
Un exemple où UDP est utilisé est dans la transmission vidéo et audio où la perte de quelques paquets ici et là n'a généralement pas tellement d'importance (la couleur d'une image peut être désactivée, ou une minuscule nano-seconde d'audio peut être coupée ou modifiée. - pas vraiment perceptible pour les humains). Bien sûr, si votre connexion est vraiment mauvaise, vous risquez de perdre tellement de paquets que la vidéo apparaît floue / pixélisée et le son devient flou et se coupe beaucoup.
Niko Bellic
53

Extrait de l'article Skullbox:

TCP (Transmission Control Protocol) est le protocole le plus couramment utilisé sur Internet. La raison en est que TCP offre une correction d'erreur. Lorsque le protocole TCP est utilisé, il y a une «livraison garantie». Cela est dû en grande partie à une méthode appelée «contrôle de flux». Le contrôle de flux détermine quand les données doivent être renvoyées et arrête le flux de données jusqu'à ce que les paquets précédents soient transférés avec succès. Cela fonctionne car si un paquet de données est envoyé, une collision peut se produire. Lorsque cela se produit, le client demande à nouveau le paquet au serveur jusqu'à ce que tout le paquet soit complet et identique à son original.

UDP (User Datagram Protocol) est un autre protocole couramment utilisé sur Internet. Cependant, UDP n'est jamais utilisé pour envoyer des données importantes telles que des pages Web, des informations de base de données, etc. UDP est couramment utilisé pour le streaming audio et vidéo. Les médias en streaming tels que les fichiers audio Windows Media (.WMA), Real Player (.RM) et d'autres utilisent UDP car il offre de la vitesse! La raison pour laquelle UDP est plus rapide que TCP est qu'il n'existe aucune forme de contrôle de flux ou de correction d'erreurs. Les données envoyées sur Internet sont affectées par les collisions et des erreurs seront présentes. N'oubliez pas qu'UDP ne concerne que la vitesse. C'est la raison principale pour laquelle le streaming multimédia n'est pas de haute qualité.

1) TCP est orienté connexion et fiable alors que UDP est moins connecté et peu fiable.

2) TCP a besoin de plus de traitement au niveau de l'interface réseau alors que ce n'est pas le cas dans UDP.

3) TCP utilise, prise de contact à 3 voies, contrôle de la congestion, contrôle de flux et autre mécanisme pour assurer une transmission fiable.

4) UDP est principalement utilisé dans les cas où le délai de paquet est plus grave que la perte de paquet.

p27
la source
1
+1 Résumé raisonnablement bon. Bien que la is the most commonly used protocol on the Internetdéclaration soit discutable et dépend vraiment de la façon dont vous définissez most commonly used, protocolet the Internet. Par exemple, le protocole Internet est un concurrent plus probable à cette couronne particulière.
MattH
-1: La raison pour laquelle UDP est utilisé pour DHCP n'a rien à voir avec le retard ou la perte de paquets.
Heath Hunnicutt
2
Lors de l'envoi de beaucoup de données sur un canal clair, TCP est souvent plus rapide que UDP. La raison pour laquelle UDP est utilisé pour des choses comme l'audio ou la vidéo en direct est que lorsqu'un paquet TCP disparaît, l'application réceptrice ne verra plus rien tant que les données manquantes n'auront pas été retransmises et reçues avec succès. Dans de nombreuses applications de streaming, les données qui arrivent en retard seront inutiles, il ne sert donc à rien de tout retarder en attendant une retransmission qui sera de toute façon inutile.
supercat
UDP est utilisé pour DHCP car TCP ne prend pas en charge les diffusions. DHCP repose sur l'utilisation d'une diffusion afin d'obtenir l'adresse IP du serveur DHCP. Voir stackoverflow.com/questions/21266008/…
ScottSmudger
41

Considérez TCP comme un ramassage / dépôt UPS / FedEx programmé dédié de colis entre deux emplacements, tandis que UDP équivaut à jeter une carte postale dans une boîte aux lettres.

UPS / FedEx fera tout son possible pour s'assurer que le colis que vous envoyez par la poste arrive à destination et l'achemine à temps. Avec la carte postale, vous avez de la chance si elle arrive, et elle peut arriver en panne ou en retard (combien de fois avez-vous reçu une carte postale de quelqu'un APRÈS son retour de vacances?)

TCP est aussi proche d'un protocole de livraison garanti que possible, tandis qu'UDP est simplement «meilleur effort».

Marc B
la source
1
Réponse assez décente. J'ajouterais que dans un flux TCP, les paquets sont reconnus par la destination et les paquets corrompus / paquets manquants sont renvoyés par l'expéditeur. Dans UDP, les paquets sont envoyés et la destination les reçoit dans n'importe quel ordre et n'en accuse pas réception.
Erik Nedwidek
2
Un peu d'analogie trompeuse peut-être plus adaptée à la qualité de service
MattH
11
j'aime beaucoup l'analogie, mais une chose que cette réponse déforme légèrement est la vitesse. cela donne l'impression que TCP est plus rapide, alors qu'en réalité UDP l'est parce qu'il y a moins de frais généraux.
iliketocode
22

Raisons pour lesquelles UDP est utilisé pour DNS et DHCP:

DNS - TCP nécessite plus de ressources du serveur (qui écoute les connexions) que du client. En particulier, lorsque la connexion TCP est fermée, le serveur doit se souvenir des détails de la connexion (en les gardant en mémoire) pendant deux minutes, pendant un état appelé TIME_WAIT_2. Il s'agit d'une fonctionnalité qui empêche que les paquets répétés par erreur d'une connexion précédente soient interprétés comme faisant partie d'une connexion en cours. La maintenance de TIME_WAIT_2 utilise la mémoire du noyau sur le serveur. Les requêtes DNS sont petites et arrivent fréquemment de nombreux clients différents. Ce modèle d'utilisation exacerbe la charge sur le serveur par rapport aux clients. On pensait que l'utilisation d'UDP, qui n'a aucune connexion et aucun état à maintenir sur le client ou le serveur, améliorerait ce problème.

DHCP - DHCP est une extension de BOOTP. BOOTP est un protocole que les ordinateurs clients utilisent pour obtenir des informations de configuration à partir d'un serveur, pendant le démarrage du client. Afin de localiser le serveur, une diffusion est envoyée demandant des serveurs BOOTP (ou DHCP). Les diffusions ne peuvent être envoyées que via un protocole sans connexion, tel que UDP. Par conséquent, BOOTP nécessitait au moins un paquet UDP pour la diffusion de localisation de serveur. De plus, étant donné que BOOTP est en cours d'exécution pendant que le client ... démarre, et qu'il s'agit d'une période pendant laquelle le client peut ne pas avoir toute sa pile TCP / IP chargée et en cours d'exécution, UDP peut être le seul protocole que le client est prêt à gérer. temps. Enfin, certains clients DHCP / BOOTP ont uniquement UDP à bord. Par exemple, certains thermostats IP implémentent uniquement UDP.

Comme d'autres l'ont mentionné, UDP est également utile pour le streaming multimédia, en particulier l'audio. Les conversations sonnent mieux en cas de décalage du réseau si vous supprimez simplement les paquets retardés. Vous pouvez faire cela avec UDP, mais avec TCP, tout ce que vous obtenez pendant le décalage est une pause, suivie d'un son qui sera toujours retardé d'autant qu'il a déjà été mis en pause. Pour les conversations téléphoniques bidirectionnelles, cela est inacceptable.

Heath Hunnicutt
la source
17

Une des différences est en bref

UDP : envoyer un message et ne pas regarder en arrière s'il a atteint la destination, protocole sans connexion
TCP : envoyer le message et garantir d'atteindre la destination, protocole orienté connexion

caltuntas
la source
9

TCP établit une connexion avant la transmission des données, pas UDP. De cette manière, UDP peut fournir une livraison plus rapide. Les applications comme DNS, l'accès au serveur de temps utilisent donc UDP.

Contrairement à UDP, TCP utilise le contrôle de la congestion. Il répond à la charge du réseau. Contrairement à UDP, il ralentit lorsque la congestion du réseau est imminente. Ainsi, des applications comme le multimédia préférant un débit constant peuvent opter pour UDP.

De plus, UDP n'est pas fiable, il ne réagit pas aux pertes de paquets. Ainsi, les applications sensibles aux pertes telles que la transmission multimédia préfèrent UDP. Cependant, TCP est un protocole fiable, donc les applications qui nécessitent de la fiabilité comme le transfert Web, le courrier électronique, le téléchargement de fichiers préfèrent TCP.

De plus, dans Internet d'aujourd'hui, UDP n'est pas aussi accueillant que TCP en raison des boîtes du milieu. Certaines applications comme skype tombent en TCP lorsque la connexion UDP est supposée être bloquée.

Timir
la source
2

Différences courtes et simples entre les protocoles Tcp et Udp:

1) Tcp - Protocole de contrôle de transmission et Udp - Protocole de datagramme utilisateur.

2) Tcp est un protocole fiable, alors que Udp est un protocole non fiable.

3) Tcp est un flux orienté, où comme Udp est un protocole orienté message.

4) Tcp est plus lent que Udp.

msc
la source
1

Entrez dans ce fil et laissez-moi essayer de l'exprimer de cette manière.

TCP

Poignée de main à 3 voies

Bob: Hey Amy, j'aimerais te dire un secret
Amy: OK, vas-y, je suis prêt
Bob: OK

Communication
Bob: «Je», ceci est la première lettre
Amy: Première lettre reçue, veuillez m'envoyer la deuxième lettre
Bob: «», ceci est la deuxième lettre
Amy: Deuxième lettre reçue, veuillez m'envoyer la troisième lettre
Bob: «L ', ceci est la troisième lettre
Après un certain temps
Bob: ' L ', ceci la troisième lettre
Amy: Troisième lettre reçue, s'il vous plaît envoyez-moi la quatrième lettre
Bob: ' O ', ceci la quatrième lettre
Amy: ...
... ...

Poignée de main à 4 directions
Bob: Mon secret est exposé, maintenant, vous connaissez mon cœur.
Amy: OK. Je n'ai rien à dire.
Bob: OK.

UDP

Bob: I LOVE U
Amy a reçu: OVI LE

TCP est plus fiable que UDP avec un ordre de message uniforme garanti, c'est sans aucun doute pourquoi UDP est plus léger et efficace.

Eugène
la source
0

Explication simple par analogie

TCP est comme ça.

Imaginez que vous ayez un correspondant sur Mars (nous avons communiqué avec des lettres écrites dans le bon vieux temps avant Internet).

Vous devez envoyer à votre correspondant les sept habitudes des personnes très efficaces. Vous décidez donc de l'envoyer en sept lettres distinctes:

  1. Lettre 1 - Soyez proactif
  2. Lettre 2 - Commencez par la fin à l'esprit ...

etc.

etc .. Lettre 7 - Affûter la scie

Exigences:

Vous voulez vous assurer que votre correspondant reçoit toutes vos lettres - dans l'ordre et qu'elles arrivent parfaitement . Si votre stylo paye reçoit la lettre 7 avant la lettre 1, ce n'est pas bon. si votre correspondant reçoit toutes les lettres sauf la lettre 3 - ce n'est pas non plus bon.

Voici comment nous nous assurons que nos exigences sont satisfaites:

  • Lettre de confirmation: Votre correspondant envoie donc une lettre de confirmation pour dire "J'ai reçu la lettre 1". De cette façon, vous savez que votre correspondant l'a bien reçu. Si une lettre n'arrive pas ou arrive dans le désordre, vous devez alors vous arrêter, revenir en arrière et renvoyer cette lettre, ainsi que toutes les lettres suivantes.
  • Contrôle de flux: à l'époque de Noël, vous savez que votre correspondant recevra beaucoup de courrier, vous ralentissez donc parce que vous ne voulez pas submerger votre correspondant. (Votre correspondant vous envoie constamment des mises à jour sur le nombre de messages non lus dans la boîte aux lettres de votre correspondant - si votre correspondant dit que la boîte de réception est sur le point d'exploser parce qu'elle est si pleine, alors vous ralentissez l'envoi de vos lettres - parce que votre correspondant ne pourra pas les lire.
  • Arrivée parfaite. Parfois, pendant que vous envoyez votre lettre par la poste, elle peut être déchirée ou un escargot peut en manger la moitié. Comment savez-vous que toute votre lettre est arrivée en parfait état? Eh bien, votre correspondant vous donnera un mécanisme par lequel vous pourrez vérifier s'il a la lettre complète et que c'était exactement la lettre que vous avez envoyée. (par exemple via un compte de mots, etc.). une analogie de base.
BKSpurgeon
la source
0

TLDR;

  • TCP - orienté flux, nécessite une connexion, fiable, lent
  • UDP - orienté message, sans connexion, peu fiable, rapide

Avant de commencer, rappelez-vous que tous les inconvénients de quelque chose sont une continuation de ses avantages . Il n'y a qu'un bon outil pour un travail, pas de panacée. TCP / UDP coexistent depuis des décennies, et pour une raison.

TCP

Il a été conçu pour être extrêmement fiable et il fait très bien son travail. C'est tellement complexe parce qu'il accomplit une tâche difficile: prouver un transport fiable sur le protocole IP non fiable.

Étant donné que toute la logique complexe de TCP est encapsulée dans la pile réseau, vous êtes libre de faire beaucoup de tâches de bas niveau laborieuses et sujettes aux erreurs dans la couche application.

Lorsque vous envoyez des données via TCP, vous écrivez un flux d'octets sur le socket de l'expéditeur où il est divisé en paquets, transmis dans la pile et envoyé sur le câble. Du côté du récepteur, les paquets sont réassemblés à nouveau en un flux continu d'octets.

Maintenir cette belle abstraction a un coût en termes de complexité et de performances. Si le premier paquet du flux d'octets est perdu, le récepteur retardera le traitement des paquets suivants même ceux qui sont déjà arrivés.

De plus, pour être fiable, TCP implémente ceci:

  • TCP nécessite une connexion établie, ce qui nécessite 3 allers-retours (établissement de liaison à 3 voies "infâme").
  • TCP a une fonction appelée «démarrage lent» lorsqu'il augmente progressivement la vitesse de transmission après l'établissement d'une connexion pour permettre à un récepteur de suivre les données.
  • Chaque paquet envoyé doit être accusé de réception, sinon un expéditeur cessera d'envoyer plus de données
  • Et ainsi de suite...

Tout cela est exacerbé dans les réseaux sans fil lents et peu fiables, tandis que TCP a été conçu pour les réseaux câblés où les retards sont prévisibles et la perte de paquets n'est pas si courante. De plus, comme beaucoup de gens l'ont déjà mentionné, pour certaines choses, TCP ne fonctionne tout simplement pas (DHCP). Cependant, le cas échéant, TCP fait toujours son travail exceptionnellement bien.

En utilisant une analogie avec le courrier, une session TCP est similaire à raconter une histoire à votre secrétaire qui la divise en courriers et envoie un service de courrier merdique à un éditeur. De l'autre côté, une autre secrétaire rassemble les courriers en un seul morceau de texte. Certains e-mails sont perdus, certains sont corrompus, une procédure très complexe est donc nécessaire pour une livraison fiable et votre article de 10 pages peut prendre beaucoup de temps pour parvenir à votre éditeur.

UDP

UDP, d'autre part, est orienté message, de sorte qu'un récepteur écrit un message (paquet) sur la socket, puis il est transmis à un récepteur tel quel, sans aucune division / assemblage.

Par rapport à TCP, sa spécification est très simple. Essentiellement, tout ce qu'il fait pour vous est d'ajouter une somme de contrôle au paquet afin qu'un récepteur puisse détecter sa corruption. Tout le reste doit être mis en œuvre par vous, développeur de logiciels. Maintenant, lisez la volumineuse spécification TCP et essayez de penser à en réimplémenter certaines parties.

Certaines personnes sont allées dans ce sens et ont obtenu des résultats très décents, au point que HTTP / 3 utilise QUIC - un protocole basé sur UDP. Cependant, c'est plus une exception. Les applications courantes d'UDP sont les applications de streaming audio / vidéo et de conférence comme Skype, Zoom ou Google Hangout où la perte de paquets n'est pas si importante par rapport à un délai introduit par TCP.

raiks
la source