Steamworks SDK v1.44 – Nuevas API de Redes
Durante los últimos años, hemos estado trabajando en la mejora de la calidad de las experiencias multijugador en DOTA y CS:GO al transmitir el tráfico y portándolo en nuestra red troncal. Esto protege a nuestros servidores de ataques de denegación de servicio y brinda a los jugadores de todo el mundo una conexión de baja latencia y alta calidad.
Hoy lanzamos las API que hacen que este servicio esté disponible para todos los asociados de Steam. Esto te ofrece:
- Acceso a nuestra red, brindando a tus jugadores protección contra ataques, NAT 100 % confiable y con mejor conectividad.
- Herramientas para estimar instantáneamente el ping entre dos hosts arbitrarios sin enviar ningún paquete.
- Un protocolo UDP cifrado de alta calidad de extremo a extremo y confiable.
Estas actualizaciones están disponibles como parte del lanzamiento de Steamworks SDK v1.44, ya disponible.
La cantidad de mejora varía considerablemente según la región. Aquí tienes un desglose por región.
Acceso a la red de Valve
Valve tiene 128 servidores desplegados en 30 puntos de presencia de red en todo el mundo y varios terabits de ancho de banda. Usando estas API, puedes aprovechar esta infraestructura. Retransmitir el tráfico de tu juego a través de nuestra red te brinda varios beneficios.
Primero, hace anónimo el tráfico, protegiendo tanto a los servidores de juegos como a los clientes de los ataques de denegación de servicio. Además, dado que la aplicación cliente toma las decisiones de enrutamiento de forma dinámica, si un nodo de transmisión no está disponible, cada cliente puede cambiar a otro nodo diferente en segundos, tal vez en un punto de presencia diferente si es necesario. Para que un atacante interrumpa el juego, debe ser un ataque lo suficientemente grande como para sobrecargar a múltiples centros de datos.
En segundo lugar, las aplicaciones cliente pueden seleccionar una ruta que sale de la internet pública y se va a nuestros enlaces dedicados lo antes posible. En nuestra red troncal podemos garantizar que el enrutamiento sea óptimo, ya que estamos conectados con más de 2500 proveedores de servicios de internet. También priorizamos el tráfico de juegos sensible a la latencia sobre las descargas HTTP de contenido, algo que podemos permitirnos porque el tráfico de juegos constituye un porcentaje relativamente pequeño de nuestra utilización general del ancho de banda. Y en nuestra red troncal, una repentina oleada de tráfico no relacionado con los juegos no degradará la experiencia.
Finalmente, al transmitir el tráfico en el software, a menudo podemos mejorar el tiempo de ping.
¿Cómo puede una ruta con repetidores ser más rápida que una ruta directa?
Internet es una red de paquetes conmutados; una ruta “directa” como tal no existe. Cuando un paquete se envía “directamente” a la dirección IP del host remoto, toma la ruta determinada por los protocolos de enrutamiento IP estándar. ¡Esta ruta a menudo no es óptima! Nuestro protocolo pone a la aplicación cliente a cargo de las decisiones de enrutamiento. El cliente considera cada punto de presencia de retransmisión y determina la latencia de extremo a extremo en esta ruta. A continuación, selecciona la ruta con la latencia más baja.
Ofrecer a los clientes su elección de ruta produce a menudo una diferencia sorprendente. Esto está basado en una muestra de conexiones de 16 millones desde direcciones IP de clientes únicas a servidores dedicados en nuestros centros de datos:
- El 43 % de los jugadores experimentaron una mejora en su tiempo de ping.
- El 25 % de los jugadores experimentaron una mejora de 10 ms o más.
- El 10 % de los jugadores experimentó una mejora de 40 ms o más.
Herramientas de estimación de ping
La API de ISteamNetworkingUtils incluye herramientas para estimar pings, impulsados por la red de retransmisión. Al medir los tiempos de ping a muchas retransmisiones diferentes, generamos “coordenadas” que describen la ubicación del host en internet. Dados cualquiera de estos dos conjuntos de coordenadas, podemos generar una estimación de alta calidad para el tiempo de ping entre dos hosts arbitrarios, sin enviar ningún paquete. Esta es una función indispensable para el emparejamiento y la selección de pares.
Protocolo de código abierto de punto a punto
Además de las funciones que ofrece la red de retransmisión y la red troncal de Valve a las que pueden acceder los asociados de Steam, la API de SteamnetworkingSockets está disponible también una biblioteca de transporte de propósito general para juegos, con las siguientes características:
Fragmentación, reensamblaje y retransmisión. En tu código, envías y recibes “mensajes”, que pueden ser más pequeños o más grandes que un paquete de red. El protocolo combina múltiples mensajes pequeños en un solo paquete por eficiencia, fragmenta mensajes grandes en múltiples paquetes, los vuelve a ensamblar en el lado del receptor y retransmite segmentos de mensajes confiables que se eliminan debido a la pérdida de paquetes.
Cifrado y autenticación. La seguridad no es una funcionalidad opcional o de última hora para un juego en red moderno, pues una vulnerabilidad puede destruir la experiencia de tus jugadores. Hacer criptografía correctamente es muy difícil. Tomamos estándares de vanguardia para transmisiones confiables y los aplicamos a los mensajes no confiables utilizados por los juegos. La funcionalidad básica del cifrado protegerá contra la intercepción de datos casual. Para protegerse contra el tipo de ataque que intercepta y modifica los datos se requiere una tercera parte confiable que emita los certificados o bien distribuir un secreto compartido. Steam hace esto para sus propios juegos; de modo que para que un atacante pueda escuchar o modificar paquetes, debe estar dentro del proceso del juego, donde VAC puede detectarlo.
Más por venir
Esta es la primera de una serie de actualizaciones destinadas a mejorar la experiencia de juego en red para los asociados de Steam. Específicamente, mientras que esta actualización ha mejorado principalmente la red entre pares, también estamos trabajando para hacer que las soluciones que hemos desarrollado para nuestros propios servidores dedicados estén disponibles para los asociados. Haznos saber si tienes alguna pregunta y echa un vistazo a nuestros planes para el futuro del proyecto de código abierto en github.