Partager via


Déchargement des tâches de somme de contrôle

NDIS prend en charge le déchargement des tâches de somme de contrôle TCP/IP au moment de l’exécution.

Notes

 Les données OOB (Out-of-Band) de la somme de contrôle sont stockées dans le tableau d’informations NET_BUFFER_LIST . Pour plus d’informations sur les données OOB, consultez Accès aux informations de NET_BUFFER_LIST de déchargement TCP/IP.

Avant de transmettre au pilote miniport une structure de NET_BUFFER_LIST pour un paquet sur lequel le pilote miniport effectuera des tâches de somme de contrôle, le transport TCP/IP spécifie les informations de somme de contrôle associées à la structure NET_BUFFER_LIST. Ces informations sont spécifiées par une structure NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO , qui fait partie des informations NET_BUFFER_LIST (données hors bande) associées à la structure NET_BUFFER_LIST.

Avant de décharger le calcul de la somme de contrôle pour un paquet TCP, le transport TCP/IP calcule la somme de complément de celui-ci pour le pseudo-tête TCP. Le transport TCP/IP calcule la somme du complément dans tous les champs du pseudo-en-tête, y compris l’adresse IP source, l’adresse IP de destination, le protocole et la longueur TCP des paquets TCP. Le transport TCP/IP entre la somme du complément du pseudo-tête dans le champ Somme de contrôle de l’en-tête TCP.

La somme de complément pour le pseudo-tête fourni par le transport TCP/IP donne à la carte réseau un début précoce dans le calcul de la somme de contrôle TCP réelle pour le paquet d’envoi. Pour calculer la somme de contrôle TCP réelle, la carte réseau calcule la partie variable de la somme de contrôle TCP (pour l’en-tête et la charge utile TCP), ajoute cette somme de contrôle à la somme de complément de l’utilisateur pour le pseudo-tête calculé par le transport TCP/IP, et calcule le complément d’un 16 bits pour la somme de contrôle. Pour plus d’informations sur le calcul de ces sommes de contrôle, consultez RFC 793 et RFC 1122.

Notes

Le transport TCP/IP calcule la somme du complément pour le pseudo-tête d’un paquet UDP en utilisant les mêmes étapes que pour un paquet TCP, puis stocke la valeur dans le champ Somme de contrôle de l’en-tête UDP.

Notez que le transport TCP/IP garantit toujours que le champ de somme de contrôle dans l’en-tête IP d’un paquet est défini sur zéro avant de transmettre le paquet à un pilote miniport sous-jacent. Le pilote miniport doit ignorer le champ de somme de contrôle dans un en-tête IP. Le pilote miniport n’a pas besoin de vérifier que le champ de somme de contrôle est défini sur zéro et n’a pas besoin de définir ce champ sur zéro.

Une fois qu’il a reçu la structure NET_BUFFER_LIST dans sa fonction MiniportSendNetBufferLists ou MiniportCoSendNetBufferLists , un pilote miniport effectue généralement le traitement de la somme de contrôle suivant :

  1. Le pilote miniport appelle la macro NET_BUFFER_LIST_INFO avec une _Id de TcpIpChecksumNetBufferListInfo pour obtenir une structure NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO .

  2. Le pilote miniport teste les indicateurs IsIPv4 et IsIPv6 dans la structure NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO. Si les indicateurs IsIPv4 et IsIPv6 ne sont pas définis, la carte réseau ne doit pas effectuer d’opérations de somme de contrôle sur le paquet.

  3. Si l’indicateur IsIPv4 ou IsIPv6 est défini, le pilote miniport teste les indicateurs TcpChecksum, UdpChecksum et IpHeaderChecksum pour déterminer les sommes de contrôle que la carte réseau doit calculer pour le paquet.

  4. Le pilote miniport transmet le paquet à la carte réseau, qui calcule les sommes de contrôle appropriées pour le paquet. Si un paquet a à la fois un en-tête IP de tunnel et un en-tête IP de transport, une carte réseau qui prend en charge les déchargements de somme de contrôle IP effectue des tâches de somme de contrôle IP uniquement sur l’en-tête du tunnel. Le transport TCP/IP effectue des tâches de somme de contrôle IP sur l’en-tête IP de transport.

Avant d’indiquer une structure de NET_BUFFER_LIST pour un paquet de réception sur lequel il effectue des tâches de somme de contrôle, le pilote miniport valide les sommes de contrôle appropriées et définit les indicateurs XxxChecksumFailed ou XxxChecksumSucceed appropriés dans la structure NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO.

La désactivation des déchargements de somme de contrôle d’adresse lorsque le déchargement d’envoi volumineux (LSO) est activé n’empêche pas le pilote miniport de calculer et d’insérer des sommes de contrôle dans les paquets générés par la fonctionnalité LSO. Pour désactiver les déchargements de somme de contrôle d’adresse dans ce cas, l’utilisateur doit également désactiver l’authentification LSO.