El protocolo TCP/IP permite que los ordenadores de todos los tamaños, de arquitecturas diferentes, que ejecutan sistemas operativos totalmente diferentes, puedan comunicarse unos con otros. Es bastante sorprendente, porque su uso ha superado con creces sus previsiones originales. Lo que comenzó en la década de 1960 como un proyecto financiado por el gobierno para la investigación sobre conmutación de paquetes en red, se convirtió, en la década de 1990, en la forma más utilizada de la creación de redes entre computadoras. Es realmente un sistema abierto en el que la definición del conjunto de protocolos y muchas de sus implementaciones están disponibles al público con poco o ningún costo. Constituye la base para lo que llamamos Internet, una red de área amplia (WAN) de más de un millón de computadoras que, literalmente, se extiende por el todo mundo.

Los Protocolos de red se desarrollan normalmente en capas, cada capa es responsable de una faceta diferente de las comunicaciones. Una suite de protocolos, como TCP/IP, es la combinación de diferentes protocolos en diferentes capas. TCP/IP se considera normalmente como un sistema de 4-capas:

  1. La capa de enlace (link), a veces llamada la capa de enlace de datos o de la capa de interfaz de red, que normalmente incluye el controlador de dispositivo en el sistema operativo y la correspondiente tarjeta de interfaz de red en el equipo. Juntos manejan todos los detalles de hardware de la interfaz física con el cable (o cualquier tipo de medios de comunicación se está utilizando)
  2. La capa de red –network– (a veces llamada la capa de Internet) se encarga de la circulación de los paquetes por la red. El enrutamiento de los paquetes, por ejemplo, tiene lugar aquí. El IP (Internet Protocol), ICMP (Internet Control Message Protocol) e IGMP (Internet Group Management Protocol) proporcionan la capa de red en el protocolo TCP/IP.
  3. La capa de transporte (transport) proporciona un flujo de datos entre dos ordenadores, por encima de la capa de aplicación. En el protocolo TCP/IP se tienen dos protocolos de transporte muy diferentes: TCP (Transmission Control Protocol) y UDP (User Datagram Protocol). TCP proporciona un flujo fiable de datos entre dos hosts. Se ocupa de cosas tales como dividir los datos que se le pasan a la aplicación en tramas de tamaño adecuado para la capa de red a continuación, reconociendo los paquetes recibidos, el establecimiento de tiempos de espera para asegurarse que el otro extremo reconoce los paquetes que se envían, y así sucesivamente. Debido a que este flujo confiable de datos es proporcionado por la capa de transporte, la capa de aplicación puede pasar por alto todos estos detalles. UDP, en cambio, ofrece un servicio mucho más simple de la capa de aplicación. Simplemente envía paquetes de datos llamados datagramas de un host a otro, pero no hay garantía de que los datagramas lleguen al otro extremo. Toda la fiabilidad deseada hay que añadirla en la capa de aplicación.
  4. La capa de aplicación (application) se encarga de los detalles de cada aplicación en particular. Hay muchas aplicaciones comunes de TCP/IP que casi todas las implementaciones del protocolo proporcionan:
  • Telnet para acceso remoto,
  • FTP, File Transfer Protocol, para trasferencia de archivos,
  • SMTP, Simple Mail Transfer Protocol, para correo electrónico,
  • SNMP, Simple Network Management Protocol, para administración vía red.

Servicios TCP

A pesar de que TCP y UDP utilizan la misma capa de red (IP), TCP ofrece un servicio totalmente diferente a la capa de aplicación que UDP no. TCP proporciona una conexión-orientada, confiable, al de flujo de bytes.

El termino conexión-orientada significa que dos aplicaciones que utilizan TCP (habitualmente se considera un cliente y un servidor) deben establecer una conexión TCP entre sí, antes de que puedan intercambiar datos. La analogía típica es marcar un número de teléfono, esperando que la otra parte conteste el teléfono y decir “hola“, y luego preguntar quien está llamando.
TCP proporciona la confiabilidad de la siguiente manera:
Empaqueta los datos del usuario en segmentos, establece un tiempo de espera al momento que envía los datos, reconoce los datos recibidos por el otro extremo, reordena los datos, descarta datos duplicados, dispone de extremo a extremo de control de flujo, y calcula y verifica un control end-to-end.
Una conexion TCP tiene dos puntas identificadas cada una por un par de elementos IP y puerto: la dirección IP y el número de puerto local, y la dirección IP y el número de puerto externo. La combinación de una dirección IP y un número de puerto es llamado un socket. Cada vez que se termina una relación, un extremo debe mantener la administración de la conexión, el estado (TIME_WAIT) maneja esta situación.
Existen seis bits de banderas (flags) en la cabecera TCP. Uno o más de ellos se puede activar al mismo tiempo:
  1. URG El puntero urgente (urgent pointer) es válido.
  2. ACK el número de confirmación (acknowledgment number) es válido.
  3. PSH El receptor debe pasar estos datos a la aplicación tan pronto como sea posible.
  4. RST Conexión perdida (reset).
  5. SYN Sincronizar números de secuencia para iniciar una conexión.
  6. FIN El remitente ha terminado el envío de datos.
Cuando una nueva conexión es establecida, el flag SYN es activado. El campo número de secuencia contiene el número de secuencia inicial (ISN) elegido por el host para esta conexión. El número de secuencia del primer byte de los datos enviados por este host será el ISN más uno, porque el flag SYN consume un número de secuencia.
Este número de secuencia es un número de 32 bits generado aleatoriamente por el host. Sirve para comprobar que ningún segmento se ha perdido, y que llegan en el orden correcto. Su significado varía dependiendo del valor de SYN:
  • Si el flag SYN está activo (1), entonces este campo indica el número inicial de secuencia (con lo cual el número de secuencia del primer byte de datos será este número de secuencia más uno).
  • Si el flag SYN no está activo (0), entonces este campo indica el número de secuencia del primer byte de datos.
Dado que cada byte que se intercambia es numerado, el número de confirmación (acknowledgment number) contiene el siguiente número de secuencia que el emisor espera recibir como acuse de recibo. Esto es, por tanto, el número de secuencia más 1 de los últimos bytes de datos que se han recibido correctamente. Este campo sólo es válido si el flag ACK está activo.
TCP proporciona un servicio full-duplex para la capa de aplicación. Esto significa que los datos puedan fluir en cada sentido, independiente de la otra dirección. Por lo tanto, cada extremo de una conexión debe mantener un número de secuencia del flujo de datos en cada dirección.

Establecimiento de protocolo de conexión

Para establecer una conexión TCP:
  1. El solicitante (normalmente llamado el cliente) envía un segmento SYN especificando el número de puerto del servidor al que quiere conectarse, y su número de secuencia inicial (ISN, 1415531521, por ejemplo). Este es el segmento 1.
  2. El servidor responde con su propio segmento SYN que contiene su número de secuencia inicial (segmento 2). El servidor también reconoce el SYN del cliente por el flag ACK del ISN del cliente más uno. Un SYN consume un número de secuencia.
  3. El cliente debe reconocer este SYN del servidor por el flag ACK del ISN del servidor más uno (segmento 3).

Estos tres segmentos completan el establecimiento de la conexión. Esto es a menudo llamado el  saludo de tres vías (three-way handshake).

Espero les sirva.