Un segment TCP ne fait-il pas partie d'un paquet TCP?
Voici ce que j'ai lu:
Un segment est un élément de données d'application découpé dans une taille transportable par TCP et entouré d'un en-tête TCP.
L'en-tête TCP n'est-il pas lui-même constitué de segments?
Nous disons que TCP segment
est l’unité de données du protocole qui comprend un en-tête TCP et un élément de données d’application (paquet) provenant de la couche d’application (supérieure). Les données de la couche de transport sont généralement appelées segment
et l'unité de données de la couche réseau est nommée datagram
name__, mais lorsque nous utilisons UDP comme protocole de couche de transport, nous ne disons pas UDP segment
, mais UDP datagram
. Je pense que c'est parce que nous ne segmentons pas l'unité de données UDP (la segmentation est effectuée dans la couche de transport lorsque nous utilisons TCP).
Le TCP RFC d'origine est un peu flou avec l'utilisation du terme "segment".
Dans certains cas, le terme "segment" fait uniquement référence à la partie actuelle du flux de données d'application en cours de transmission, ce qui exclut les en-têtes TCP. Par exemple, TCP "Taille maximale du segment" (MSS) correspond à la taille maximale du bloc de données d'application dans ce message, sans compter les en-têtes TCP.
Mais dans d'autres cas, le terme "segment" inclut l'ensemble du message TCP, y compris les en-têtes TCP. En fait, dans au moins un cas, les spécifications mentionnent TCP segments sans données d'application (telles que les Acks simples).
Un seul message IP complet est un "datagramme".
Le RFC IP d'origine fait référence aux messages de couche liaison comme des "paquets". Les datagrammes IP peuvent être divisés en "fragments" pour s'adapter aux limites de taille de paquet sur les réseaux de petits paquets.
La couche de liaison IEEE 802.3/Ethernet fait référence à une seule transmission de couche physique contiguë en tant que "paquet". La partie de liaison de données MAC du paquet est appelée "trame". La trame commence par l'adresse MAC de destination et se termine par la séquence de vérification de trame. La partie de la trame pouvant contenir un datagramme IP (ou l'un de ses fragments) est appelée "champ de données client MAC".
Donc, techniquement, il n’existe pas de "paquet TCP" ou de "paquet IP". Les paquets sont des termes des couches sous IP. TCP a "segments" et IP a "datagrammes".
Un segment TCP s'appelle un datagramme. Généralement, un segment ou un datagramme est un paquet. Lorsque le datagramme ou le paquet est traité par la couche réseau, il ajoute l'en-tête IP aux données et devient un paquet IP.
La couche de transport segmente les données en unités plus petites appelées Segments, datagrammes ou ainsi appelés paquets. Mais nous les référons généralement comme des segments.
le segment TCP n'est qu'un concept, c'est différent avec la défragmentation IP
lorsque vous envoyez des données plus grandes que ip mtu, elles sont placées dans un paquet ip, mais la couche ip trouve alors que le paquet ip est trop long pour être transmis, de sorte qu'il divisera un gros paquet en plusieurs morceaux, chacun d'entre eux ayant le même Identifiant mais avec décalage et longueur de données différents. le côté réception est responsable de la collecte de toutes les pièces. Après réception de toutes les pièces, il rassemblera toutes les pièces en un seul paquet ip et transmet le tout à la couche supérieure du protocole.
mais la couche tcp a un comportement différent. Lorsque vous envoyez des données suffisamment volumineuses, la couche TCP ne les mettra pas dans un seul paquet TCP, puis les divisera en plusieurs morceaux (mais l'IP le fera). Elle récupérera une partie des données brutes dans un seul paquet TCP, puis transmettra le message. le paquet tcp à la couche ip, la longueur du paquet tcp est déterminée par mss, plus tard, il récupérera une autre partie des données restantes dans un autre paquet tcp et répétera le processus jusqu'à ce que toutes les données soient transmises.
si tcp n'utilise pas mss, c'est horrible. Supposons que vous envoyez des données plus grandes que mss, elles seront placées dans un seul paquet tcp p les données ne sont pas divisées en petits morceaux car mss n'est pas utilisé, le paquet tcp est plus grand que ip mtu, de sorte que l'ip divisera le tcp. paquet en morceaux. le paquet tcp sera retransmis si l'une des pièces est perdue, perd du temps et une bande passante
ps: tcp_mss = ip_mtu - tcp_header
L'en-tête TCP, également appelé "en-tête de segment", et la charge utile, ou les données, ou "données de segment" constituent le segment TCP, de taille variable.
Lorsque vous envoyez des données via une connexion TCP, la quantité de données que vous envoyez peut dépasser la taille maximale d'octets autorisée par la connexion dans un seul paquet. Ce montant "Taille maximale du segment" (également appelé MSS) est "négocié" (1) au moment de la connexion entre les deux extrémités TCP (le client et le serveur). Le protocole de niveau 4 de l'OSI TCP est responsable de la dispersion/collecte. Cela signifie que votre flux de données est divisé en parties plus petites (appelées segments) et envoyé séparément via le réseau. De l'autre côté, la couche TCP est responsable de la nouvelle collecte du paquet dans le bon ordre pour reformer le flux de la même manière qu'il a été envoyé. Rien ne peut vous dire que les segments arriveront à destination dans le même ordre qu'au départ. C'est aussi pour cette raison que les paquets sont numérotés. De plus, les paquets sont acquittés un à un séparément (2) par le destinataire, mais des paquets peuvent parfois être perdus. Ensuite, aucun ACK ne sera renvoyé de la destination du paquet à l'émetteur. Ensuite, l'émetteur devrait le renvoyer (c'est également le rôle de TCP). Parfois, le paquet est reçu correctement mais l'accusé de réception n'est pas reçu par l'émetteur (paquet perdu à nouveau). Dans un tel cas, l'émetteur le renverra, mais le destinataire verra qu'il l'a déjà reçu (c'est-à-dire un paquet Dup) et l'éliminera, mais renverra l'accusé de réception à l'expéditeur.
De plus, pour améliorer le débit, l'émetteur peut envoyer plusieurs paquets en série sans avoir à attendre que le précédent accusé de réception envoie le prochain paquet. Il fait également partie du protocole TCP et est appelé fenêtre glissante. Le nombre de paquets envoyés en attente d'un accusé de réception est limité.
(1) En réalité, il n’ya aucune négociation, chaque extrémité indique la taille maximale à laquelle il est capable de faire face. Cette valeur n'inclut pas les 20 octets de l'en-tête IP, ni les 20 octets de TCP en-tête. (2) plusieurs paquets peuvent également être acquittés par un seul ACK.
N'oubliez pas que les datagrammes sont des données encapsulées envoyées sur un réseau IP ou utilisant un protocole sans connexion tel que UDP. Les paquets sont des données encapsulées pour un protocole orienté connexion tel que TCP. Les segments sont des parties d'un flux de données envoyé sur TCP. Voir W.Richard Stevens "TCP/IP illustré" pour une explication bien meilleure de tout cela.
Un en-tête n'est pas composé de segments. Un en-tête a toujours la même taille et doit être complet. Sinon, le paquet ne pourrait pas être décodé.
Ce que vous appelez "segment" est l'ensemble du "paquet" qui est ensuite combiné avec d'autres au flux TCP. Voir:
Le protocole de contrôle de transmission accepte les données d'un flux de données, les segmente en morceaux et ajoute un en-tête TCP créant un segment TCP.
TCP reçoit les données de la couche application et les "découpe" en plusieurs segments de données; parties des données d'origine avec un en-tête ajouté TCP. Une partie de cet en-tête est un numéro de séquence utilisé par le protocole TCP à l'extrémité de réception pour mettre tous les segments reçus (moins les en-têtes) dans le bon ordre et ré-assembler les données d'origine qu'il puis transfère à la couche d'application.
Donc, pour répondre à votre question; le terme 'paquet TCP' n'existe pas vraiment. Ce s'appelle un "segment" qui se compose d'un en-tête et d'une section de données. L'en-tête lui-même est constitué de plusieurs "champs" qui contiennent, entre autres, un numéro de séquence, une somme de contrôle et des numéros de port source et de destination.
Un TCP segment IS un paquet. Un segment ne constitue qu'une partie d'un flux de connexion TCP entre deux ordinateurs. Un datagramme est un "paquet" en termes UDP.
Un paquet IP est constitué d'un en-tête IP avec des données attachées. Les données sont un en-tête TCP et un segment de données d'application, appelé TCP Segment. TCP Le segmentage correspond à ce que vous appelez habituellement un TCP paquet.
Le terme "générique" pour des choses comme celle-ci est unité de données de protocole, ou PDU.
LAYER # - OSI NAME - COMMON PROTOCOL OR USE - PDU NAME
------- ------------ ---------------------- --------------------------
Layer 1 - Physical - Transceiver - bits, or a physical signal
Layer 2 - Datalink - Ethernet - frame
Layer 3 - Network - IP - packet
Layer 4 - Transport - TCP - segment
Layer 5 - Session - SIP - data, request, or response
Layer 6 - Presentation - Encryption/compression - data, request, or response
Layer 7 - Application - HTTP - data, request, or response
Les choses deviennent floues avec des protocoles spécifiques à partir de la couche 4 (par exemple, à ce jour, je ne connais rien de vraiment purement un protocole de session, et il n'y a pas vraiment de protocole commun de "présentation" mais c’est une couche presque distincte dans de nombreuses piles de logiciels/communications).
De plus, comme mentionné précédemment, chacune de ces PDU a un en-tête qui est distinct de son charge utile, ou de ses données. L'en-tête contient des informations sur les données et éventuellement une somme de contrôle pour la vérification à l'autre extrémité.