Descubre cómo Bob Kahn ayudó a moldear TCP/IP, por qué las redes por paquetes fiables importan y cómo su diseño sigue soportando aplicaciones, APIs y servicios en la nube.

La mayoría de las aplicaciones parecen “instantáneas”: tocas un botón, un feed se actualiza, se completa un pago, empieza un vídeo. Lo que no ves es el trabajo que ocurre debajo para mover pequeños trozos de datos a través de Wi‑Fi, redes móviles, routers domésticos y centros de datos—a menudo entre varios países—sin que tengas que pensar en las partes complicadas intermedias.
Esa invisibilidad es la promesa que entrega TCP/IP. No es un producto único ni una característica de la nube. Es un conjunto de reglas compartidas que permite que dispositivos y servidores se comuniquen de una forma que usualmente se siente fluida y confiable, incluso cuando la red está ruidosa, congestionada o falla parcialmente.
Bob Kahn fue una de las personas clave detrás de que eso fuera posible. Junto a colaboradores como Vint Cerf, Kahn ayudó a dar forma a las ideas centrales que se convirtieron en TCP/IP: un “lenguaje” común para redes y un método para entregar datos de una manera en que las aplicaciones puedan confiar. Sin necesidad de exagerar: este trabajo importó porque convirtió conexiones poco fiables en algo sobre lo que el software podía construir con confianza.
En lugar de enviar un mensaje entero como un flujo continuo, la conmutación por paquetes lo divide en piezas pequeñas llamadas paquetes. Cada paquete puede tomar su propio camino hasta el destino, como sobres separados que pasan por distintas oficinas postales.
Desgranaremos cómo TCP crea la sensación de fiabilidad, por qué IP deliberadamente no promete perfección y cómo el enfoque en capas mantiene el sistema comprensible. Al final, podrás imaginar qué ocurre cuando una app llama a una API—y por qué estas ideas de hace décadas siguen impulsando los servicios modernos en la nube.
Las primeras redes de computadoras no nacieron como “Internet”. Se construyeron para grupos concretos con objetivos concretos: una red universitaria aquí, una red militar allá, una red de laboratorio de investigación en otro sitio. Cada una podía funcionar bien internamente, pero muchas usaban hardware distinto, formatos de mensajes distintos y reglas diferentes para cómo debía viajar la información.
Eso creó una realidad frustrante: aunque dos computadoras estuvieran “en red”, podían no ser capaces de intercambiar información. Es un poco como tener muchos sistemas ferroviarios con ancho de vía distinto y señales que significan cosas diferentes. Puedes mover trenes dentro de un sistema, pero cruzar a otro es engorroso, caro o imposible.
El reto clave de Bob Kahn no era simplemente “conectar la computadora A con la B”. Era: ¿cómo conectas redes entre sí de modo que el tráfico pueda pasar por múltiples sistemas independientes como si fueran uno más grande?
Eso es lo que significa “internetworking”: construir un método para que los datos salten de una red a la siguiente, incluso cuando esas redes están diseñadas de forma diferente y las gestionan organizaciones distintas.
Para que el internetworking funcionara a escala, todos necesitaban un conjunto común de reglas—protocolos—que no dependieran del diseño interno de ninguna red en particular. Esas reglas también tenían que reflejar limitaciones reales:
TCP/IP se convirtió en la respuesta práctica: un “acuerdo” compartido que permitió que redes independientes se interconectaran y aun así movieran datos con suficiente fiabilidad para aplicaciones reales.
Bob Kahn es conocido como uno de los arquitectos clave de las “reglas de la carretera” de Internet. En los años 70, mientras trabajaba con DARPA, ayudó a que la investigación en redes pasara de ser un experimento ingenioso a algo que podía conectar muchos tipos distintos de redes—sin obligarlas a usar el mismo hardware, cableado o diseño interno.
ARPANET demostró que las computadoras podían comunicarse por enlaces conmutados por paquetes. Pero estaban surgiendo otras redes: sistemas basados en radio, enlaces por satélite y más redes experimentales—cada una con sus peculiaridades. El foco de Kahn fue la interoperabilidad: permitir que un mensaje viajara a través de múltiples redes como si fuera una única red.
En lugar de construir una red “perfecta”, impulsó un enfoque donde:
Junto con Vint Cerf, Kahn co‑diseñó lo que se convirtió en TCP/IP. Un resultado duradero fue la separación limpia de responsabilidades: IP gestiona direccionamiento y reenvío entre redes, mientras que TCP se encarga de la entrega fiable para las aplicaciones que la necesitan.
Si alguna vez has llamado a una API, cargado una página web o enviado logs desde un contenedor a un servicio de monitorización, dependes del modelo de internetworking que Kahn promovió. No tienes que preocuparte de si los paquetes cruzan Wi‑Fi, fibra, LTE o un backbone de nube. TCP/IP hace que todo parezca un sistema continuo—para que el software pueda centrarse en funciones, no en el cableado.
Una de las ideas más inteligentes detrás de TCP/IP es el encapado por capas: en lugar de construir un gran sistema de red que lo haga todo, apilas piezas más pequeñas donde cada capa hace bien un trabajo concreto.
Esto importa porque las redes no son todas iguales. Diferentes cables, radios, routers y proveedores pueden interoperar cuando aceptan un conjunto reducido de responsabilidades claras.
Piensa en IP (Internet Protocol) como la parte que responde: ¿A dónde va esto y cómo lo acercamos a ese lugar?
IP proporciona direcciones (para identificar máquinas) y enrutamiento básico (para que los paquetes salten de red en red). Importante: IP no intenta ser perfecto. Se centra en mover paquetes hacia delante, paso a paso, aunque la ruta cambie.
Luego TCP (Transmission Control Protocol) se sitúa sobre IP y responde: ¿Cómo logramos que esto se sienta como una conexión confiable?
TCP maneja el trabajo de “fiabilidad” que las aplicaciones suelen querer: ordenar datos correctamente, detectar piezas faltantes, reintentar cuando hace falta y regular la entrega para que el emisor no abrume al receptor ni a la red.
Una forma útil de imaginar la división es con el sistema postal:
No pides la garantía de entrega a la dirección; construyes esa seguridad encima.
Al separar responsabilidades, puedes mejorar una capa sin rediseñar todo lo demás. Nuevas redes físicas pueden transportar IP, y las aplicaciones pueden confiar en el comportamiento de TCP sin necesitar entender cómo funciona el enrutamiento. Esa división limpia es una de las razones principales por las que TCP/IP se convirtió en la base invisible compartida bajo casi todas las apps y APIs que usas.
La conmutación por paquetes es la idea que hizo prácticas las redes grandes: en vez de reservar una línea dedicada para todo tu mensaje, lo cortas en piezas pequeñas y envías cada una independientemente.
Un paquete es un pequeño conjunto de datos con una cabecera (quién lo envía, a quién va y otra información de enrutamiento) más una porción del contenido.
Dividir los datos en fragmentos ayuda porque la red puede:
Aquí empieza el “caos”. Los paquetes de la misma descarga o llamada API pueden tomar rutas diferentes por la red, según lo ocupado o disponible que esté en ese momento. Eso significa que pueden llegar fuera de orden: el paquete #12 puede aparecer antes que el #5.
La conmutación por paquetes no intenta evitarlo. Prioriza pasar paquetes con rapidez, aunque el orden de llegada sea desordenado.
La pérdida de paquetes no es rara y no siempre es culpa de alguien. Causas comunes incluyen:
La decisión de diseño clave es que la red pueda ser imperfecta. IP se centra en encaminar paquetes lo mejor que pueda, sin prometer entrega u orden. Esa libertad es lo que permite que las redes escalen—y por eso existen capas superiores (como TCP) para ordenar el caos.
IP entrega paquetes en modo “mejor esfuerzo”: algunos pueden llegar tarde, fuera de orden, duplicados o no llegar. TCP se sitúa encima y crea algo que las aplicaciones pueden confiar: un único flujo ordenado y completo de bytes—el tipo de conexión que esperas al subir un archivo, cargar una página web o llamar a una API.
Cuando se dice que TCP es “fiable”, normalmente se refiere a:
TCP divide tus datos en fragmentos y los etiqueta con números de secuencia. El receptor devuelve acknowledgments (ACKs) para confirmar lo recibido.
Si el emisor no ve un ACK a tiempo, asume que algo se perdió y realiza una retransmisión. Esta es la ilusión central: aunque la red pueda descartar paquetes, TCP sigue intentando hasta que el receptor confirme la recepción.
Suenan parecido pero solucionan problemas distintos:
Juntos, ayudan a que TCP sea rápido sin ser imprudente.
Un timeout fijo fallaría en redes lentas y rápidas. TCP ajusta continuamente su timeout basándose en el tiempo de ida y vuelta medido. Si las condiciones empeoran, espera más antes de reenviar; si todo se acelera, responde con mayor rapidez. Esta adaptación es la razón por la que TCP sigue funcionando en Wi‑Fi, redes móviles y enlaces de larga distancia.
Una de las ideas más importantes detrás de TCP/IP es el principio end-to-end: coloca las “inteligencias” en los extremos de la red (los endpoints) y deja el núcleo de la red relativamente simple.
En términos prácticos, los extremos son los dispositivos y programas que realmente se preocupan por los datos: tu teléfono, tu portátil, un servidor y los sistemas operativos y aplicaciones que corren en ellos. El núcleo de la red—routers y enlaces intermedios—se centra principalmente en mover paquetes.
En lugar de tratar de hacer a cada router “perfecto”, TCP/IP acepta que el medio será imperfecto y permite que los endpoints manejen las partes que requieren contexto.
Mantener el núcleo más simple facilitó la expansión de Internet. Nuevas redes pudieron unirse sin exigir que cada dispositivo intermedio entendiera las necesidades de cada aplicación. Los routers no necesitan saber si un paquete forma parte de una videollamada, una descarga o una petición API: simplemente lo reenvían.
En los endpoints normalmente manejas:
En la red, mayormente manejas:
Pensar end-to-end escala bien, pero empuja complejidad hacia afuera. Sistemas operativos, librerías y aplicaciones se vuelven responsables de “hacer que funcione” sobre redes imperfectas. Eso ofrece flexibilidad, pero también significa que bugs, timeouts mal configurados o reintentos agresivos pueden crear problemas visibles para el usuario.
IP (Internet Protocol) hace una promesa simple: intentará mover tus paquetes hacia su destino. Eso es todo. Sin garantías sobre si un paquete llega, llega una sola vez, llega en orden o llega en un tiempo concreto.
Puede sonar como una falla—hasta que miras lo que Internet necesitaba para convertirse en lo que es: una red global formada por muchas redes más pequeñas, de distintos propietarios y en constante cambio.
Los routers son los “directores de tráfico” de IP. Su trabajo principal es el reenvío: cuando llega un paquete, el router mira la dirección de destino y elige el siguiente salto que parece mejor en ese momento.
Los routers no siguen una conversación como lo haría un operador telefónico. Generalmente no reservan capacidad para ti y no esperan confirmaciones de entrega. Al mantener a los routers enfocados en el reenvío, el núcleo de la red se mantiene simple—y puede escalar a un número enorme de dispositivos y conexiones.
Las garantías son caras. Si IP intentara garantizar entrega, orden y tiempo para cada paquete, cada red del planeta tendría que coordinar estrechamente, mantener mucho estado y recuperarse de fallos de la misma forma. Esa carga de coordinación frenaría el crecimiento y haría las caídas más graves.
En cambio, IP tolera el desorden. Si un enlace falla, un router puede enviar paquetes por otra ruta. Si un camino se congestiona, los paquetes pueden retrasarse o perderse, pero el tráfico a menudo puede continuar por rutas alternativas.
El resultado es resiliencia: Internet puede seguir funcionando aunque partes de ella fallen o cambien—porque la red no tiene que ser perfecta para ser útil.
Cuando haces fetch() a una API, pulsas “Guardar” o abres un websocket, no estás “hablando con el servidor” en un flujo único y suave. Tu app entrega datos al sistema operativo, que los fragmenta en paquetes y los envía a través de muchas redes separadas—cada salto tomando sus propias decisiones.
Una sorpresa común: puedes tener gran throughput y aun así experimentar una UI lenta porque cada petición espera rondas de ida y vuelta.
TCP reintenta paquetes perdidos, pero no sabe qué significa “demasiado tiempo” para tu experiencia de usuario. Por eso las aplicaciones añaden:
Los paquetes pueden retrasarse, reordenarse, duplicarse o perderse. La congestión puede aumentar la latencia. Un servidor puede responder pero la respuesta no llegarte. Eso aparece como tests inestables, 504 aleatorios o “funciona en mi máquina”. A menudo el código está bien—el problema está en el camino entre máquinas.
Las plataformas en la nube pueden parecer un tipo totalmente nuevo de computación: bases de datos gestionadas, funciones serverless, escalado “infinito”. Debajo, tus peticiones siguen montadas sobre los mismos cimientos TCP/IP que Bob Kahn ayudó a poner en marcha: IP mueve paquetes entre redes, y TCP (o a veces UDP) modela cómo las aplicaciones perciben esa red.
La virtualización y los contenedores cambian dónde corre el software y cómo se empaqueta:
Pero esos son detalles de despliegue. Los paquetes siguen usando direccionamiento IP y enrutamiento, y muchas conexiones siguen dependiendo de TCP para entrega ordenada y fiable.
Las arquitecturas comunes en la nube se construyen con bloques de red familiares:
Incluso cuando nunca “ves” una dirección IP, la plataforma la está asignando, enrutando paquetes y rastreando conexiones detrás de escena.
TCP puede recuperar paquetes perdidos, reordenar entregas y ajustarse a la congestión—pero no puede prometer lo imposible. En sistemas en la nube, la fiabilidad es un esfuerzo conjunto:
Por eso plataformas que generan y despliegan apps completas automáticamente aún dependen de los mismos fundamentos. Por ejemplo, Koder.ai puede ayudarte a crear rápidamente una app React con backend en Go y PostgreSQL, pero en el momento en que esa app habla con una API, una base de datos o un cliente móvil, vuelves al terreno de TCP/IP: conexiones, timeouts, reintentos y todo lo demás.
Cuando los desarrolladores dicen “la red”, a menudo eligen entre dos transportes principales: TCP y UDP. Ambos se sitúan sobre IP, pero hacen concesiones muy diferentes.
TCP encaja bien cuando necesitas que los datos lleguen en orden, sin huecos y prefieres esperar a equivocarte. Piensa: páginas web, APIs, transferencias de archivos, conexiones a bases de datos.
Por eso gran parte de Internet cotidiana corre sobre TCP—HTTPS va sobre TCP (vía TLS) y la mayoría del software request/response asume el comportamiento de TCP.
La pega: la fiabilidad de TCP puede añadir latencia. Si falta un paquete, los posteriores pueden retenerse hasta que se rellene el hueco ("head-of-line blocking"). Para experiencias interactivas, esa espera puede sentirse peor que un fallo ocasional.
UDP es más cercano a “envía un mensaje y espera que llegue”. No hay orden, retransmisión ni control de congestión en la capa UDP.
Los desarrolladores eligen UDP cuando el tiempo importa más que la perfección, como en audio/vídeo en vivo, juegos o telemetría en tiempo real. Muchas de estas apps implementan su propia fiabilidad ligera (o ninguna) según lo que realmente noten los usuarios.
Un ejemplo moderno importante: QUIC corre sobre UDP, permitiendo a las aplicaciones un establecimiento de conexión más rápido y evitando algunos cuellos de botella de TCP—sin requerir cambios en la red IP subyacente.
Elige en función de:
TCP suele describirse como “fiable”, pero eso no significa que tu app siempre se sienta fiable. TCP puede recuperarse de muchos problemas de red, sin embargo no puede prometer baja latencia, throughput consistente o buena experiencia de usuario cuando la ruta entre dos sistemas es inestable.
Pérdida de paquetes obliga a TCP a retransmitir datos. La fiabilidad se mantiene, pero el rendimiento puede hundirse.
Alta latencia (RTT largo) hace más lenta cada interacción pedido/respuesta, incluso si no hay pérdidas.
Bufferbloat ocurre cuando routers u OS llenan colas con demasiado dato. TCP ve menos pérdidas, pero los usuarios perciben enormes retardos y “lag”.
MTU mal configurada puede causar fragmentación o desaparición de paquetes (blackholing), provocando fallos confusos que parecen timeouts aleatorios.
En lugar de un claro “error de red”, a menudo verás:
Estos síntomas son reales, pero no siempre causados por tu código. A menudo son TCP cumpliendo su función—retransmitiendo, retrocediendo y esperando—mientras el reloj de la aplicación sigue corriendo.
Comienza con una clasificación básica: ¿el problema es mayormente pérdida, latencia o cambios de ruta?
Si estás construyendo rápido (por ejemplo, prototipando un servicio en Koder.ai y desplegándolo con hosting y dominios personalizados), vale la pena incluir estas bases de observabilidad en la lista de comprobación inicial—porque las fallas de red se muestran primero como timeouts y reintentos, no como excepciones limpias.
Asume que las redes se comportan mal. Usa timeouts, reintentos con backoff exponencial y haz que las operaciones sean idempotentes para que los reintentos no cobren doble, creen duplicados o corrompan el estado.
TCP/IP es un conjunto compartido de reglas de red que permite que distintas redes se interconecten y aún así muevan datos de forma predecible.
Importa porque convierte enlaces heterogéneos e poco fiables (Wi‑Fi, LTE, fibra, satélite) en algo utilizable por software: las aplicaciones pueden asumir que pueden enviar bytes y recibir respuestas sin conocer los detalles físicos de la red.
Bob Kahn impulsó la idea de la “internetworking”: conectar redes entre sí sin obligarlas a compartir el mismo hardware o diseño interno.
Con colaboradores (principalmente Vint Cerf), su trabajo modeló la separación donde IP se encarga del direccionamiento y enrutamiento entre redes y TCP aporta la fiabilidad que necesitan las aplicaciones encima.
La conmutación por paquetes divide un mensaje en pequeños paquetes que pueden viajar de forma independiente.
Ventajas:
IP se centra en una tarea: encaminar paquetes hacia una dirección de destino. No garantiza entrega, orden ni tiempo.
Ese modelo de “mejor esfuerzo” escala a nivel global porque los routers pueden mantenerse simples y rápidos, y la red puede seguir funcionando aunque los enlaces fallen, las rutas cambien o se incorporen nuevas redes.
TCP convierte los paquetes de mejor esfuerzo de IP en un flujo ordenado de bytes que las aplicaciones pueden usar.
Lo hace mediante:
Resuelven problemas distintos:
En la práctica, para buen rendimiento hacen falta ambos: un emisor rápido debe respetar tanto al receptor como a la red.
El “layering” (capas) separa responsabilidades para que cada parte pueda evolucionar de forma independiente.
Para los desarrolladores, esto significa que puedes construir APIs sin rediseñar la aplicación para cada tipo de red.
El principio de extremo a extremo mantiene el núcleo de la red (routers) relativamente simple y coloca la “inteligencia” en los extremos.
Implicación práctica: las aplicaciones y los sistemas operativos se encargan de la fiabilidad, timeouts, reintentos y cifrado (a menudo vía TLS), porque la red no puede adaptar su comportamiento para cada aplicación específica.
Latencia es el tiempo de ida y vuelta; perjudica patrones ‘charlistas’ (muchas peticiones pequeñas, redirecciones, llamadas repetidas).
Throughput (ancho de banda) es bytes por segundo; afecta transferencias grandes (subidas, imágenes, backups).
Consejos prácticos:
Elige según lo que necesites:
Regla práctica: si tu app es request/response y prioriza corrección, TCP (o QUIC vía HTTP/3) suele ser el punto de partida.