Tratando de averiguar el costo indirecto exacto de TCP

9

Correspondiente a este tema:

/programming/3613989/what-of-traffic-is-network-overhead-on-top-of-http-s-requests

El tamaño máximo de segmento (que no incluye los encabezados TCP o IP) generalmente se negocia entre las capas al tamaño de la MTU menos el tamaño de los encabezados. Para Ethernet, la MTU generalmente se configura a 1500 bytes. El encabezado TCP es de 160 bits o 20 bytes. La parte fija del encabezado IPv4 es de 160 bits o 20 bytes también. ... Así:

  • para HTTP sobre TCP / IPv4

gastos generales = TCP + IP = 40 bytes

carga útil = 1500 - 40 = 1460 bytes

gastos generales% = 2% (40 * 100/1460)

Aquí hay resultados de 100 Mbit y 1 Gbit iperf en modo TCP con distribuciones predeterminadas de Debian:

[  5] local 10.0.51.1 port 5001 connected with 10.0.51.20 port 45009
[  5]  0.0-10.0 sec   112 MBytes  94.1 Mbits/sec
[  4] local 10.0.51.1 port 5001 connected with 10.0.51.94 port 35065
[  4]  0.0-10.0 sec  1.10 GBytes   941 Mbits/sec

Puedo reducirlo a casi un 2% de gastos generales al aumentar MTU a 9000:

[ ID] Interval       Transfer     Bandwidth
[  4]  0.0-10.0 sec  1.14 GBytes   982 Mbits/sec

¿Pero no debería ser aún menos?

overhead = TCP + IP = 40 bytes
payload = 9000 - 40 = 8960 bytes
overhead % = 0.4% (40 * 100 / 8960)

¿Por qué la "pérdida de ancho de banda" real es notablemente mayor que la teórica? Si la fórmula falta algo valioso?

agrrh
fuente

Respuestas:

16

Paquetes de Ethernet 1.5k

1500 - 20 B (IPv4) - 20 B (TCP + suma de verificación) = 1460 B DATOS (y 40 B Gastos generales)

Agregue 40 B + 14 B (Ethernet) + 4 B (FCS) + 12 B (espacio entre cuadros) + 8 B (preámbulo) = 78 B Sobrecarga

78/1460 * 100 = 5,34% de gastos generales

1460 / (1460 + 78) * 100 = 94.93% Rendimiento / Goodput

1,000,000,000 (1Gbit) * 94.93% = 949Mbit / s (0.949Gbit / s)

midió 941Mbit / s que da (949 - 941) / 949 * 100 = 0.84% ​​de error entre teórico y real.


Paquetes jumbo 9k - Max teórico

(9000-40) / ( 9000 - 40 + 78 ) *100 = 99.14%  (Overhead 0.86%)  

1,000,000,000 (1Gbit) * 99.14% = 991Mbit / s (0.99Gbit / s)

Pieter
fuente
1
Probablemente también haya influencia de la función de inicio lento, pero no estoy seguro de si es lo suficientemente grande. Gracias. :)
agrrh
Ah, ethernet tiene un FCS de 4 bytes al final del marco, permítanme agregar eso al cálculo.
Pieter
4

Los gastos generales generalmente se calculan en función del tamaño total de los datos. De esa manera, la cifra coincide con el valor de eficiencia.

Para TCP sobre IPv4 sobre Ethernet que tiene (sin opciones de encabezado):

  • Sobrecarga L1 - preámbulo, IPG: 8 + 12 = 20
  • Sobrecarga L2: cabecera Ethernet, FCS = 18
  • Sobrecarga L3 - encabezado IPv4 = 20
  • Sobrecarga L4 - encabezado TCP = 20

El tamaño máximo de paquete L3 de 1500 da como resultado un tamaño total de datos L1 de 1500 + 18 + 20 = 1538 bytes y un tamaño máximo de carga útil L4 de 1500-20-20 = 1460 bytes .

  • Gastos generales: 78/1538 * 100% = 5.07%
  • Eficiencia: 1460/1538 * 100% = 94.93%

Con 9k cuadros gigantes (no 802.3), obtendría

  • Gastos generales: 78/9038 * 100% = .86%
  • Eficiencia: 8960/9038 * 100% = 99.14%

Estos son valores teóricos del mejor de los casos . En la vida real, también tendrías un poco de sobrecarga de hardware y sistema operativo que afecta ligeramente el valor de eficiencia. Las características como la descarga y la dirección de interrupción multinúcleo pueden reducir la sobrecarga del procesamiento y acercarlo a las cifras teóricas (más relevante con NIC de mayor velocidad). Los que has medido parecen bastante realistas como ya señaló Pieter.

Zac67
fuente