Udostępnij przez


Przesuwanie zadań weryfikacji sumy kontrolnej

NDIS obsługuje odciążanie zadań sum kontrolnych TCP/IP podczas działania.

Notatka

 Odciążanie sumy kontrolnej dla danych poza pasmem (OOB) jest przechowywane w tablicy informacyjnej NET_BUFFER_LIST. Aby uzyskać więcej informacji na temat danych OOB, zobacz Uzyskiwanie dostępu do informacji NET_BUFFER_LIST o odciążaniu protokołu TCP/IP.

Przed przekazaniem struktury NET_BUFFER_LIST sterownikowi miniportu, na pakiecie, na którym sterownik miniportu wykona zadania sumy kontrolnej, transport TCP/IP określa informacje sumy kontrolnej skojarzone z tą strukturą NET_BUFFER_LIST. Te informacje są określane przez strukturę NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO, która jest częścią NET_BUFFER_LIST informacji (danych poza pasmem) skojarzonych ze strukturą NET_BUFFER_LIST.

Przed odciążeniem obliczenia sumy kontrolnej dla pakietu TCP transport TCP/IP oblicza sumę uzupełniającą dla pseudoheadera TCP. Transport TCP/IP oblicza sumę uzupełnienia jedynkowego dla wszystkich pól w pseudoheaderze, w tym źródłowy adres IP, docelowy adres IP, protokół i długość TCP dla pakietów TCP. W transporcie TCP/IP suma jednokomplementarna pseudo-nagłówka jest umieszczana w polu Sumy kontrolnej nagłówka TCP.

Suma uzupełnień dla pseudoheadera dostarczona przez transport TCP/IP daje karcie sieciowej przewagę w obliczaniu rzeczywistej sumy kontrolnej TCP dla pakietu do wysłania. Aby obliczyć rzeczywistą sumę kontrolną TCP, karta sieciowa oblicza zmienną część sumy kontrolnej TCP (dla nagłówka TCP i ładunku), dodaje tę sumę kontrolną do sumy dopełnień jedynek dla pseudonagłówka obliczonego przez transport TCP/IP i oblicza 16-bitowe dopełnienie jedynek dla sumy kontrolnej. Aby uzyskać więcej informacji na temat obliczania takich sum kontrolnych, zobacz RFC 793 i RFC 1122.

Notatka

Protokół TCP/IP oblicza sumę uzupełnienia dla pseudo-nagłówka pakietu UDP przy użyciu tych samych kroków, co w przypadku pakietu TCP, i przechowuje wartość w polu sumy kontrolnej nagłówka UDP.

Należy pamiętać, że transport TCP/IP zawsze zapewnia, że pole sumy kontrolnej w nagłówku IP pakietu jest ustawione na zero przed przekazaniem pakietu do bazowego sterownika miniportu. Sterownik miniportu powinien ignorować pole sumy kontrolnej w nagłówku IP. Sterownik miniportu nie musi sprawdzić, czy pole sumy kontrolnej jest ustawione na zero i nie musi ustawiać tego pola na zero.

Po otrzymaniu struktury NET_BUFFER_LIST w funkcji MiniportSendNetBufferLists lub funkcji MiniportCoSendNetBufferLists, sterownik miniportu zazwyczaj wykonuje następujące przetwarzanie sumy kontrolnej:

  1. Sterownik miniportu wywołuje makro NET_BUFFER_LIST_INFO z _IdTcpIpChecksumNetBufferListInfo, aby uzyskać strukturę NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO.

  2. Sterownik miniportu testuje flagi IsIPv4 i IsIPv6 w strukturze NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO. Jeśli zarówno flagi IsIPv4, jak i IsIPv6 nie są ustawione, karta sieciowa nie powinna wykonywać żadnych operacji związanych z sumami kontrolnymi na pakiecie.

  3. Jeśli ustawiono flagę IsIPv4 lub IsIPv6, sterownik miniportu sprawdza flagi TcpChecksum, UdpChecksumi IpHeaderChecksum, aby określić, które sumy kontrolne powinny zostać obliczone dla pakietu.

  4. Sterownik miniportu przekazuje pakiet do interfejsu sieciowego, który oblicza odpowiednie sumy kontrolne dla pakietu. Jeśli pakiet ma zarówno nagłówek IP tunelu, jak i nagłówek transportowego adresu IP, karta sieciowa obsługująca odciążanie sumy kontrolnej adresów IP wykonuje zadania sum kontrolnych adresów IP tylko w nagłówku tunelu. Transport TCP/IP wykonuje zadania sum kontrolnych IP w nagłówku transportowego adresu IP.

Przed wskazaniem struktury NET_BUFFER_LIST dla pakietu, w której wykonuje zadania związane z sumą kontrolną, sterownik miniportu weryfikuje odpowiednie sumy kontrolne i ustawia odpowiednie XxxChecksumFailed lub XxxChecksumSucceeded flagi w strukturze NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO.

Wyłączenie odciążania sum kontrolnych adresów, gdy włączona jest funkcja dużego odciążenia wysyłania (LSO), nie zapobiega obliczaniu i wstawianiu sum kontrolnych w pakietach generowanych przez funkcję LSO. Aby w tym przypadku wyłączyć odciążanie sum kontrolnych adresów, użytkownik musi również wyłączyć LSO.