Поделиться через


Примеры объединения сегментов получения

В этом разделе показан алгоритм объединения с использованием примеров сегментов, которые принимаются по порядку и обрабатываются в одном отложенном вызове процедуры (DPC).

На этой странице используются X и X' для маркировки последовательных сегментов. Все остальные поля сегментов и единой объединенной единицы (SCU) описаны в разделе Правила объединения сегментов TCP/IP.

Пример 1. Сегменты данных

Описание сегмента

Обрабатываются 10 последовательных сегментов, принадлежащих одному и тому же TCP-соединению. Для каждого из них выполняются все следующие условия:

  • X'. SEQ == X.NXT

  • X'SEQ > X.SEQ

  • X'. ACK == X.ACK

Ни один из этих сегментов не создает исключение.

Результат

Один SCU формируется из 10 сегментов. Это обозначается как один NET_BUFFER в одном NET_BUFFER_LIST.

Пример 2. Сегменты данных, за которыми следует исключение, а затем сегменты данных

Описание сегмента

Обрабатываются 5 последовательных сегментов, принадлежащих одному и тому же TCP-подключению. Для каждого из них выполняются все следующие условия:

  • X'. SEQ == X.NXT

  • X'SEQ > X.SEQ

  • X'. ACK == X.ACK

Ни один из этих сегментов не создает исключение. 6-й сегмент является дублирующимся сегментом ACK с параметром TCP SACK и создает исключение на основе правила номер 3 в разделе Правила объединения сегментов TCP/IP.

Примечание В этом случае правило исключения для обработки параметра TCP имеет приоритет и, таким образом, переопределяет правило объединения.

Обрабатываются 2 последовательных сегмента, принадлежащих одному и тому же TCP-соединению. Для каждого из них выполняются все следующие условия:

  • X'. SEQ == X.NXT

  • X'SEQ > X.SEQ

  • X'. ACK == X.ACK

Ни один из этих сегментов не создает исключение.

Результат

Один SCU формируется из первых 5 сегментов. 6-й сегмент не формирует SCU.

7-й и 8-й сегменты образуют SCU вместе.

Цепочка NET_BUFFER_LIST обозначается тремя NET_BUFFER_LIST структурами, каждая из которых имеет один NET_BUFFER. Порядок полученных сегментов сохраняется.

Пример 3. Сегменты данных, за которыми следуют обновления нескольких окон

Описание сегмента

Обрабатываются 5 последовательных сегментов, принадлежащих одному и тому же TCP-подключению. Для каждого из них выполняются все следующие условия:

  • X'. SEQ == X.NXT

  • X'SEQ > X.SEQ

  • X'. ACK == X.ACK

Ни один из этих сегментов не создает исключение. 6-й сегмент — это чистое ACK, которое представляет собой обновление окна с помощью SEG. WND = 65535, как показано на следующей блок-схеме.

Блок-схема, показывающая правила объединения сегментов с параметром

7-й сегмент — это чистая ACK, которая представляет собой обновление окна с помощью SEG. WND = 131070, как показано на той же блок-схеме.

Результат

Один SCU формируется из 7 сегментов. Это обозначается как один NET_BUFFER в одном NET_BUFFER_LIST.

The SCU. WND = 131070, и контрольная сумма обновляется на основе этого значения.

Пример 4. Пакеты ACL с piggyback, смешанные с сегментами данных

Описание сегмента

Обрабатываются 3 последовательных сегмента, принадлежащих одному и тому же TCP-соединению. Для каждого из них выполняются все следующие условия:

  • X'. SEQ == X.NXT

  • X'SEQ > X.SEQ

  • X'. ACK == X.ACK

Ни один из этих сегментов не создает исключение. Обрабатываются 2 последовательных сегмента, принадлежащих одному и тому же TCP-соединению. Для каждого из них выполняются все следующие условия:

  • X'. SEQ == X.NXT

  • X'SEQ > X.SEQ

  • X'. ACK == X.ACK

Ни один из этих сегментов не создает исключение.

Результат

Один SCU формируется из 5 сегментов. Это обозначается как один NET_BUFFER в одном NET_BUFFER_LIST. The SCU. Для параметра ACK задано последнее значение SEG.ACK.