Indicación de segmentos combinado
Una sola unidad fusionada (SCU) es una secuencia de segmentos TCP que se fusionan en un solo segmento TCP según las reglas definidas en Reglas para la fusión de segmentos TCP/IP. En esta sección se describe cómo indicar los segmentos fusionados resultantes.
Una SCU debe:
Para indicarlo, llame a NdisMIndicateReceiveNetBufferLists.
Parece un segmento TCP normal que se recibe a través de la conexión.
No sea mayor que la longitud máxima del datagrama IP legal, tal como se define en la sección 3.1 de RFC 791.
Nota Dado que los segmentos con encabezados de extensión IPv6 no se pueden fusionar (consulte Condiciones de excepción que finalizan la fusión), el tamaño de SCU para datagramas IPv6 también está limitado por la longitud máxima del datagrama legal.
El controlador NIC o miniporte debe volver a calcular las sumas de comprobación TCP e IPv4, si procede, antes de indicar el segmento combinado. Si el controlador NIC o miniporta valida las sumas de comprobación TCP e IPv4, pero no las vuelve a calcular para el segmento combinado, debe establecer las marcas TcpChecksumValueInvalid y IpChecksumValueInvalid en la estructura NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO . Además, en este caso, el controlador NIC o miniport puede, opcionalmente, cero los valores de suma de comprobación del encabezado TCP e IPv4 en el segmento.
La NIC y el controlador de minipuerto siempre deben establecer las marcas IpChecksumSucceeded yTcpChecksumSucceeded en la estructura NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO antes de indicar el segmento combinado.
Para obtener más información sobre las reglas de fusión, vea Reglas para la fusión de segmentos TCP/IP.
Para obtener más información sobre las excepciones, vea Condiciones de excepción que finalizan la fusión.
Se espera que la fusión se realice de forma óptima. Es posible que el hardware no pueda fusionarse en algunos casos, por ejemplo debido a la falta de recursos. Los requisitos indicados aquí son principalmente para especificar cuándo no se fusionar y cómo se fusiona.
En un nivel alto, la NIC y el controlador de minipuerto deben controlar la recepción de un segmento TCP a través de la conexión como se indica a continuación:
Compruebe el segmento entrante para ver una excepción de la siguiente manera:
Si no se encontró ninguna excepción, compruebe si el segmento se puede fusionar con el último segmento que se recibió para la misma conexión TCP según las reglas.
Si el segmento desencadenó una excepción o si lo combina con el segmento recibido anteriormente no es posible, indique el segmento individualmente.
La NIC y el controlador de minipuerto no deben indicar segmentos fusionados hasta que el controlador del protocolo habilite RSC como se describe en Consulta y cambio de estado RSC.
Para una conexión TCP determinada, una indicación de datos del adaptador de minipuerto a la pila TCP/IP del host puede constar de uno o varios segmentos fusionados, separados por uno o más segmentos individuales que no se pudieron fusionar.
La NIC y el controlador de minipuerto no deben retrasar la indicación de segmentos TCP, ya sea fusionados o no. En concreto, la NIC y el controlador de minipuerto no deben retrasar la indicación de segmentos de una llamada a procedimiento diferida (DPC) a la siguiente para intentar fusionar los segmentos.
La NIC y el controlador de minipuerto pueden usar temporizadores para determinar el final de la fusión. Sin embargo, el control de las cargas de trabajo sensibles a la latencia debe ser tan eficaz como requisito de límite de DPC.