2010-04-20 14 views
25

Esto es más una pregunta teórica que un problema real que tengo.número de secuencia de TCP pregunta

Si entiendo correctamente, el número de secuencia en el encabezado TCP de un paquete es el índice del primer byte en el paquete en toda la secuencia, ¿correcto? Si ese es el caso, dado que el número de secuencia es un entero de 32 bits sin signo, ¿qué ocurre después de que se transfieren más de FFFFFFFF = 4294967295 bytes? ¿Se ajustará el número de secuencia o el remitente enviará un paquete SYN para reiniciar a 0?

Respuesta

26

El número de secuencia vuelve de nuevo a 0. Source:

alt text

números de secuencia TCP y recibir ventanas se comportan muy parecido a un reloj. La ventana de recepción cambia cada vez que el receptor recibe y confirma un nuevo segmento de datos. Una vez que se ejecuta de números de secuencia, el número de secuencia vuelve de nuevo a 0.

véase también el capítulo 4 de RFC 1323.

17

Se envuelve. RFC 793:

Es esencial recordar que el espacio de número de secuencia real es finito, aunque muy grande. Este espacio va de 0 a 2 ** 32 - 1. Como el espacio es finito, todas las operaciones aritméticas con números de secuencia se deben realizar módulo 2 ** 32. Esta aritmética sin signo preserva la relación de los números de secuencia a medida que pasan de 2 ** 32 - 1 a 0 de nuevo. Hay algunas sutilezas en la aritmética de módulo de la computadora, por lo que se debe tener mucho cuidado al programar la comparación de dichos valores. El símbolo "= <" significa "menor o igual" (módulo 2 ** 32).

Leer más: http://www.faqs.org/rfcs/rfc793.html#ixzz0lcD37K7J

+2

¡Gracias por el enlace de RFC! ¡Te hubiera votado si tuviera suficiente representante! – Meta

12

El número de secuencia no es en realidad el "índice del primer byte en el paquete de toda la corriente", ya que los números de secuencia se inicia deliberadamente a un valor aleatorio (esto es para detener una forma de ataque conocido como TCP Sequence Prediction Attack).

No se requiere SYN, el número de secuencia vuelve simplemente a cero una vez que llega al límite.

+0

Gracias por la corrección. No sabía que los números de secuencia comenzaban con un valor aleatorio. Entiendo lo que significa Wireshark cuando dice "número relativo" ahora. – Meta

+1

No está claro si un número de secuencia inicial mitigaría significativamente dicho ataque. Los diseñadores de TCP/IP especificaron el "Número de secuencia inicial" como un valor generado por un reloj para evitar posibles confusiones en el caso de que se creara una nueva conexión con la misma fuente/destino que una conexión anterior que todavía tenía paquetes en vuelo. en la red. Consulte "Selección del número de secuencia inicial" en http://www.ietf.org/rfc/rfc793.txt – EricLaw

Cuestiones relacionadas