Примеры сборки сегментов приёма

В этом разделе показан алгоритм объединения с использованием примеров сегментов, полученных в последовательном порядке и обработанных в одном отложенном вызове процедуры (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, как показано в следующей блок-схеме.

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

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

Результат

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

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

Пример 4. Дополненные ACK, совмещенные с сегментами данных

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

Обрабатываются 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. SCU.ACK устанавливается в последнее значение SEG.ACK.