Soy consciente de que esta respuesta está simplificada y no es tan explícita como me gustaría, así que si tienes dudas sobre algún paso, ¡pregúntalo!
Desplazándose un poco hacia abajo después de abrir este archivo en Wireshark vemos algunos fotogramas en diferente color. Parece muy malo, ¿verdad? Bueno, no es tan malo. Espera, ya llegaremos a eso.
Comprobando el paquete SYN (trama 37) vemos SACK y Window Scaling en las opciones TCP. Bien. Lo mismo en el SYN/ACK (frame 38), SACK y Windows scaling. Impresionante. No veo nada raro con respecto a SACK.
Una estimación del RTT sin carga es el tiempo entre el paquete SYN y el primer ACK (trama 39). Es de unos 9,3 ms, lo que coincide con tus conclusiones. Observa que el tiempo entre SYN/ACK y ACK (tramas 38 y 39) es mucho menor que entre SYN y SYN/ACK (37 y 38). Esto significa que este archivo de captura está tomado en el receptor, y para ver por qué eso no es lo ideal, tendremos que volver a la escuela.
Entre el emisor y el receptor hay una parte del recorrido de la red que es la más pequeña, lo que limita el ancho de banda. La estimación del RTT que acabamos de obtener del handshake nos da una estimación de la longitud de este camino de red. Una medida de cuántos paquetes podemos meter en esta tubería es el Capacidad de la tubería o el producto de retardo del ancho de banda - PC [bits] = R [bits/s] * RTT [s], donde R es el menor ancho de banda. La capacidad de la tubería es entonces una medida de volumen.
Imagina una manguera de jardín. Su volumen se mide se define por su longitud y su anchura de la misma manera ¿verdad? Para obtener el máximo de agua, es necesario que esté completamente llena de agua, de lo contrario habrá espacios de aire que limitarán el flujo de agua. En caso de que consigamos llenarlo completamente, podría desbordarse. Podemos utilizar un cubo para no mojar el suelo, y si el cubo se desborda no afecta al flujo de agua.
Resulta que es exactamente lo mismo en la ruta de la red. Tenemos que llenar la tubería... En otras palabras, la capacidad de la tubería es el menor número de bytes en vuelo (la cantidad de agua que tenemos en la tubería + el cubo) entre el emisor y el receptor que utiliza completamente el menor ancho de banda (no provoca huecos de aire). ¡Así que si los bytes en vuelo > PC entonces estamos bien!
Mirando el rastro TCP Estadísticas -> TCP StreamGraph -> Gráfico de secuencia temporal (tcptrace) podemos ver los bytes en el eje Y, y el tiempo en el eje X. La derivada de esta curva es bytes/segundo, o rendimiento. Observa cómo la "línea" negra es plana, lo que significa que el rendimiento es estable. Sin embargo, está interrumpida por líneas azules un par de veces (esos son los rangos de SACK en los ACKs duplicados), pero como se puede ver no afecta al rendimiento.
¿Ves cómo la línea sólida gris de abajo a la derecha (acércate un poco, son los ACKs) está muy cerca de los segmentos negros de TCP? El tiempo entre el segmento TCP y el ACK es el RTT, ¡aquí es casi 0! Significa que no hay muchos segmentos en vuelo pasado este punto de captura. Esto a su vez significa que no podemos usar eso para estimar los bytes en vuelo, y esta es la razón por la que una captura de paquetes del lado del emisor es mucho mejor.
Aquí los paquetes se pierden naturalmente antes del punto de captura. Cada segmento de datos que estaba en vuelo en el momento de la pérdida provoca un ACK duplicado. Por lo tanto, podemos utilizar el número de ACKs duplicados para estimar los bytes en vuelo en el momento de la pérdida del paquete. Aquí vemos unos 9, 16 y 23 segmentos. Cada segmento tiene 1448 bytes de datos, así que eso nos da unos bytes en vuelo entre 13k y 33k. El rendimiento aquí fue de unos 3 Mbit/s (de Gráfico IO ) y con el RTT que medimos antes obtenemos una capacidad de tuberías inferior a 3e6 [bits/s] * 10e-3 [s] / 8 bytes = 3750 bytes, es decir, menos de 3 segmentos.
Debido a que los bytes en vuelo en el momento de estas pérdidas no son realmente los mismos (difícil de decir aquí con tan pocas muestras) no puedo decir realmente si se trata de pérdidas aleatorias (que son malas malas malas) o pérdidas que ocurren porque una cola / cubo se desborda, pero están ocurriendo cuando los bytes en vuelo > PC por lo que el rendimiento no se ve afectado.
Su respuesta parece indicar que, efectivamente, eran aleatorias, pero no tantas como para provocar un bajo rendimiento.