Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
O NDIS suporta o descarregamento das tarefas de verificação de soma TCP/IP em tempo de execução.
Observação
Os dados de descarregamento de checksum fora de banda (OOB) são armazenados na matriz de informações NET_BUFFER_LIST. Para obter mais informações sobre dados OOB, consulte Como acessar informações de NET_BUFFER_LIST de descarregamento de TCP/IP.
Antes de passar para o driver de miniporta uma estrutura de NET_BUFFER_LIST para um pacote no qual o driver de miniporta executará tarefas de soma de verificação, o transporte TCP/IP especifica as informações de soma de verificação associadas à estrutura NET_BUFFER_LIST. Essas informações são especificadas por uma estrutura NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO, que faz parte das informações de NET_BUFFER_LIST (dados fora de banda) associadas à estrutura NET_BUFFER_LIST.
Antes de descarregar o cálculo da soma de verificação para um pacote TCP, o transporte TCP/IP calcula a soma do complemento para o pseudocabeçalho TCP. O transporte TCP/IP calcula a soma do complemento em todos os campos no pseudocabeçalho, incluindo Endereço IP de Origem, Endereço IP de Destino, Protocolo e o comprimento TCP para pacotes TCP. O transporte TCP/IP insere a soma do complemento para o pseudocabeçalho no campo Soma de verificação do cabeçalho TCP.
A soma do complemento para um pseudocabeçalho oferecido pelo transporte TCP/IP dá à NIC um início antecipado no cálculo da soma de verificação TCP real para o pacote enviado. Para calcular a soma de verificação TCP real, a NIC calcula a parte variável da soma de verificação TCP (para o cabeçalho TCP e a carga útil), adiciona essa soma de verificação à soma do complemento de um para o pseudocabeçalho calculado pelo transporte TCP/IP, e calcula o complemento de um bit para a soma de verificação de 16 bits. Para obter mais informações sobre como calcular essas somas de verificação, consulte RFC 793 e RFC 1122.
Observação
O transporte TCP/IP calcula a soma do complemento para o pseudocabeçalho de um pacote UDP usando as mesmas etapas que para um pacote TCP e armazena o valor no campo Soma de verificação do cabeçalho UDP.
Observe que o transporte TCP/IP sempre garante que o campo de soma de verificação no cabeçalho IP de um pacote seja definido como zero antes de passar o pacote para um driver de miniporta subjacente. O driver da miniporta deve ignorar o campo de soma de verificação num cabeçalho IP. O driver de miniporta não precisa verificar se o campo de soma de verificação está definido como zero e não precisa definir esse campo como zero.
Depois de receber a estrutura NET_BUFFER_LIST nas suas funções MiniportSendNetBufferLists ou MiniportCoSendNetBufferLists, um driver de miniporta normalmente faz o seguinte processamento de checksum:
O driver de miniporta chama a macro NET_BUFFER_LIST_INFO com uma _Id de TcpIpChecksumNetBufferListInfo para obter uma estrutura NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO.
O driver de miniporta testa os sinalizadores IsIPv4 e IsIPv6 na estrutura NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO. Se os sinalizadores IsIPv4 e IsIPv6 não estiverem definidos, a NIC não deverá executar nenhuma operação de soma de verificação no pacote.
Se o sinalizador de IsIPv4 ou o sinalizador de IsIPv6 estiver definido, o driver de miniporta testará os sinalizadores de TcpChecksum, UdpChecksume IpHeaderChecksum para determinar quais somas de verificação a NIC deve calcular para o pacote.
O miniport driver passa o pacote para a NIC, que calcula as somas de verificação apropriadas para o pacote. Se um pacote tiver um cabeçalho IP de túnel e um cabeçalho IP de transporte, uma NIC que ofereça suporte a descarregamentos de soma de verificação IP executará tarefas de soma de verificação IP somente no cabeçalho do túnel. O transporte TCP/IP executa tarefas de soma de verificação IP no cabeçalho IP do transporte.
Antes de indicar uma estrutura NET_BUFFER_LIST para um pacote de receção sobre o qual executa tarefas de soma de verificação, o driver de miniporta valida as somas de verificação apropriadas e define os sinalizadores apropriados XxxChecksumFailed ou XxxChecksumSucceeded na estrutura NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO.
Desativar os descarregamentos de soma de verificação de endereço quando o LSO (Large Send Offload) está ativado não impede que o driver de miniporta calcule e insira somas de verificação nos pacotes gerados pelo recurso LSO. Para desativar os descarregamentos de soma de verificação de endereço, neste caso, o usuário também deve desativar o LSO.