¿Se ajusta el número de secuencia de encabezados de paquetes TCP?


16

Me preguntaba, dado que el número de secuencia en un campo de encabezado TCP se elige aleatoriamente durante el protocolo de enlace y se incrementa gradualmente a medida que se intercambian los paquetes, ¿qué sucede después de las transmisiones 2 ^ 32 - initial_seq_no? ¿El número de secuencia se ajusta y se convierte en 0 o se reutiliza el valor inicial (o se inicializa una nueva conexión desde donde se detuvo la anterior)?

Respuestas:


19

Se ajusta yendo a 0. De acuerdo con RFC 793 :

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


3
Cada número es menor o igual que cualquier otro número, módulo 2 ** 32 ...
user253751

2
@ user20574 Es por eso que no se permite que el tamaño de la ventana TCP crezca más de 1 GB, y la comparación de los números de secuencia debe tomar el camino más corto (es decir, la diferencia debe estar en el rango -2 ^ 31 a 2 ^ 31).
kasperd

17

¿El número de secuencia se ajusta y se convierte en 0?

Si. Todos los detalles se pueden encontrar en la Especificación TCP RFC 793 - Protocolo de Control de Transmisión .


Números de secuencia

Es esencial recordar que el espacio de números de secuencia real es finito, aunque muy grande. Este espacio varía de 0 a 2 32-1 .

Como el espacio es finito, toda la aritmética que trata con números de secuencia debe realizarse en el módulo 2 32 . Esta aritmética sin signo conserva la relación de los números de secuencia a medida que vuelven de 2 32 - 1 a 0.

Hay algunas sutilezas en la aritmética de módulo de computadora, por lo que se debe tener mucho cuidado al programar la comparación de dichos valores. El símbolo "= <" significa "menor o igual que" (módulo 2 32 ).

Fuente RFC 793 - Protocolo de control de transmisión


1
No me refiero a disparar al mensajero, pero ¿"menor o igual (módulo N)"? Claramente, el autor de RFC se perdió las "sutilezas de la aritmética del módulo de computadora".
Ben Voigt

En los casos en que la ventana máxima será inferior a 2 ^ 31, y si xy yson de tipo uint32_t, es práctico definir x<=yque significa (uint32_t)(y-x) < 0x80000000.
supercat

@BenVoigt, probablemente dieron por sentado lo que luego se describió en un RFC tools.ietf.org/html/rfc1982
Carsten S

@Carsten que es una aritmética útil pero no es un "módulo aritmético N"
Ben Voigt

1
@BenVoigt, sí, lo que sea. Por cierto, soy muy consciente de que los grupos Z / (n) no están ordenados, pero también soy capaz de interpretar declaraciones en contexto.
Carsten S

7

Sí, se envuelve. Puede leerlo en Wikipedia o en RFC1323 , que muestra cómo protegerse contra los números de secuencia envueltos.

Déjame citar:

Las marcas de tiempo TCP se utilizan en un algoritmo conocido como números de protección contra secuencia envuelta, o PAWS (consulte RFC 1323 para más detalles). PAWS se utiliza cuando la ventana de recepción cruza el límite envolvente del número de secuencia. En el caso de que un paquete se retransmitiera potencialmente, responde a la pregunta: "¿Es este número de secuencia en los primeros 4 GB o el segundo?" Y la marca de tiempo se utiliza para romper el empate.

Y:

PAWS utiliza la misma opción de marcas de tiempo TCP que el mecanismo RTTM descrito anteriormente, y supone que cada segmento TCP recibido (incluidos los segmentos de datos y ACK) contiene una marca de tiempo SEG.TSval cuyos valores son monótonos y no disminuyen en el tiempo. La idea básica es que un segmento se puede descartar como un duplicado antiguo si se recibe con una marca de tiempo SEG.TSval menor que alguna marca de tiempo recibida recientemente en esta conexión.

Tanto en el mecanismo PAWS como en el RTTM, las "marcas de tiempo" son enteros sin signo de 32 bits en un espacio modular de 32 bits. Por lo tanto, "menor que" se define de la misma manera que para los números de secuencia TCP, y se aplican las mismas técnicas de implementación. Si syt son valores de marca de tiempo, s <t si 0 <(t - s) <2 ** 31, calculado en aritmética de 32 bits sin signo.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.