Resumen

  • RFC 9693 exige que la fase 1 cree un conjunto acotado de conexiones en el DUT y que el Responder registre las cuatro-tuplas traducidas; la fase 2 mide rendimiento sólo contra ese estado conocido.
  • Una fase 2 sin pérdida demuestra un experimento de caja negra bajo condiciones declaradas. No descubre la tabla interna, no representa por sí sola Internet o TCP ni prueba margen de producción o continuidad del servicio.

La dirección de retorno necesita memoria

Cuando el Initiator ofrece una cuatro-tupla nueva en sentido cliente-servidor, el DUT puede crear una entrada, traducir y reenviar. El Responder no dispone de la misma libertad en sentido inverso: una trama que no pertenece a una conexión existente será descartada por la pasarela con estado.

El banco mantiene así dos tablas. La connection tracking table del DUT es opaca; el Tester desconoce su tamaño, contenido y política. La state table del Responder contiene las tuplas traducidas que realmente observó. Tuplas ofrecidas, tramas recibidas en ida, tuplas anotadas y conexiones verificadas en vuelta son comprobantes distintos.

Decir “un millón de sesiones” sin esa separación deja abierta una pregunta decisiva: ¿fueron propuestas, reenviadas, almacenadas o validadas en ambas direcciones?

El azar puede agotar el recurso que quería observar

RFC 4814 recomienda puertos seudoaleatorios uniformes para no favorecer accidentalmente un hash. En un dispositivo sin estado amplía la distribución. En un NAT con estado, cada cuatro-tupla desconocida también puede pedir una conexión nueva.

Con una sola pareja de direcciones, los rangos generales de RFC 4814 permiten 3.170.829.312 combinaciones de puertos. Añadir rangos IP multiplica el espacio. Un generador que llame “realismo” a todo ese universo puede llenar la tabla antes de iniciar la medición prevista.

RFC 9693 mantiene la aleatoriedad y limita los rangos. La fuente puede abarcar decenas de miles de puertos; el destino suele ser menor para reflejar la diferencia entre puertos efímeros y servicios populares. Los tamaños deben viajar con el resultado. “Tráfico aleatorio” no es una especificación suficiente.

La fase 1 define la población de la fase 2

Durante la fase 1 sólo transmite el Initiator. El DUT crea y traduce conexiones; el Responder recibe, extrae las tuplas traducidas y no responde. Una operación carga simultáneamente el estado oculto del DUT y el registro visible del Tester.

La fase 1 es obligatoria antes de medir caudal, latencia, pérdida o variación en la fase 2. Su tasa debe quedar con margen por debajo de la tasa máxima de establecimiento, que por eso se mide primero.

La norma separa dos condiciones extremas. Para medir establecimiento, cada trama usa una tupla distinta y el timeout supera la fase 1: se crea estado nuevo y no expira estado antiguo. Para medir reenvío estable, la fase 1 enumera todo el conjunto y el timeout cubre ambas fases y el intervalo: durante el cronometraje no se crea ni se elimina una conexión.

No son perfiles completos de Internet. Son controles para separar el coste de crear estado del coste de atravesar estado existente.

Recibir en ida no confirma la conexión

La caja negra impide consultar la tabla. Que todas las tramas lleguen al Responder no demuestra que todas las entradas sigan disponibles. La tasa pudo ser excesiva, la capacidad pudo agotarse o una política de sustitución pudo expulsar conexiones.

El Responder valida usando cada tupla de su tabla a una tasa inferior, definida mediante un factor de seguridad. Si todas las tramas vuelven al Initiator, existe evidencia de que esas conexiones estaban presentes y de que las tasas elegidas eran adecuadas.

La pérdida inversa conserva ambigüedad: R pudo ser demasiado alto en la creación; r, demasiado alto en la validación; la tabla pudo llenarse; el DUT pudo rechazar nuevas entradas, sustituir por LRU o borrar un lote. La observación no debe convertirse en una falsa lectura interna.

La capacidad se acota antes de publicarse

El procedimiento parte de un número seguro C0 y una tasa validada R0. Una búsqueda exponencial dobla las conexiones hasta que el DUT colapsa o la tasa de establecimiento cae con severidad. Después, una búsqueda binaria reduce el intervalo hasta un error E declarado.

Las políticas cambian qué sobrevive. Rechazar nuevas conexiones conserva las primeras; LRU conserva las últimas; la recolección por lotes puede dejar menos validaciones que la capacidad física. Por tanto, un N′ preciso no siempre es el tamaño real de la tabla.

La eliminación tiene otra métrica: se cargan N conexiones, se cronometra una operación fuera de banda propia de la implementación y se divide N por el tiempo. Vaciar todo y borrar una a una pueden dar costes diferentes.

El orden y la máquina también son datos

RFC 9693 recomienda escritura round-robin en la tabla del Responder para mantenerla fresca. La lectura seudoaleatoria sigue RFC 4814; round-robin reduce coste. Los órdenes ascendente o descendente pueden probarse aparte, porque el hash, la caché o la sustitución pueden reaccionar al orden.

Timeouts, duración y pausa entre fases, núcleos activos, hashsize, nf_conntrack_max, hardware, NIC, sistema, kernel y versión deben acompañar la cifra. La prueba se repite; mediana, percentiles 1 y 99, número de repeticiones y error de búsqueda expresan la dispersión y precisión.

UDP no es un sustituto de la experiencia del usuario

UDP facilita tasas constantes sin vulnerar el control de congestión de TCP ni añadir su handshake. Aun así, una implementación puede tener timeouts y rutas distintas para TCP. RFC 9693 advierte que el resultado UDP no caracteriza necesariamente el tráfico de Internet y remite a RFC 9411 para HTTP y HTTPS.

Así, cero pérdida sólo prueba una combinación concreta de DUT, versión, configuración, tuplas, orden, timeout, dirección, tasa y CPU. No prueba el contenido oculto, la distribución real, TCP, reserva operativa ni una transacción completa.

La especificación aporta una gramática común y el código en ejecución aporta la observación. La cifra es gobernable cuando la cadena entre ambas permanece verificable.

Fuentes