[Linux gráfico] [Serie de pila de red]: flujo de datos del paquete de red a la aplicación

Inserte la descripción de la imagen aquí

Qué sucede desde la tarjeta de red hasta el límite de la pila de protocolos:

Inserte la descripción de la imagen aquí

Proceso de aceptación de paquetes de datos

La recepción de paquetes de datos pasa por tres capas de abajo hacia arriba: el controlador de la tarjeta de red, el espacio del núcleo del sistema y, finalmente, la aplicación del espacio del usuario.
Ahora expliquemos en detalle:

  • Cuando llega un nuevo paquete de datos, NIC( network interface controller) es llamado DMA enginepor Ring Buffercolocar el paquete de datos en el área de memoria del núcleo.
  • Una vez que el paquete de datos se recibe con éxito, NICse inicia una interrupción y el controlador de interrupciones del kernel pasa el paquete de datos a la IPcapa.
  • Después del IPprocesamiento de la capa, el paquete de datos se coloca en la cola para esperar el TCPprocesamiento de la capa. Cada paquete de datos pasa por TCPuna serie de pasos complejos en la capa para actualizar la TCPmáquina de estado,
  • Finalmente llegó recv Buffer, esperando ser recibido y procesado por la aplicación.

Déjame explicarte algunos puntos:

  • LinuxEl kernel usa la estructura de datos sk_buff( socket kernel buffers) para describir un paquete de datos.
  • Ring BufferEl tamaño de es fijo, no contiene el paquete de datos real, pero contiene el sk_buffdescriptor puntiagudo . Cuando esté Ring ``Bufferlleno, se descartarán los nuevos paquetes.
  • A partir de NICla memoria packagede datos no puede pasar por CPUcopiada directamente en Kernella memoria, este proceso es
    DMA: Directional Memory Accessutiliza principalmente
  • De la figura anterior se puede ver DMAoperando en el kernel de una memoria, esta memoria en realidad se Device Driverregistra cuando la Kernelaplicación avanza.
  • Por último, cabe señalar que el paquete llega recv Buffer, TCPserá de nuevo a ACKconfirmar, tanto TCPde ACKindica que el paquete ha sido recibido por el núcleo del sistema operativo, pero no garantiza necesariamente que la capa de aplicación recibe los datos (por ejemplo, esta vez el sistema crash), en general se recomienda la aplicación de capa de protocolo también Diseñe su propio mecanismo de confirmación.

El proceso de envío del paquete de datos

La línea roja en la figura anterior representa el proceso de envío de paquetes de datos. A diferencia de la ruta de recepción de datos, el envío de paquetes de datos también pasa por tres capas de arriba a abajo: aplicación de espacio de usuario, espacio de kernel del sistema y finalmente al controlador de la tarjeta de red.

  • La aplicación primero escribe los datos TCP send buffery la TCPcapa send bufferconstruye los datos en un paquete de datos y los reenvía a la IPcapa.
  • IPLa capa coloca los paquetes de datos que se enviarán en la cola QDisc( queueing discipline).
  • Una vez que el paquete de datos se coloca correctamente QDisc, el descriptor que apunta al paquete de datos sk_buffse coloca en la Ring Buffercola de salida y luego el controlador de la tarjeta de red llama para DMA engineenviar los datos al enlace de red.

Supongo que te gusta

Origin blog.csdn.net/qq_33487044/article/details/108137455
Recomendado
Clasificación