Numéro de séquence TCP

j'essaie de comprendre comment les numéros de séquence de l'en-tête TCP sont générés.

sur certains endroits j'ai lu que c'est l '" index du premier octet dans le paquet "( lien ici ), sur certains autres sites c'est un nombre généré au hasard 32bit qui est ensuite incrémenté.

Je ne sais pas vraiment qui est qui, alors voici quelques questions:

  • Comment est le numéro de séquence initial - il généré ? (numéro rfc s'il y en a un)
  • Comment est-il incrémenté ?
  • comment génère-t-on la clé secrète ?

j'ai lu certains des rfc comme RFC 6528 , RFC 793 et RFC 1948 mais je ne semble pas pouvoir comprendre lequel est réellement mis en œuvre. J'ai lu à propos du statut "MST" mais stil ...

Merci d'avance !

21
demandé sur Community 2012-05-04 20:39:37

2 réponses

chaque extrémité d'une connexion TCP établit un numéro de séquence de départ pour les paquets qu'elle envoie, et envoie ce numéro dans le paquet SYN qu'elle envoie dans le cadre de l'établissement d'une connexion.

il n'y a pas de exigence pour que l'une ou l'autre extrémité suive une procédure particulière pour choisir le numéro de séquence de départ. Le système d'exploitation est libre d'utiliser n'importe quel mécanisme il aime, mais généralement, il est préférable, si elle choisit un nombre au hasard, comme c'est plus sécurisé.

à partir de ce point de départ, chaque paquet envoyé par l'une ou l'autre extrémité contient deux numéros de séquence - un pour spécifier où se trouve le paquet dans le flux, et un numéro de séquence ACK qui signifie le nombre d'octets reçu . Les deux nombres sont compensés par le numéro de séquence de départ.

lisez tout à ce sujet dans Wikipedia bien sûr-cherchez "numéro de séquence" dans cette page pour obtenir tout le sang détail.

32
répondu Michael Slade 2012-05-04 17:12:35

en 4.4 BSD (et la plupart des implémentations dérivées de Berkeley) lorsque le système est initialisé le numéro de séquence d'envoi initial est initialisé à 1. Cette pratique viole les exigences RFC de L'hôte. (Un commentaire dans le code reconnaît que c'est faux.) Cette variable est alors incrémentée de 64 000 Toutes les demi-secondes et revient à 0 environ toutes les 9,5 heures. (Cela correspond à un compteur incrémenté toutes les 8 microsecondes, pas toutes les 4 microsecondes.) En outre, chaque fois qu'un la connexion est établie, cette variable est incrémentée de 64 000.

2
répondu Joy 2017-04-26 03:53:16