2012-05-04 19 views
15

Estoy tratando de comprender cómo se generan los números de secuencia del encabezado TCP.Número de secuencia TCP

En algunos lugares he leído que es el "índice del primer byte en el paquete" (link here), en algunos otros sitios es un número aleatorio generado de 32 bits que luego se incrementa.

que no se sabe muy bien cuál es cuál, así que aquí están algunas preguntas:

  • cómo se genera el número de secuencia inicial? (número rfc si hay uno)
  • ¿Cómo se incrementa?
  • ¿Cómo se genera la clave secreta?

He leído algunos de los del RFC como RFC 6528, RFC 793 y RFC 1948 pero me parece que no puede entender cuál se llevan a la práctica. He leído sobre el estado "estándar" pero aún ...

¡Gracias de antemano!

+1

¿Qué implementación? ¿Qué pasa con la fuente de esa implementación sobre la que específicamente preguntas? – geoffspear

+0

Oh, lo siento. Quise decir cuando navegas en Internet (HTTP/TCP/IP) ¿qué usa tu computadora para generar esos números de secuencia? Como funciona ? –

+0

¿Entonces esta no es una pregunta de programación? – geoffspear

Respuesta

27

Cada punto final de una conexión TCP establece un número de secuencia inicial para los paquetes que envía y envía este número en el paquete SYN que envía como parte del establecimiento de una conexión.

No existe el requisito para que cualquiera de los extremos siga un procedimiento particular al elegir el número de secuencia de inicio. El sistema operativo es libre de usar cualquier mecanismo que quiera, pero generalmente es mejor si elige un número aleatorio, ya que es más seguro.

Desde ese punto de partida, cada paquete enviado por cualquiera de los extremos contiene dos números de secuencia: uno para especificar dónde está el paquete y un número de secuencia ACK que significa el número de bytes recibido. Ambos números están compensados ​​por el número de secuencia inicial.

Lea todo al respecto en Wikipedia por supuesto, busque el "número de secuencia" en esa página para obtener todos los detalles sangrientos.

+0

Ah, gracias para tu respuesta rápida! = D Entiendo que es mejor saberlo. Solo dos preguntas de seguimiento ^^: ¿Sabes cómo se genera el número aleatorio? y ¿Sabes a qué número de RFC corresponde el procedimiento que explicaste? ¡Thx otra vez! –

+2

@AwakeZoldiek como se explicó, el número de secuencia inicial se puede elegir mediante cualquier método, aunque para obtener la mejor seguridad se debe elegir utilizando un buen generador de números aleatorios. El material del número de secuencia SYN y ACK está en el documento central RFC 793. – Alnitak

+0

¡Gracias por sus respuestas! =) –

2

En 4.4BSD (y la mayoría de las implementaciones derivadas de Berkeley) cuando el sistema se inicializa, el número de secuencia de envío inicial se inicializa a 1. Esta práctica infringe la RFC de requisitos de host. (Un comentario en el código reconoce que esto es incorrecto.) Esta variable se incrementa en 64,000 cada medio segundo y volverá a cero cada 9,5 horas. (Esto corresponde a un contador que se incrementa cada 8 microsegundos, no cada 4 microsegundos.) Además, cada vez que se establece una conexión, esta variable se incrementa en 64,000.

Cuestiones relacionadas