11
votes

Envoi de plusieurs paquets TCP dans un paquet IP

est-il possible d'envoyer plusieurs paquets TCP ou UDP sur un seul paquet IP? Existe-t-il des spécifications dans le protocole qui ne le permettent pas.

Si cela est autorisé par le protocole mais n'est généralement pas effectué par les implémentations TCP / UDP pourriez-vous me signaler à la partie correspondante du code source Linux qui le prouve.

Y a-t-il des implémentations de TCP / UDP sur certains OS qui envoient plusieurs paquets sur un seul paquet IP. (si c'est permis).


0 commentaires

6 Réponses :


9
votes

Il est pas possible .

L'en-tête SEQMENT TCP ne décrit pas sa longueur. La longueur de la charge utile TCP est dérivée de la longueur du ou des paquets IP moins la longueur des en-têtes IP et TCP. Alors seulement un segment TCP par paquet IP.

Inversement, cependant, un seul segment TCP peut être fragmenté sur plusieurs paquets IP par fragmentation IP.


6 commentaires

C'est là que j'ai eu cette idée de!


voulait confirmer si cela est spécifié dans le protocole.


Dans TCP, ils s'appellent "segments", pas "paquets".


@CAF a changé, mais 50/50 s'il est plus compréhensible


Qu'en est-il de UDP, il a un champ de longueur dans son en-tête, non? Si le receveur autorisé ne semble pas avoir de problème pour trouver les paquets individuels, n'est-ce pas?


"Un segment TCP peut être fragmenté sur plusieurs paquets IP" - cela n'est pas souhaitable, car si même l'un des paquets tombe, tout le segment doit être retransmis, est-ce correct?



2
votes

TCP n'envoie pas de paquets: il s'agit d'un flux continu. Vous envoyez des messages.
UDP, étant basé sur le paquet, n'enverra qu'un paquet à la fois.

Le protocole lui-même ne le permet pas. Cela ne va pas casser, ça ne se produira pas.

La suggestion d'utiliser un tunneling est valide, mais c'est donc l'avertissement.


2 commentaires

Mais finalement, un segment TCP est envoyé en extrayant des données d'un flux d'octets.


Basez-vous votre réponse sur la base des implémentations ou du protocole ne le permet pas. Serait quelque chose si nous avons une implémentation qui envoie plus d'un segment TCP à l'intérieur d'un paquet IP.



2
votes

Vous voudrez peut-être essayer TCP TCP sur TCP, bien qu'il soit généralement considéré comme un mauvaise idée . En fonction de vos besoins, votre kilométrage peut varier.


0 commentaires

2
votes

Vous voudrez peut-être jeter un oeil sur le Protocole de transmission de la commande de flux qui permet plusieurs données Streams sur une seule connexion TCP.

Edit - Je ne savais pas que TCP n'a pas son propre champ d'en-tête, il n'y aurait donc aucun moyen de le faire sans écrire un équivalent TCP personnalisé contenant cette information. SCTP peut toujours être utile cependant, je vais donc laisser ce lien.


0 commentaires

2
votes

TCP est une spécification publique, pourquoi pas simplement la lire?

RFC4164 est le document de la feuille de route, RFC793 est TCP lui-même et RFC1122 contient des errata et montre comment il s'intègre avec le reste de l'univers (IPv4).

Mais en bref, car l'en-tête TCP (RFC793 Section 3.1) n'a pas de champ de longueur, les données TCP s'étend à partir de l'extrémité du remplissage d'en-tête à la fin du paquet IP. Il n'y a nulle part où mettre un autre segment de données dans le paquet.


0 commentaires

1
votes

Vous ne pouvez pas emballer plusieurs paquets TCP dans un paquet IP - c'est une restriction de la spécification mentionnée ci-dessus. TCP est l'API la plus proche qui est axée sur l'application. Ou vous souhaitez programmer l'envoi de messages IP bruts? Dites-nous simplement quel problème voulez-vous résoudre? Pensez à la manière dont vous organisez la livraison des messages d'une application à une autre, ou mentionner que vous souhaitez accrocher à TCP / IP Stack. Ce que je peux vous suggérer:

  1. Considérez l'emballage de ce que vous aimez dans le paquet UDP. Je ne suis pas sûr, à quel point il est facile d'initier le routage des packages TCP "non déballés" sur le côté distant.
  2. envisagez d'utiliser PPTP ou protocole similaire à tunneling.

4 commentaires

Cette question se pose parce que j'ai remarqué qu'il n'y avait aucune longueur de champ de segment TCP dans l'en-tête TCP. C'est pourquoi je voulais confirmer. Merci beaucoup!


Qu'en est-il de UDP, il a un champ de longueur dans son en-tête, non? Si le receveur autorisé ne semble pas avoir de problème pour trouver les paquets individuels, n'est-ce pas?


@Rohitbanga: À cet égard TCP en effet, TCP n'a pas de champ avec la taille des données. Il repose sur le protocole de transport sous-jacent que (AFaik) l'a toujours toujours. Donc, il n'est pas nécessaire d'ajouter une autre valeur redondante.


@Dhanarajdurairaj: Oui, UDP a la longueur, Checkout Wikipedia . Toutefois, TCP et UDP servent différentes questions: elles ne peuvent pas être mélangées. Ils sont deux branches situées au sommet de la propriété intellectuelle: TCP est destinée à la diffusion de données séquentielle des données, UDP est pour un échange de messages courts où l'ordre n'a pas beaucoup d'importance.