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):
- El cliente envía un segmento con la bandera SYN y un número de secuencia inicial.
- 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.
- 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
};