H1RD SECURITY

TCP

TCP o Protocolo de control de transmision, es uno de los protocolos fundamentales de internet, forma parte del nivel cuatro de la capa OSI. Ayuda a que los ordenadores de una red puedan pasarse datos entre si, garantizando que estos datos seran entregados en su destino sin errores y en el mismo orden en que se transmitieron. Ademas proporciona un mecanismo para distinguir distintas aplicaciones dentro de una misma maquina, a traves del concepto puerto.

Cuando un ordenador quiere enviar a otro informacion, esta tendra un tamaño variable que puede ser un 1 giga o 1kb, da igual, TCP se ocupara se “cortar” esa informacion en segmentos añadiendo un header de TCP con diferentes datos como la ip, puertos tanto origen como destino, el numero de sequencia, el numero ACK, Flags (para ver el estado de la conexion), el tamaño de la ventana, checksum…

Cabecera TCP
Representación grafica de la cabecera del protocolo TCP

TCP Flags

Las flags (banderas) de TCP representan diferentes tipos de comunicación o diferentes tipos de conexión que queremos representar. Hay diferentes tipos:

  • SYN : es la version corta de SYNCHRONIZATION, e incluye un numero de sequencia.
  • ACK : es la abreviatura de Acknowledgement, o sea, significa que ok, que todo correcto.
  • FIN : abreviatura de Finish, que representa que ya se termino la conversación.
  • PSH : abreviatura de Push, necesito enviarte información
  • URG : abreviatura de Urgent, necesito enviarte este paquete inmediatamente.
  • RST : abreviatura de Reset, necesito resetear la conexión y volver a empezar.

Negociacion a tres pasos,o Three way handshake

Para establecer en una conexión entre dos ordenadores, TCP sigue el siguiente proceso:

  • El cliente envian un paquete con el flag SYN al servidor, con estado SYN_SENT y un numero (un int) de sequencia aleatorio.
  • Si el puerto del servidor esta activo, este le contesta con un paquete con las flag SYN y ACK activas, ademas incrementa en uno, el valor de sequencia añadiendolo en el ACK, y creando su propio valor de sequencia aleatorio. el estado del paquete es SYN-RECEIVED.
  • El cliente responde con un paquete con el flag ACK y estado ESTABLISHED, añadiendo a su ACK el valor de SYN del servidor sumandole 1.
  • La conexion esta abierta, y el cliente empieza las peticiones al servidor.
  • Si el puerto del servidor estuviera cerrada, el cliente habria recibido un paquete con el bit RST activado, que significa el rechazo del intento de conexión.
Negociacion a tres pasos
Negociacion a tres pasos del protocolo TCP.

Terminar una conexión

Para terminar una conexión entre dos ordenador, TCP sigue el siguiente proceso:

  • La parte de la conexion que quiera cerrar la conexion, puede ser cualquiera de las dos, o cliente o servidor, envia un paquete con el flag FIN (Finish) y un valor de sequencia aleatorio.
  • La otra parte contesta, con un ACK y con el numero de sequencia incrementado en uno.

Puertos TCP

El protocolo IP se ocupa de llevar la informacion al ordenador correcto, pero TCP se ocupa de llevar esa información a la aplicacion correcta, y eso lo consigue mediante los puertos. Solo puede haber un proceso trabajando en un puerto a la vez, sino habria un conflicto de puertos.

Los puertos son valores de 16bits, pueden ir del puerto 0 al 65535, los puertos “conocidos” son los puertos que van del 0 al 1024, y estan reservados a servicios del sistema, del 32768 a los 61000 son los puertos efimeros, para las conexiones de cliente.

User Datagram Protocol (UDP)

Algunas veces las aplicaciones no necesitan trabajar con la garantia de que todos los paquetes seran entregados, y es aqui cuando entra UDP un protocolo sin conexión. Es protocolo envia los paquetes y se olvida de ello, al contrario de TCP que si que gestiona lo que envia y los acuses de recibo que envia la otra parte. Es un protocolo muy util cuando hay conexiones como llamadas de webcam, VOIP, DNS o cuando queremos una red muy rapida.