El protocolo TCP/IP no se corresponde exactamente con el modelo OSI. En vez de tener siete niveles, sólo utiliza cuatro. Normalmente conocido como Conjunto de protocolos de Internet, TCP/IP se divide en estos cuatro niveles:
Nivel de interfaz de red.
Nivel Internet.
Nivel de transporte.
Nivel de aplicación.
Cada uno de estos niveles se corresponde con uno o más niveles del modelo OSI.
Nivel de interfaz de red
El nivel de interfaz de red, que se corresponde con los niveles físico y de enlace de datos del modelo OSI se comunica directamente con la red. Proporciona la interfaz entre la arquitectura de red (como Token Ring, Ethernet) y el nivel Internet.
Nivel Internet
El nivel internet, que se corresponde con el nivel de red del modelo OSI, utiliza varios protocolos para encaminar y entregar los paquetes. Los routers son dependientes del protocolo. Funcionan a este nivel del modelo y se utilizan para enviar paquetes de una red a otra o de un segmento a otro. En el nivel de red trabajan varios protocolos.
Protocolo
Internet (IP)
El Protocolo Internet (IP) es un protocolo de conmutación de paquetes
que realiza direccionamiento y encaminamiento. Cuando se transmite un paquete,
este protocolo añade una cabecera al paquete, de forma que pueda enviarse
a través de la red utilizando las tablas de encaminamiento dinámico.
IP es un protocolo no orientado a la conexión y envía paquetes
sin esperar la señal de confirmación por parte del receptor.
Además, IP es el responsable del empaquetado y división de los
paquetes requerido por los niveles físico y de enlace de datos del
modelo OSI. Cada paquete IP está compuesto por una dirección
de origen y una de destino, un identificador de protocolo, un checksum (un
valor calculado) y un TTL (tiempo de vida, del inglés time to live).
El TTL indica a cada uno de los routers de la red entre el origen y el destino
cuánto tiempo le queda al paquete por estar en la red. Funciona como
un contador o reloj de cuenta atrás. Cuando el paquete pasa por el
router, éste reduce el valor en una unidad (un segundo) o el tiempo
que llevaba esperando para ser entregado. Por ejemplo, si un paquete tiene
un TTL de 128, puede estar en la red durante 128 segundos o 128 saltos (cada
parada, o router, en la red), o una combinación de los dos. El propósito
del TTL es prevenir que los paquetes perdidos o dañados (como correos
electrónicos con una dirección equivocada) estén vagando
en la red. Cuando la cuenta TTL llega a cero, se retira al paquete de la red.
Otro método utilizado por IP para incrementar la velocidad de transmisión es el conocido como «ANDing». La idea del ANDing es determinar si la dirección es de un sitio local o remoto. Si la dirección es local, IP preguntará al Protocolo de resolución de direcciones (ARP) por la dirección hardware de la máquina de destino. Si la dirección es remota, el IP comprueba su tabla de encaminamiento local para encaminarlo al destino. Si existe un camino, el paquete se envía por ahí. Si no existe el camino, el paquete se envía a través del gateway a su destino.
Un AND es una operación lógica que combina los valores de dos bits (0, 1) o dos valores lógicos (verdadero, falso) y devuelve un 1 (verdadero) si los valores de ambas entradas son 1 (verdadero) y devuelve 0 (falso) en caso contrario.
Protocolo
de resolución de direcciones (ARP)
Antes de enviar un paquete IP a otro host se tiene que conocer la dirección
hardware de la máquina receptora. El ARP determina la dirección
hardware (dirección MAC) que corresponde a una dirección IP.
Si ARP no contiene la dirección en su propia caché, envía
una petición por toda la red solicitando la dirección. Todos
los hosts de la red procesan la petición y, si contienen un valor para
esa dirección, lo devuelven al solicitante. A continuación se
envía el paquete a su destino y se guarda la información de
la nueva dirección en la caché del router.
Protocolo
inverso de resolución de direcciones (RARP)
Un servidor RARP mantiene una base de datos de números de máquina
en la forma de una tabla (o caché) ARP que está creada por el
administrador del sistema. A diferencia de ARP, el protocolo RARP proporciona
una dirección IP a una petición con dirección de hardware.
Cuando el servidor RARP recibe una petición de un número IP
desde un nodo de la red, responde comprobando su tabla de encaminamiento para
el número de máquina del nodo que realiza la petición
y devuelve la dirección IP al nodo que realizó la petición.
Protocolo
de mensajes de control de Internet (ICMP)
El ICMP es utilizado por los protocolos IP y superiores para enviar y recibir
informes de estado sobre la información que se está transmitiendo.
Los routers suelen utilizar ICMP para controlar el flujo, o velocidad, de
datos entre ellos. Si el flujo de datos es demasiado rápido para un
router, pide a los otros routers que reduzcan la velocidad de transmisión.
Los dos tipos básicos de mensajes ICMP son el de informar de errores y el de enviar preguntas.
Nivel de transporte
El nivel de transporte, que se corresponde con el nivel de transporte del modelo OSI, es el responsable de establecer y mantener una comunicación entre dos hosts. El nivel de transporte proporciona notificación de la recepción, control de flujo y secuenciación de paquetes. También gestiona las retransmisiones de paquetes. El nivel de transporte puede utilizar los protocolos TCP o el Protocolo de datagramas de usuario (UDP) en función de los requerimientos de la transmisión.
Protocolo
de control de transmisión (TCP)
El TCP es el responsable de la transmisión fiable de datos desde un
nodo a otro. Es un protocolo orientado a la conexión y establece una
conexión (también conocida como una sesión, circuito
virtual o enlace) entre dos máquinas antes de transferir ningún
dato. Para establecer una conexión fiable, TCP utiliza lo que se conoce
como «acuerdo en tres pasos». Establece el número de puerto
y los números de secuencia de inicio desde ambos lados de la transmisión.
El acuerdo consta de tres pasos:
El solicitante envía al servidor un paquete especificando el número de puerto que él planea utilizar y el número de secuencia inicial (ISN).
El servidor responde con su ISN, que consiste en el ISN del solicitante más uno.
El solicitante responde a la respuesta del servidor con el ISN del servidor más uno.
En orden a mantener una conexión fiable, cada paquete tiene que contener:
Un número de puerto TCP origen y destino.
Un número de secuencia para mensajes que tienen que dividirse en partes más pequeñas.
Un checksum que asegura que la información se ha recibido sin error.
Un número de confirmación que indica a la máquina origen qué partes de la información han llegado.
Ventanas deslizantes (Sliding Windows) TCP.
Puertos,
sockets y ventanas deslizantes (sliding windows)
Los números de puerto del protocolo se utilizan para hacer referencia
a la localización de una aplicación o proceso en particular
en cada máquina (en el nivel de aplicación). Al igual que una
dirección IP identifica la dirección de un host de la red, el
número de puerto identifica la aplicación a nivel de transporte,
por lo que proporciona una conexión completa de una aplicación
de un host a una aplicación de otro host. Las aplicaciones y servicios
(como servicios de archivos e impresión o telnet) pueden configurar
hasta 65.536 puertos. Las aplicaciones y servicios TCP/IP suele utilizar los
primeros 1.023 puertos. La Internet Assigned Numbers Authority (IANA) los
ha asignado como estándar, o puertos por omisión. Cualquier
aplicación cliente puede asignar números de puerto dinámicamente
cuando sea necesario. Un puerto y una dirección de nodo forman un socket.
Los servicios y las aplicaciones utilizan sockets para establecer conexiones con otro host. Si las aplicaciones necesitan garantizar la entrega de datos, el socket elige el servicio orientado a conexión (TCP). Si la aplicación no necesita garantizar la entrega de los datos, el socket elige el servicio no orientado a la conexión (UDP).
TCP utiliza una ventana deslizante para transferir datos entre hosts. Regula cuánta información puede pasarse a través de una conexión IP antes de que el host de destino envíe una confirmación. Cada equipo tiene una ventana de envío y de recepción que utiliza a modo de búfer para guardar los datos y hacer más eficiente el proceso de comunicación. Una ventana deslizante permite al equipo origen transmitir una serie de paquetes sin tener que esperar a que le sea confirmada la llegada de cada paquete. Esto permite al equipo de destino que pueda recibir los paquetes en otro orden al enviado, y si no se recibe una confirmación en un período de tiempo, se reenvían los paquetes.
Protocolo
de datagramas de usuario (UDP)
UDP es un protocolo no orientado a la conexión y es el responsable
de la comunicación de datos extremo a extremo. En cambio, a diferencia
de TCP, UDP no establece una conexión. Intenta enviar los datos e intenta
comprobar que el host de destino recibe los datos. UDP se utiliza para enviar
pequeñas cantidades de datos que no necesitan una entrega garantizada.
Aunque UDP utiliza puertos, son distintos de los puertos TCP; así pues,
pueden utilizar los mismos números sin interferirse.
Nivel de aplicación
El nivel de aplicación se corresponde con los niveles de sesión, presentación y aplicación del modelo OSI, y conecta las aplicaciones a la red. Dos interfaces de programación de aplicaciones (API) proporcionan acceso a los protocolos de transporte TCP/IP, los sockets de Windows y NetBIOS.
Interfaz
de sockets de Windows
Los sockets de Windows (WinSock) son una API de red diseñada para facilitar
la comunicación entre aplicaciones y jerarquías de protocolos
TCP/IP diferentes. Se definió para que las aplicaciones que utilizasen
TCP/IP pudiesen escribir en una interfaz estándar. WinSock se deriva
de los sockets originales que creó la API para el sistema operativo
Unix BSD. WinSock proporciona una interfaz común para las aplicaciones
y protocolos que existen cerca de la cima del modelo de referencia TCP/IP.
Cualquier programa o aplicación escrito utilizando la API de WinSock
se puede comunicar con cualquier protocolo TCP/IP, y viceversa.