[en] This Bachelor Thesis we want to show an algorithm to calculated the content connection, to explain it we will do theoretical analysis and a practical analysis. One connection is content in other if and only if the content connection and the connection which contains the content connection has the same IP and the same port, and if the content connection has a final time lower than the connection which contains the content connections, and a higher initial time than the other. To realize this algorithm we have done different iteration, the first one was doing a Brute-force algorithm, this algorithm was done because we want a maximum level we can get in this problem, the theoretical level was O(N2) After doing this algorithm and look at the execution time was around 48 hours, we decide to eliminate the connection which has been passed in our time line to do the algorithm more efficient. We can do this change because the final time condition will not appear if the connection is on an initial time which is higher than the final time of the connection we suppose that is a content connection. This change reduce the constant of the level N2 but the execution time was really long. Later we eliminated the connection which has incomplete fields. It means the connection which does not have for example any bytes use. This reduction do a better execution time but was not enough. Afterwards we do a sorting of the initial time. It was because we want a cascade of the connection to improve the speed of the algorithm. With this change we want to remove more connection with the variable of expired connection, but the order of divide and conquer algorithm was not enough good to improve the time as much as we want. At the end if we remove the expired connection variable (with the sorting) and we start the iteration of the loop in the i-esim connection until the time is over, because of the number of content connection a machine can have we got a reduction in the algorithm to O(N*log(N)). The final result we obtain was 6 minutes for 3 GB that was enough for the Bachelor Thesis.

[es] En este Trabajo de Fin de Grado se busca mostrar un algoritmo para calcular las conexiones contenidas, con su respectivo análisis teórico y una corroboración práctica realizada. Una conexión está contenida en otra, si y solo si, la conexión contenedora y contenida tienen la misma IP origen y destino, así como los mismos puertos, y se cumple también que el tiempo de inicio de la conexión contenedora es menor que el tiempo de inicio de la contenida, y el tiempo de fin de la conexión contenedora es mayor que el tiempo de fin de la conexión contenida. Para realizar este cálculo de conexiones contenidas se han realizado varias iteraciones, la primera de todas fue el diseño de un algoritmo de fuerza bruta, para saber cuál era la cota máxima que podíamos tener, este algoritmo de fuerza bruta tenía un coste teórico de O(N2). Tras la realización de este algoritmo y ver que el tiempo de cálculo era de 48 horas aproximadamente, se pasó primero a eliminar las conexiones que ya habían pasado en nuestra línea temporal, y en consiguiente no podían tener más conexiones contenidas, porque no cumplían la condición de tiempo de fin, ya que el tiempo de inicio de la conexión en la que nos encontrábamos no podía ser menor que el tiempo de fin de la posible contenedora. Esto realizó una reducción en la constante del orden, pero seguía manteniéndose en un tiempo de ejecución muy elevado. Después de esto, se eliminó las conexiones que tenían campos incompletos, es decir, se eliminaron las conexiones que no tenían un número de paquetes, ni un fin establecido o un inicio establecido así como las que tenían un consumo en bytes igual a 0. Este cambio volvió a reducir la constante global pero aún no era suficiente, ya que en tiempo de ejecución era muy costoso. Tras esto se pasó a realizar una ordenación de los tiempos de inicio para que las conexiones contenidas estuviesen situadas en cascada y así poder reducir el orden de nuestro problema. Aun así aun no era suficiente, porque aunque si se borraban conexiones más rápido el coste de un algoritmo de ordenación de divide y vencerás es de orden O(N*log(N)), lo que hizo que aumentará un poco el coste, pero si se eliminaban más rápido las conexiones. Por último y dándonos cuenta de que se podía descartar la variable utilizada para las conexiones expiradas debido a que se podía empezar desde la i-esima conexión hasta que la línea temporal se acabase el orden se vio reducido a O(N*log(N)), ya que el número de conexiones que puede almacenar un ordenador a la vez es finito luego nuestro orden N2 quedaba acotado por una constante W y el número de conexiones N. Los resultados finales dieron lugar a que el coste del cálculo del número de conexiones contenidas pasase de 48 horas aproximadamente para 3GB a 6 minutos, dando lugar al final de este trabajo de fin de grado.