Esta cuestión se puede resolver de variadas formas, pero te compartimos la que en nuestra opinión es la respuesta más completa.
Solución:
Cuando se establece una conexión TCP, cada lado genera un número aleatorio como su número de secuencia inicial. Es un número fuertemente aleatorio: existen problemas de seguridad si alguien en Internet puede adivinar el número de secuencia, ya que fácilmente pueden falsificar paquetes para inyectarlos en el flujo TCP.
A partir de entonces, por cada byte transmitido, el número de secuencia se incrementará en 1. El campo ACK es el número de secuencia del otro lado, devuelto para confirmar la recepción.
RFC 793, la especificación del protocolo TCP original, puede ser de gran ayuda.
Tengo el mismo trabajo que hacer. En primer lugar, el número de secuencia inicial se generará aleatoriamente (0-4294967297). Luego, el receptor contará la longitud de los datos que recibió y enviará el ACK de seq# + length = x
al remitente. La secuencia entonces será x y el remitente enviará los datos. Del mismo modo, el receptor contará la longitud x + length = y
y enviar el ACK como y
y así sucesivamente… Así es como se genera el seq/ack…
Si quiere mostrarlo prácticamente, intente olfatear un paquete en Wireshark y siga el flujo de TCP y vea el escenario…
Si lo entiendo correctamente, está intentando montar un ataque de predicción TCP SEQ. Si ese es el caso, querrá estudiar los detalles del generador de números de secuencia inicial de su sistema operativo de destino.
Hubo vulnerabilidades ampliamente publicitadas en casi todos los principales sistemas operativos cuando sus generadores de ISN eran predecibles. No he seguido de cerca las consecuencias, pero tengo entendido que la mayoría de los proveedores lanzaron parches para aleatorizar sus incrementos de ISN.
Más adelante puedes encontrar las aclaraciones de otros desarrolladores, tú además tienes la opción de insertar el tuyo si te gusta.