He estado experimentando con los parámetros TCP en Linux (con un kernel 3.5). Básicamente con respecto a esta conexión:
Servidor: enlace ascendente Gigabit en el centro de datos, el ancho de banda real (debido a compartir enlaces ascendentes) es de alrededor de 70 MB / s cuando se prueba desde otro centro de datos.
Cliente: LAN local Gigabit conectado a fibra de 200mbit. Obtener un archivo de prueba en realidad alcanza 20 MB / s.
Latencia: alrededor de 50 ms ida y vuelta.
El servidor remoto se utiliza como servidor de archivos para archivos en el rango de 10 a 100 mb. Me di cuenta de que al usar un initcwnd de 10, el tiempo de transferencia para estos archivos se ve muy afectado por el inicio lento de TCP, tardando 3,5 segundos en cargar 10 mb (velocidad máxima alcanzada: 3,3 MB / s) porque comienza lentamente y luego aumenta sin embargo. finaliza antes de alcanzar la velocidad máxima. Mi objetivo es ajustar los tiempos de carga mínimos de esos archivos (por lo que no es el rendimiento bruto más alto o la latencia de ida y vuelta más baja, estoy dispuesto a sacrificar ambos si eso disminuye el tiempo real que lleva cargar un archivo)
Así que intenté un cálculo simple para determinar cuál debería ser el initcwnd ideal, ignorando cualquier otra conexión y el posible impacto en otros. El producto de retraso de ancho de banda es de 200 Mbit / s * 50 ms = 10 Mbit o 1.310.720 bytes. Teniendo en cuenta que initcwnd se establece en unidades de MSS y suponiendo que el MSS es de alrededor de 1400 bytes, esto requerirá una configuración de: 1.310.720 / 1400 = 936
Este valor está muy lejos del valor predeterminado (10 * MSS en Linux, 64 kb en Windows), por lo que no parece una buena idea configurarlo de esta manera. ¿Cuáles son las desventajas esperadas de configurarlo así? P.ej:
- ¿Afectará a otros usuarios de la misma red?
- ¿Podría crear una congestión inaceptable para otras conexiones?
- ¿Inundación-enrutador amortiguadores en algún lugar del camino?
- ¿Aumentar el impacto de pequeñas cantidades de pérdida de paquetes?
fuente
70 MB/s
y no megabits? Solo busco aclaraciones.Respuestas:
Cambiar el initcwnd afectará:
Por supuesto.
No es irrelevante, pero a menos que sean sus enrutadores, me centraría en los problemas que están más cerca de usted.
Claro, puede hacer esto.
El resultado es que esto aumentará el costo de la pérdida de paquetes, tanto intencionales como no intencionales. Cualquier servidor capaz de completar el protocolo de enlace de tres vías es más simple para DOS (cantidades significativas de datos para una baja inversión (cantidad de datos) en).
También aumentará las posibilidades de que un grupo de esos paquetes deba retransmitirse porque se perderá uno de los primeros paquetes de la ráfaga.
fuente
No creo entender completamente lo que estás pidiendo, así que aquí hay un intento de responder:
En primer lugar, lo que intenta hacer solo tiene sentido en el lado emisor y no en el receptor. Es decir, debe cambiar el servidor de archivos y no el receptor. Asumiendo que eso es lo que estás haciendo:
Cambiar initcwnd a (p. Ej.) 10 significa que 10 paquetes desaparecerán inmediatamente. Si todos alcanzan su objetivo, puede terminar con una ventana mucho más grande en el primer RTT debido al inicio lento (el aumento exponencial de la corriente). Sin embargo, con la pérdida de paquetes, el cwnd se reducirá a la mitad y dado que está repleto de 10 paquetes, tendrá una cantidad considerable de retransmisiones, por lo que puede terminar con más problemas de los que piensa.
Si desea probar algo más agresivo y ser de alguna manera "grosero" con otros usuarios de Internet, puede cambiar el algoritmo de control de congestión en el lado del servidor. Diferentes algoritmos manejan cwnd de una manera diferente. Tenga en cuenta que esto afectará a todos los usuarios a menos que su software del lado del servidor cambie esto por conexiones (lo cual dudo mucho). El beneficio aquí es que el algoritmo estará vigente incluso después de la pérdida de paquetes, mientras que initcwnd no tendrá mucho papel.
/ proc / sys / net / ipv4 / tcp_congestion_control es donde cambia el algoritmo de control de congestión.
FWIW para RTTs tan pequeños (50ms) y para archivos medianos o grandes, initcwnd no debería afectar mucho su velocidad promedio. Si no hay pérdida de paquetes, entonces (es decir, la tubería de grasa) cwnd se duplicará en cada RTT. Con RTT = 50 ms en una tubería gruesa, cabrá 20 RTT en el primer segundo, lo que significa que con initcwnd = 2 terminará con cwnd = 2 * 2 ^ 20 después de 1 segundo, lo que apuesto a que es más de lo que puede encargarse de ;-)
fuente