Compartir a través de


Descarga de tareas de suma de comprobación

NDIS admite la descarga de tareas de suma de comprobación tcp/IP en tiempo de ejecución.

Nota

 La descarga de suma de comprobación de datos fuera de banda (OOB) se almacena en la matriz de información de NET_BUFFER_LIST . Para obtener más información sobre los datos de OOB, consulte Acceso a la descarga tcp/IP NET_BUFFER_LIST información.

Antes de pasar al controlador de miniporte una estructura de NET_BUFFER_LIST para un paquete en el que el controlador de miniporte realizará tareas de suma de comprobación, el transporte TCP/IP especifica la información de suma de comprobación asociada a la estructura de NET_BUFFER_LIST. Esta información se especifica mediante una estructura NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO , que forma parte de la información de NET_BUFFER_LIST (datos fuera de banda) asociada a la estructura NET_BUFFER_LIST.

Antes de descargar el cálculo de suma de comprobación de un paquete TCP, el transporte TCP/IP calcula la suma de complemento de la que se usa para el pseudoheader TCP. El transporte TCP/IP calcula la suma del complemento del uno en todos los campos del pseudoheader, incluida la dirección IP de origen, la dirección IP de destino, el protocolo y la longitud tcp de los paquetes TCP. El transporte TCP/IP entra en la suma de complemento del seudoencabezado en el campo Suma de comprobación del encabezado TCP.

La suma de complemento de la pseudoheader proporcionada por el transporte TCP/IP proporciona a la NIC un comienzo temprano al calcular la suma de comprobación tcp real para el paquete de envío. Para calcular la suma de comprobación TCP real, la NIC calcula la parte variable de la suma de comprobación TCP (para el encabezado TCP y la carga), agrega esta suma de comprobación a la suma de complemento del seudoheader calculado por el transporte TCP/IP y calcula el complemento de uno de 16 bits para la suma de comprobación. Para obtener más información sobre cómo calcular estas sumas de comprobación, consulte RFC 793 y RFC 1122.

Nota

El transporte TCP/IP calcula la suma de complemento del pseudoheader de un paquete UDP con los mismos pasos que para un paquete TCP y almacena el valor en el campo Suma de comprobación del encabezado UDP.

Tenga en cuenta que el transporte TCP/IP siempre garantiza que el campo de suma de comprobación del encabezado IP de un paquete esté establecido en cero antes de pasar el paquete a un controlador de miniport subyacente. El controlador de minipuerto debe omitir el campo de suma de comprobación en un encabezado IP. El controlador de minipuerto no necesita comprobar que el campo de suma de comprobación está establecido en cero y no es necesario establecer este campo en cero.

Después de recibir la estructura NET_BUFFER_LIST en su función MiniportSendNetBufferLists o MiniportCoSendNetBufferLists , un controlador de miniporte normalmente realiza el siguiente procesamiento de suma de comprobación:

  1. El controlador de minipuerto llama a la macro NET_BUFFER_LIST_INFO con una _Id de TcpIpChecksumNetBufferListInfo para obtener una estructura de NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO .

  2. El controlador de minipuerto prueba las marcas IsIPv4 e IsIPv6 en la estructura NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO. Si no se establecen las marcas IsIPv4 e IsIPv6 , la NIC no debe realizar ninguna operación de suma de comprobación en el paquete.

  3. Si se establece la marca IsIPv4 o IsIPv6 , el controlador de miniporta prueba las marcas TcpChecksum, UdpChecksum y IpHeaderChecksum para determinar qué sumas de comprobación debe calcular la NIC para el paquete.

  4. El controlador de minipuerto pasa el paquete a la NIC, que calcula las sumas de comprobación adecuadas para el paquete. Si un paquete tiene un encabezado IP de túnel y un encabezado IP de transporte, una NIC que admite descargas de suma de comprobación ip realiza tareas de suma de comprobación de IP solo en el encabezado del túnel. El transporte TCP/IP realiza tareas de suma de comprobación de IP en el encabezado IP de transporte.

Antes de indicar una estructura de NET_BUFFER_LIST para un paquete de recepción en el que realiza tareas de suma de comprobación, el controlador de minipuerto valida las sumas de comprobación adecuadas y establece las marcas XxxChecksumFailed o XxxChecksumSucceeded en la estructura NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO.

Desactivar las descargas de suma de comprobación de direcciones cuando se habilita la descarga de envío grande (LSO) no impide que el controlador de miniporte calcule e inserte sumas de comprobación en los paquetes generados por la característica LSO. Para deshabilitar las descargas de suma de comprobación de direcciones en este caso, el usuario también debe deshabilitar el LSO.