2010-04-20 9 views
25

Il s'agit plus d'une question théorique que d'un problème réel que j'ai. Si je comprends bien, le numéro de séquence dans l'en-tête TCP d'un paquet est l'indice du premier octet dans le paquet dans le flux entier, correct? Si tel est le cas, étant donné que le numéro de séquence est un entier 32 bits non signé, que se passe-t-il après plus de FFFFFFFF = 4294967295 octets? Le numéro de séquence va-t-il être bouclé ou l'expéditeur enverra-t-il un paquet SYN pour redémarrer à 0?Numéro de séquence TCP question

Répondre

26

Le numéro de séquence reboucle à 0. Source:

alt text

numéros de séquence TCP et recevoir fenêtres se comportent comme une horloge. La fenêtre de réception change chaque fois que le récepteur reçoit et accuse un nouveau segment de données. Une fois qu'il court de numéros de séquence, la séquence nombre reboucle à 0.

également voir le chapitre 4 de RFC 1323.

17

Il enveloppe. RFC 793:

Il est essentiel de se rappeler que l'espace réel du numéro de séquence est fini, bien que très grand. Cet espace va de 0 à 2 ** 32 - 1. Puisque l'espace est fini, tout calcul arithmétique avec des numéros de séquence doit être effectué modulo 2 ** 32. Cette arithmétique non signée préserve la relation entre les numéros de séquence lorsqu'ils passent de 2 ** 32 - 1 à 0 à nouveau. Il y a quelques subtilités à l'arithmétique modulo de l'ordinateur, il faut donc faire très attention à programmer la comparaison de ces valeurs. Le symbole "= <" signifie "inférieur ou égal" (modulo 2 ** 32).

En savoir plus: http://www.faqs.org/rfcs/rfc793.html#ixzz0lcD37K7J

+2

Merci pour le lien RFC! Je vous avais upvote si j'avais assez de rep! – Meta

12

Le numéro de séquence n'est pas en fait l ' « indice du premier octet dans le paquet dans le flux entier », puisque les numéros de séquence commence délibérément à une valeur aléatoire (ce qui est d'arrêter un forme d'attaque connue sous le nom TCP Sequence Prediction Attack).

Aucun numéro SYN n'est requis, le numéro de séquence revient simplement à zéro une fois qu'il atteint la limite.

+0

Merci pour la correction. Ne connaissait pas les numéros de séquence commencés à une valeur aléatoire. Je comprends ce que Wireshark veut dire quand on dit "nombre relatif" maintenant. – Meta

+1

Il n'est pas clair qu'un numéro de séquence initial atténuerait significativement une telle attaque. Les concepteurs de TCP/IP ont spécifié le "Initial Sequence Number" comme une valeur ensemencée par une horloge pour éviter toute confusion dans le cas où une nouvelle connexion a été créée avec la même source/destination qu'une connexion antérieure qui avait encore des paquets en vol dans le réseau. Voir "Sélection du numéro de séquence initial" à l'adresse http://www.ietf.org/rfc/rfc793.txt – EricLaw

Questions connexes