Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Единая объединяемая единица (SCU) — это последовательность сегментов TCP, объединенных в один сегмент TCP в соответствии с правилами, определенными в Правила для объединения сегментов TCP/IP. В этом разделе описывается, как указать полученные объединенные сегменты.
SCU должен:
Указывается вызовом NdisMIndicateReceiveNetBufferLists.
Выглядеть как обычный сегмент TCP, полученный по проводу.
Не превышает максимальную допустимую длину IP-датаграммы, как указано в разделе 3.1 RFC 791.
Примечание Поскольку сегменты с заголовками расширений IPv6 не могут быть объединены (см. условия исключения, которые завершают объединение), размер SCU для диаграмм IPv6 также ограничен максимальной длиной юридической диаграммы данных.
Драйвер сетевого адаптера или мини-порта должен повторно компьютировать контрольные суммы TCP и IPv4, если это применимо, прежде чем указывать объединенный сегмент. Если драйвер сетевого адаптера или мини-порта проверяет контрольные суммы TCP и IPv4, но не перекомпьютирует их для объединенного сегмента, он должен задать TcpChecksumValueInvalid и флаги IpChecksumValueInvalid в структуре NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO. Кроме того, в этом случае драйвер сетевого адаптера или минипорта может опционально обнулить значения контрольной суммы заголовка TCP и IPv4 в сегменте.
Драйвер сетевого адаптера и минипорта всегда должен устанавливать флаги IpChecksumSucceeded и TcpChecksumSucceeded в структуре NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO перед индикацией объединённого сегмента.
Дополнительные сведения о правилах объединения см. в правилах объединения сегментов TCP/IP.
Дополнительные сведения об исключениях см. в разделе условия исключения, которые завершают объединение.
Ожидается, что объединение будет выполнено на основе лучших усилий. Оборудование может не иметь возможности объединения в некоторых случаях, например из-за нехватки ресурсов. Требования, изложенные здесь, главным образом определяют, когда не стоит объединять и как это делать.
На высоком уровне сетевой адаптер и драйвер мини-порта должны обрабатывать получение сегмента TCP через провод следующим образом:
Проверьте входящий сегмент на наличие исключения следующим образом:
Если исключение не было обнаружено, проверьте, можно ли объединить сегмент с последним сегментом, полученным для того же TCP-соединения, согласно правилам.
Если сегмент активировал исключение или если объединение его с ранее полученным сегментом невозможно, то укажите сегмент по отдельности.
Драйвер сетевого адаптера и минипорта не должен сигнализировать о свёрнутых сегментах до тех пор, пока драйвер протокола не активирует RSC, как описано в разделе Запрос состояния и изменение состояния RSC.
Для заданного TCP-подключения данные из мини-адаптера к стеку TCP/IP узла могут состоять из одного или нескольких объединенных сегментов, разделенных одним или несколькими отдельными сегментами, которые не могут быть объединены.
Драйвер сетевого адаптера и минипорта не должен задерживать индикацию сегментов TCP, независимо от того, объединены они или нет. В частности, драйвер сетевого адаптера и минипорта не должен задерживать указание сегментов от одного отложенного вызова процедуры (DPC) к следующему, чтобы попытаться объединять сегменты.
Сетевой адаптер и драйвер минипорта могут использовать таймеры для определения конца объединения. Однако обработка чувствительных к задержкам рабочих нагрузок должна быть столь же эффективной, как требование границы DPC.