ALPN (Application-Layer Protocol Negotiation) es una extensión del protocolo TLS (Transport Layer Security) que facilita la negociación del protocolo de capa de aplicación entre un cliente y un servidor. En lugar de requerir una conexión separada o un mecanismo fuera de banda para determinar qué protocolo de aplicación se utilizará (por ejemplo, HTTP/1.1, HTTP/2, HTTP/3), ALPN integra esta negociación directamente en el handshake TLS. Durante el ClientHello, el cliente envía una lista de los protocolos de aplicación que soporta, y el servidor responde con el protocolo preferido de esa lista. Esto permite establecer la conexión segura y el protocolo de aplicación en un solo viaje de ida y vuelta (round-trip), optimizando el rendimiento y la eficiencia.
ALPN es fundamental para la adopción y el funcionamiento eficiente de protocolos web modernos. Por ejemplo, es un requisito indispensable para HTTP/2 y HTTP/3 (basado en QUIC). Navegadores web como Chrome, Firefox, Safari y Edge lo utilizan extensamente para negociar la versión de HTTP con los servidores web. Servidores proxy inversos y balanceadores de carga como Nginx, HAProxy y Envoy implementan ALPN para enrutar el tráfico a los backends apropiados basándose en el protocolo negociado. Bibliotecas de red como OpenSSL y BoringSSL proporcionan la funcionalidad subyacente para implementar ALPN en aplicaciones personalizadas, permitiendo a los desarrolladores construir servicios que aprovechen las ventajas de los protocolos de aplicación más recientes.
Para un arquitecto de sistemas, ALPN es crucial para diseñar infraestructuras de red de alto rendimiento y escalables. Permite la coexistencia de múltiples protocolos de aplicación sobre el mismo puerto (típicamente 443 para HTTPS), simplificando la configuración de firewalls y balanceadores de carga. Al habilitar HTTP/2 y HTTP/3, ALPN contribuye directamente a la reducción de la latencia, la multiplexación de solicitudes y la mejora de la eficiencia del uso del ancho de banda, lo cual es vital para aplicaciones con alta concurrencia o requisitos de baja latencia. La decisión de soportar ALPN y qué protocolos ofrecer impacta la compatibilidad con clientes antiguos, el rendimiento general del sistema y la complejidad de la infraestructura. Ignorar ALPN puede resultar en la imposibilidad de adoptar protocolos modernos, limitando la capacidad de optimización del rendimiento y la experiencia del usuario.