Anzeigen von coalesced Segmenten
Eine einzelne koalescierte Einheit (Single Coalesced Unit, SCU) ist eine Sequenz von TCP-Segmenten, die gemäß den in Regeln für die Zusammenführung von TCP/IP-Segmenten definierten Regeln zu einem einzelnen TCP-Segment zusammengefasst werden. In diesem Abschnitt wird beschrieben, wie sie die resultierenden zusammengefakteten Segmente angeben.
Eine SCU muss:
Durch Aufrufen von NdisMIndicateReceiveNetBufferLists angegeben werden.
Sehen Sie wie ein normales TCP-Segment aus, das über die Leitung empfangen wird.
Nicht größer als die maximale Länge des gesetzlichen IP-Datagramms, wie in Abschnitt 3.1 von RFC 791 definiert.
Hinweis Da Segmente mit IPv6-Erweiterungsheadern nicht zusammengefügt werden können (siehe Ausnahmebedingungen, die das Coalescing beenden), ist die Größe der SCU für IPv6-Datagramme auch durch die maximale zulässige Datagrammlänge begrenzt.
Der NIC- oder Miniporttreiber sollte die TCP- und IPv4-Prüfsummen ggf. neu kompensieren, bevor das zusammengeknauste Segment angegeben wird. Wenn der NIC- oder Miniporttreiber die TCP- und IPv4-Prüfsummen überprüft, sie aber nicht für das zusammengeflochtene Segment neu berechnet, muss er die TcpChecksumValueInvalid - und IpChecksumValueInvalid-Flags in der NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO-Struktur festlegen. Darüber hinaus kann in diesem Fall der NIC- oder Miniporttreiber optional die TCP- und IPv4-Headerprüfsummenwerte im Segment auf Null stellen.
Der NIC- und Miniporttreiber müssen immer die Flags IpChecksumSucceeded und TcpChecksumSucceeded in der NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO-Struktur festlegen, bevor das zusammengeknipelte Segment angegeben wird.
Weitere Informationen zu Koalescierungsregeln finden Sie unter Regeln für das Zusammenfügen von TCP/IP-Segmenten.
Weitere Informationen zu Ausnahmen finden Sie unter Ausnahmebedingungen, die das Coalescing beenden.
Es wird erwartet, dass das Zusammenwachsen auf best-effort-Basis durchgeführt wird. Die Hardware kann in einigen Fällen möglicherweise nicht zusammenwachsen, z. B. aufgrund fehlender Ressourcen. Die hier aufgeführten Anforderungen bestehen in erster Linie darin, anzugeben, wann nicht koalesiert werden soll und wie zusammenwachsen soll.
Auf hoher Ebene müssen der NIC- und Miniporttreiber den Empfang eines TCP-Segments über das Kabel wie folgt behandeln:
Überprüfen Sie das eingehende Segment wie folgt auf eine Ausnahme:
Wenn keine Ausnahme aufgetreten ist, überprüfen Sie, ob das Segment mit dem letzten Segment verbunden werden kann, das für dieselbe TCP-Verbindung gemäß den Regeln empfangen wurde.
Wenn das Segment eine Ausnahme ausgelöst hat oder eine Zusammenführung mit dem zuvor empfangenen Segment nicht möglich ist, geben Sie das Segment einzeln an.
Der NIC- und Miniporttreiber dürfen zusammengeknabelte Segmente erst angeben, wenn der Protokolltreiber RSC aktiviert, wie unter Abfragen und Ändern des RSC-Zustands beschrieben.
Für eine bestimmte TCP-Verbindung kann eine Datenanzeige vom Miniportadapter zum TCP/IP-Hoststapel aus einem oder mehreren miteinander verbundenen Segmenten bestehen, die durch ein oder mehrere einzelne Segmente getrennt sind, die nicht koalesiert werden konnten.
Der NIC- und Miniporttreiber dürfen die Angabe von TCP-Segmenten nicht verzögern, unabhängig davon, ob sie zusammengeglichen sind oder nicht. Insbesondere dürfen der NIC- und Miniporttreiber die Angabe von Segmenten von einem verzögerten Prozeduraufruf (DPC) zum nächsten nicht verzögern, um zu versuchen, die Segmente zu verschmelzen.
Der NIC- und Miniporttreiber können Timer verwenden, um das Ende der Zusammenführung zu bestimmen. Die Verarbeitung von latenzempfindlichen Workloads muss jedoch genauso effektiv sein wie die DPC-Begrenzungsanforderung.