Sobes.tech
Middle

Cuéntame sobre la capa de transporte (transport layer) del modelo TCP/IP.

sobes.tech AI

Respuesta de la IA

El nivel de transporte TCP/IP proporciona comunicación entre procesos en diferentes hosts. Las tareas principales:

  • Identificación de aplicaciones/procesos en el host (a través de puertos).
  • Proporcionar servicios de entrega de datos:
    • Entrega confiable y ordenada (TCP).
    • Entrega no confiable y sin garantías (UDP).

Dos protocolos principales:

  • Protocolo de Control de Transmisión (TCP):
    • Orientado a conexión.
    • Garantiza la entrega de paquetes, mantiene el orden, controla el flujo y gestiona la congestión.
    • Se usa para aplicaciones que requieren transmisión confiable (HTTP, FTP, SMTP).
  • Protocolo de Datagramas de Usuario (UDP):
    • Sin conexión.
    • No garantiza la entrega, el orden ni el control de flujo.
    • Baja latencia, adecuado para aplicaciones sensibles al tiempo donde se permite una pequeña pérdida de datos (DNS, VoIP, streaming de video).

Los segmentos TCP incluyen campos para: puertos de origen/destino, números de secuencia, números de reconocimiento, banderas (SYN, ACK, FIN), suma de comprobación.

Los datagramas UDP incluyen campos para: puertos de origen/destino, longitud y suma de comprobación.

Puertos (ports): números de 16 bits utilizados para multiplexar/desmultiplexar datos entre procesos.

  • Puertos bien conocidos (0-1023): Reservados para servicios estándar (80 para HTTP, 443 para HTTPS, 22 para SSH).
  • Puertos registrados (1024-49151): Usados para aplicaciones privadas registradas en IANA.
  • Puertos dinámicos/privados (49152-65535): Usados por clientes para conexiones salientes.

Ejemplo de establecimiento de conexión TCP (Three-way Handshake):

  1. El cliente envía un segmento con la bandera SYN y un número de secuencia inicial.
  2. El servidor recibe el SYN, responde con un segmento con banderas SYN y ACK, su número de secuencia inicial y un número de reconocimiento igual a client_seq + 1.
  3. El cliente recibe el SYN+ACK, responde con un segmento con la bandera ACK y un número de reconocimiento igual a server_seq + 1. La conexión está establecida.
// Ejemplo de estructura de encabezado TCP (simplificada)
struct tcp_header {
    unsigned short src_port;       // Puerto de origen
    unsigned short dest_port;      // Puerto de destino
    unsigned int   seq_num;        // Número de secuencia
    unsigned int   ack_num;        // Número de reconocimiento
    unsigned short flags;          // Banderas (SYN, ACK, FIN, etc.)
    // otros campos...
};
// Ejemplo de estructura de encabezado UDP (simplificada)
struct udp_header {
    unsigned short src_port;       // Puerto de origen
    unsigned short dest_port;      // Puerto de destino
    unsigned short length;         // Longitud del datagrama UDP
    unsigned short checksum;       // Suma de comprobación
};