La ARPANET original se convirtió en Internet. Internet se basó en la idea de que habría múltiples redes independientes con un diseño bastante arbitrario, empezando por ARPANET como red pionera de conmutación de paquetes, pero que pronto incluiría redes de paquetes satélite, redes terrestres de radiopaquetes y otras redes. Internet tal y como la conocemos hoy en día plasma una idea técnica subyacente fundamental, que es la de red de arquitectura abierta. En este enfoque, la selección de una tecnología de redes no la dictaba una arquitectura particular de redes, sino que la podía elegir libremente un proveedor y hacerla trabajar con las demás redes a través de una “metaarquitectura de interredes”. Hasta ese momento solo había un método general para federar redes. Era el método tradicional de conmutación de circuitos, en el que las redes se interconectaban a nivel de circuito, pasando bits individuales de forma síncrona a través de una parte de un circuito completo entre un par de ubicaciones finales. Recordemos que Kleinrock había demostrado en 1961 que la conmutación de paquetes era un método de conmutación más eficiente. Además de la conmutación de paquetes, las interconexiones entre redes con fines especiales eran otra posibilidad. Aunque había otras maneras limitadas de interconectar redes diferentes, era necesario usar una como componente de la otra, y la primera no actuaba como par de la segunda ofreciendo servicios de extremo a extremo.
En una red de arquitectura abierta, las redes individuales se pueden diseñar y desarrollar por separado, cada una con su propia interfaz única, que puede ofrecerse a usuarios y otros proveedores, incluyendo otros proveedores de Internet. Se puede diseñar cada red según el entorno específico y los requisitos de los usuarios de esa red. En general, no existen restricciones sobre el tipo de redes que se pueden incluir o sobre su alcance geográfico, aunque ciertas consideraciones pragmáticas dictaminan lo que tiene sentido ofrecer.
La idea de las redes de arquitectura abierta la introdujo por primera vez Kahn, poco después de llegar a DARPA, en 1972. Su labor era originalmente parte del programa de radiopaquetes, pero posteriormente se convirtió en un programa independiente por derecho propio. En aquel momento, el programa se llamó “Internetting”. La clave para que el sistema de radiopaquetes funcionase era un protocolo de extremo a extremo fiable que pudiera mantener una comunicación efectiva frente a bloqueos y otras interferencias de radio, o soportar cortes intermitentes como los causados cuando se entra en un túnel o el terreno bloquea la señal. Kahn, al principio, se planteó desarrollar un protocolo solo para la red de radiopaquetes, ya que así evitaría tratar con una multitud de diferentes sistemas operativos, y seguir usando NCP.
Sin embargo, NCP no tenía la capacidad de dirigirse a redes (ni a máquinas) que estuvieran más allá de un IMP de destino de ARPANET, de modo que también hacía falta algún cambio en NCP. (Se asumía que ARPANET no se podía cambiar en este sentido). NCP dependía de ARPANET para ofrecer fiabilidad de extremo a extremo. Si se perdía algún paquete, el protocolo (y probablemente las aplicaciones a las que este daba soporte) se pararía de repente. En este modelo, NCP no tenía control de errores de host de extremo a extremo, ya que ARPANET sería la única red, y tan fiable que no haría falta un control de errores por parte de los hosts. Así pues, Kahn decidió desarrollar una nueva versión del protocolo que podría cubrir las necesidades de un entorno de redes de arquitectura abierta. Este protocolo se llamaría más adelante Protocolo de Control de Transmisión/Protocolo de Internet (TCP/IP). Mientras que NCP tendía a actuar como un controlador de dispositivo, el nuevo protocolo se parecería más a un protocolo de comunicaciones.
Cuatro reglas básicas fueron fundamentales en la primera concepción de Kahn:
- Cada red diferente debería mantenerse por sí misma, y no debía ser necesario cambio interno alguno para que esas redes se conectasen a Internet.
- La comunicación se haría en base al mejor esfuerzo. Si un paquete no llegaba a su destino final, se retransmitía poco después desde el origen.
- Se usarían cajas negras para conectar las redes; más adelante, estas cajas negras se llamarían puertas de enlace y enrutadores. Las puertas de enlace no guardarían información acerca de los flujos individuales de paquetes que pasaban por las mismas, manteniendo su sencillez y evitando la complicación de la adaptación y la recuperación a partir de varios modos de error.
- No habría control global a nivel operativo.
Otros problemas clave que había que resolver eran:
- Algoritmos para evitar que los paquetes perdidos impidiesen permanentemente las comunicaciones y permitir que dichos paquetes se retransmitiesen correctamente desde el origen.
- Ofrecer “segmentación” de host a host para que se pudiesen enviar múltiples paquetes desde el origen hasta el destino, según el criterio de los hosts, si las redes intermedias lo permitían.
- Funciones de puerta de enlace para poder reenviar paquetes de manera adecuada. Esto incluía interpretar encabezados IP para enrutar, manejar interfaces, dividir paquetes en partes más pequeñas si era necesario, etc.
- La necesidad de sumas de verificación de extremo a extremo, reensamblaje de paquetes a partir de fragmentos y detección de duplicados.
- La necesidad de un abordaje global
- Técnicas para el control del flujo de host a host.
- Interfaces con los diferentes sistemas operativos
- Había además otras preocupaciones, como la eficacia en la implementación y el rendimiento de las redes, pero estas, en principio, eran consideraciones secundarias.
Kahn comenzó a trabajar en un conjunto orientado a las comunicaciones de principios para sistemas operativos en BBN y documentó algunas de sus ideas iniciales en un memorándum interno de BBN titulado «Principios de comunicación para sistemas operativos«. En este momento, se dio cuenta de que sería necesario conocer los detalles de implementación de cada sistema operativo para tener la oportunidad de integrar cualquier protocolo nuevo de una forma eficaz. Así pues, en la primavera de 1973, tras comenzar el trabajo de lo que sería Internet, pidió a Vint Cerf (que entonces estaba en Stanford) que colaborase con él en el diseño detallado del protocolo. Cerf había estado involucrado de lleno en el diseño y desarrollo original de NCP, y ya tenía conocimiento sobre las interfaces de los sistemas operativos existentes. Así que, armados con el enfoque arquitectónico de Kahn para la parte de comunicaciones y con la experiencia de Cerf en NCP, se unieron para crear lo que se convertiría en TCP/IP.
El toma y daca fue muy productivo y la primera versión escrita7 del enfoque resultante se distribuyó como INWG # 39 en una reunión especial del International Network Working Group (INWG) en la Universidad de Sussex en septiembre de 1973. Posteriormente, se publicó una versión refinada en 1974. El INWG se creó en octubre de 1972 en la Conferencia Internacional de Comunicaciones Informáticas organizada por Bob Kahn y otros, y Cerf fue invitado a presidir este grupo.
Emergieron algunos enfoques básicos de esta colaboración entre Kahn y Cerf:
- La comunicación entre dos procesos consistiría lógicamente en una secuencia larguísima de bytes (los llamaron octetos). Se usaría la posición de un octeto en la secuencia para identificarlo.
- El control de flujo se haría usando ventanas deslizantes y confirmaciones (acks). El destino podría decidir cuándo confirmar, y cada ack devuelta se acumularía para todos los paquetes recibidos hasta ese momento.
- No se concretó la manera exacta en la que el origen y el destino acordarían los parámetros de división de particiones que se usaría. Al principio se usaban los valores predeterminados.
- Aunque en ese momento se estaba desarrollando Ethernet en Xerox PARC, la proliferación de LAN no se imaginaba entonces, y mucho menos la de los ordenadores personales y las estaciones de trabajo. El modelo original era de redes nacionales como ARPANET, y se esperaba que existiese un pequeño número de las mismas. Así pues, se usó una dirección IP de 32 bits, en la que los primeros 8 bits indicaban la red y los 24 bits restantes designaban el host de esa red. Fue evidente que habría que reconsiderar esta suposición, la de que sería suficiente con 256 redes en el futuro inmediato, cuando empezaron a aparecer las LAN a finales de los años 70.
El artículo original de Cerf y Kahn sobre Internet describía un protocolo, llamado TCP, que ofrecía todos los servicios de transporte y reenvío de Internet. La intención de Kahn era que el protocolo TCP soportase una serie de servicios de transporte, desde la entrega secuenciada totalmente fiable de datos (modelo de circuito virtual) hasta un servicio de datagrama, en el que la aplicación hacía un uso directo del servicio de red subyacente, lo que podía implicar la pérdida, la corrupción y la reordenación de paquetes. Sin embargo, el primer intento de implementar TCP produjo una versión que solo permitía circuitos virtuales. Este modelo funcionó bien para aplicaciones de inicio de sesión remoto y transferencia de archivos, pero algunos de los primeros trabajos en aplicaciones de red avanzadas, en particular la voz por paquetes de los años 70, dejaron claro que en algunos casos la pérdida de paquetes no podía ser corregida por TCP, y la aplicación debería encargarse de ella. Esto llevó a reorganizar el TCP original en dos protocolos, el IP simple, que solo dirigía y reenviaba paquetes individuales, y el TCP por separado, que se ocupaba de funciones del servicio como el control de flujos y la recuperación de paquetes perdidos. Para las aplicaciones que no querían los servicios de TCP, se añadió una alternativa llamada Protocolo de datagramas de usuario (UDP) para ofrecer acceso directo a los servicios básicos de IP.
Una de las principales motivaciones iniciales de ARPANET e Internet era compartir recursos, por ejemplo, permitir a los usuarios de las redes de radiopaquetes acceder a sistemas de tiempo compartido conectados a ARPANET. Conectar ambos era mucho más económico que duplicar estos ordenadores tan caros. Sin embargo, aunque la transferencia de archivos y el inicio de sesión remoto (Telnet) eran aplicaciones muy importantes, el correo electrónico ha sido, probablemente, la innovación de aquella época con mayor impacto. El correo electrónico ofreció un nuevo modelo de comunicación entre las personas, y cambió la naturaleza de la colaboración, primero en la creación de la propia Internet (como se comenta a continuación) y después para gran parte de la sociedad.
Se propusieron otras aplicaciones en los primeros tiempos de Internet, incluyendo la comunicación de voz basada en paquetes (el precursor de la telefonía por Internet), varios modelos para compartir archivos y discos y los primeros programas “gusano” que mostraron el concepto de agentes (y, por supuesto, virus). Un concepto clave de Internet es que no se había diseñado solo para una aplicación, sino como una infraestructura general en la que se podían concebir nuevas aplicaciones, como se ilustró más adelante con la aparición de la World Wide Web. Es la naturaleza generalista del servicio que ofrecen TCP e IP la que lo hace posible.