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