¿Qué opciones de socket se usan con más frecuencia para la optimización de TCP / IP?

Por lo general, en lo que respecta a setsockopt (2), generalmente se establecería:

  • SO_REUSEADDR (man setsockopt): permite reutilizar sockets cerrados ya asignados, lo que aumenta de manera efectiva el límite de conexión simultánea
  • TCP_NODELAY (man tcp): deshabilita el algoritmo de Nagle
  • TCP_CORK (Linux) / TCP_NOPUSH (BSD) (man tcp) – ver abajo

Esa última opción es buena para cuando tiene un protocolo transaccional, por ejemplo, HTTP, porque guarda todo lo que está en el núcleo para enviarlo en la menor cantidad de paquetes posible. Sin embargo, si está buscando la latencia más baja (por ejemplo, SSH), no querrá establecer esa opción.

Para los sockets del servidor, también desea aumentar el número de SYN TCP pendientes permitidos al pasar un valor entero “backlog” entero más grande a la llamada listen (2). Por lo general, 1024 es común, pero dependiendo de cuántos intentos de conexión entrante espere y cuánto tiempo lleve reparar esas conexiones, es posible que desee ajustar eso en consecuencia. He visto a muchas personas y bibliotecas usar ‘5’, que es demasiado bajo para el uso de producción en mi experiencia.

Agregaría SO_SNDBUF / SO_RCVBUF a la lista.

Dependiendo de la naturaleza de su aplicación, las restricciones de memoria y el producto de retraso de ancho de banda de una conexión TCP, el ajuste mejora la velocidad de transferencia.