web-dev-qa-db-fra.com

Pouvez TCP être mis en œuvre via UDP?

J'ai eu une idée étrange. J'ai entendu parler d'un logiciel qui, d'après ma compréhension, utilise UDP pour transférer des fichiers, ce qui diminue le temps système contenu dans les paquets TCP.

Si mon application nécessite TCP et que mon réseau local dispose d'une configuration logicielle pour communiquer avec un autre centre de données de l'autre côté de la côte, la configuration logicielle étant terminée. Serait-il possible d'envoyer les données réelles via UDP mais en simulant TCP aux deux extrémités?

Je me souviens vaguement de quelque chose à propos de 7 couches mais je ne suis pas sûr que le protocole fût une des couches ni si TCP est impossible à simuler/implémenter parfaitement lors de l'utilisation d'UDP sur le réseau. Quelqu'un a-t-il des idées ou des informations sur de tels projets?

24
user34537

Si vous demandez si vous pouvez utiliser UDP en tant que Couche 2 , la réponse est oui, en quelque sorte. Différents protocoles vous permettent de créer un tunnel vers un autre réseau à l'aide d'un transport UDP, tels que L2TP et même IPsec (avec NAT traversal) . Vous pouvez également le faire au niveau de la couche application .

Si vous demandez si TCP peut être implémenté dans UDP, la réponse est non. Premièrement, les paquets TCP et Les paquets UDP ont un format incompatible. Deuxièmement, TCP et UDP ont des numéros de protocole différents (indiqués dans le en-tête IP ), ce qui signifie que le trafic TCP destiné à un port UDP ne serait pas transmis à la protocole correct de couche supérieure.

16
mpontillo

TCP et UDP sont tous deux construits au-dessus de l'IP, mais le TCP utilise une structure de paquet différente et au niveau de la couche 2, il n'est pas possible de reproduire le TCP. _ utilisant des paquets UDP.

Bien sûr, si vous avez le contrôle à la fois sur la source et sur la destination, il est possible de créer un tunnel UDP fiable pour les paquets TCP. Cela nécessiterait des informations internes (numéro de paquet, indicateurs d'ack/nack) dans le corps du paquet UDP.

Il y a un projet intéressant http://udt.sourceforge.net/

Il s’agit d’un mécanisme fiable de transfert de fichiers capable de diffuser qui repose sur le protocole UDP.

13
Viktor Latypov

PseudoTCP est un protocole qui implémente les algorithmes TCP au-dessus du protocole UDP. Il a été introduit car la traversée NAT pour TCP est beaucoup plus compliquée que UDP. Mais certaines applications P2P nécessitent un transfert de données fiable entre les nœuds.

Autant que je sache, il existe deux variantes de PseudoTCP: Libjingle et Libnice.Libjingle est une bibliothèque open source de Google qui était initialement pour gtalk. Vous pouvez consulter un exemple de partage de fichiers de libjingle: https://developers.google.com/talk/libjingle/file_share . Récemment, Chrome Desktop utilise également l'implémentation PseudoTCP de libjingle pour des connexions fiables.

5
Qinjin

Une façon de le faire maintenant sur Linux-3.18 + consiste à utiliser Foo sur UDP (FOU) qui implémente l’encapsulation UDP générique ( GUE ). Voici un bon introduction à FOU et la page de manuel pour ip-fou .

Ou si vous voulez un système de transfert de fichiers basé sur UDP [open source], il existe des choses comme UDT , UFTP , Tsunami-UDP Google QUIC .

3
Pierz

Si mon application nécessite TCP et que mon réseau local dispose d'une configuration logicielle pour communiquer Avec un autre centre de données de l'autre côté de la côte, la configuration logicielle Étant terminée. Serait-il possible d'envoyer les données réelles via UDP mais en simulant TCP aux deux extrémités?

Non. Un socket UDP se trouve dans un espace de noms différent d'un socket TCP. Vous ne pourrez pas écrire UDP à une extrémité et envoyer ou recevoir TCP à l'autre extrémité. TCP et UDP sont des protocoles homologues; les deux existent sur la couche au-dessus d'IP. Vous ne pouvez pas utiliser l'un pour usurper l'autre.

3
user207421

Oui, vous pouvez développer un protocole sur UDP qui simule TCP. Cependant, si vous simuliez complètement TCP, il y aurait techniquement davantage de temps système. Parce que TCP est implémenté en tant que paquet et que votre TCP simulé est implémenté dans le corps du paquet.

Si vous n'avez besoin que d'une ou deux fonctionnalités de TCP (telles que le classement de base), son implémentation dans UDP est utile.

Halo utilise 2-3 protocoles (IIRC) UDP qui simulent différentes fonctionnalités de TCP, puis à part entière TCP pour initialiser les états de jeu. I Shot You First Network, publication de la GDC

Par exemple, dans un cas, ils envoient 3 paquets UDP en double pour surmonter la perte de paquets.

Si vous contrôlez le logiciel des deux côtés et qu'il est rentable de créer votre propre protocole, le protocole UDP peut être polyvalent.

3
Nathan Goings

Hmm, je crois bien. Vous devez utiliser un proxy aux deux extrémités, mais cela devrait être possible.

Le plus gros problème que vous allez rencontrer est qu’UDP est conçu avec l’idée que vous ne vous souciez pas de savoir si certains paquets ne parviennent jamais à l’autre bout.

Voici un lien avec quelques informations supplémentaires:

http://www.cyberciti.biz/faq/key-differences-between-tcp-and-udp-protocols/

IMHO, ce n'est pas une bonne idée de transmettre des fichiers via UDP. 

1
user978122

Les problèmes de TCP concernent ses algorithmes, pas ses en-têtes.

Vous pouvez certainement implémenter les algorithmes TCP au-dessus de UDP. Ce serait en fait la même chose que la mise en tunnel de datagrammes TCP à l'intérieur de datagrammes UDP. Mais tout ce que cela fait est d’ajouter quelques octets supplémentaires à chaque paquet et d’obliger un autre point de terminaison à déballer les paquets.

Le protocole UDP lui-même n’est qu’un maillon mince au-dessus du protocole IP: c’est un moyen pratique d’accéder au réseau IP à commutation de paquets sans avoir à plonger dans les noyaux ni à recevoir un traitement spécial des routeurs. La principale raison d'implémenter un transport fiable au-dessus d'UDP est de s'éloigner des algorithmes TCP au profit de solutions plus efficaces. FileCatalyst a été mentionné ci-dessus en tant qu'une société qui fait cela, et ma propre société Data Expedition, Inc. le fait aussi.

Donc, vous pourriez implémenter TCP algorithmes sur UDP, mais vous ne voudriez pas.

1
Seth Noble

Vous pouvez simuler quelque chose comme une connexion sur UDP, et vous pouvez également effectuer des contrôles de fiabilité, commander, retransmettre, etc. - mais alors, ce n'est toujours pas TCP, il agit simplement comme ça.

Bien entendu, l’une des extrémités peut être une sorte de "hub" ou de "proxy" qui fait une adaptation. Ensuite, vous n'avez pas de solution à 2 extrémités, mais en fait une solution à 4 extrémités - une paire avec "vrai" TCP et l'autre avec le "soi-tricoté" "TCP" - avec un programme conçu de manière appropriée.

0
glglgl