Фильтрация и маршрутизация фрагментированных дейтаграмм в сети передачи данных

Иллюстрации

Показать все

Изобретение относится к области сетей передачи данных. Технический результат заключается в уменьшении требуемого объема обрабатываемой информации, а также нагрузки на канал связи. Сущность изобретения заключается в том, что для каждой фрагментированной дейтаграммы узел фильтрации получает параметры фильтрации по мере приема фрагментов дейтаграммы. Когда все параметры фильтрации доступны, узел применяет один или более фильтров в отношении параметров фильтрации, чтобы получить результат фильтрации для дейтаграммы, и сохраняет результат фильтрации в записи в таблице маршрутизации. Прежде чем получить результат фильтрации, узел сохраняет все фрагменты, принятые для дейтаграммы, в памяти. Когда результат фильтрации становится доступным, узел обрабатывает все фрагменты, уже принятые для дейтаграммы, в соответствии с результатом фильтрации. По мере приема каждого оставшегося фрагмента для дейтаграммы узел немедленно обрабатывает фрагмент в соответствии с результатом фильтрации. Когда принимается последний фрагмент, узел очищает память и запись таблицы маршрутизации для дейтаграммы. 5 н. и 26 з.п. ф-лы, 8 ил.

Реферат

Область техники, к которой относится изобретение

Настоящее изобретение относится в целом к передаче данных, а более конкретно к технологиям фильтрации и маршрутизации фрагментированных дейтаграмм в сети передачи данных.

Предшествующий уровень техники

Интернет-протокол (IP) является протоколом, который поддерживает передачу блоков данных, называемых дейтаграммами, от источников к получателям в сети передачи данных с коммутацией пакетов. Источники и получатели являются хост-компьютерами, которые идентифицируются посредством IP-адресов фиксированной длины. В терминологии IP “узел” - это устройство, которое реализует IP, “хост-компьютер” - это узел, который является оконечным пунктом IP-пакетов, явно адресованным ему, а “маршрутизатор” - это хост-компьютер, который также пересылает IP-пакеты, явно не адресованные ему. Чтобы передать данные получателю, источник формирует дейтаграмму с IP-заголовком и частью, соответствующей полезной нагрузке. IP-заголовок содержит IP-адреса источника и получателя, так же как и другие поля. Источник затем отправляет дейтаграмму как IP-пакет по направлению к получателю на основе информации о маршрутизации, которую источник имеет для получателя.

Узел может фильтровать IP-пакеты по разным причинам, как описано ниже. В контексте IP “фильтрация” - это процесс, предназначенный для того, чтобы идентифицировать разные типы IP-пакетов на основе определенных характеристик IP-пакетов. Эти характеристики описываются или определяются одним или более параметрами фильтрации, которые могут передаваться в IP-заголовке или части, соответствующей полезной нагрузке. В стеке протоколов IP находится на сетевом уровне, который находится ниже транспортного уровня, который, в свою очередь, находится ниже необязательного сеансового уровня, который находится ниже прикладного уровня. Сеть передачи данных может использовать протокол управления передачей (TCP), протокол пользовательских дейтаграмм (UDP) или некоторый другой протокол транспортного уровня. Параметры фильтрации могут передаваться в IP-заголовке, заголовке транспортного уровня (например, TCP-заголовке), заголовке сеансового уровня, заголовке прикладного уровня, полезной нагрузке прикладного уровня и так далее, или в их комбинации, все из которых инкапсулированы в дейтаграмму.

В контексте IP “фильтр” может быть рассмотрен как ящик, который предоставляет разные выходы для разных значений параметров фильтрации. В качестве примера, фильтр может быть определен на основе IP-адреса получателя и номера порта TCP получателя, равного 23. (TCP-порт относится к логическому каналу для ассоциированных данных.) Этот фильтр может использоваться, чтобы идентифицировать все IP-пакеты, предназначенные для telnet-сервера, работающего на хост-компьютере с этим IP-адресом получателя. Как правило, фильтрация может выполняться для того, чтобы отличить определенные IP-пакеты из потока IP-пакетов на основе характеристик, определенных параметрами фильтрации. Фильтрация позволяет осуществлять индивидуальное управление IP-пакетами, имеющими эти характеристики.

Фильтрация IP-пакетов является еще более перспективной при наличии IP-фрагментации. IP поддерживает фрагментацию дейтаграмм на более мелкие фрагменты. IP-фрагментация может использоваться, например, если дейтаграмма, которая должна быть отправлена, является слишком большой, чтобы быть переданной протокольным блоком на уровне ниже сетевого уровня. В этом случае большая дейтаграмма может быть разделена на многочисленные небольшие фрагменты, и каждый фрагмент может быть отправлен как отдельный IP-пакет. IP-пакеты для фрагментов будут содержать соответствующую информацию заголовка, которая может использоваться получателем, чтобы повторно собрать эти фрагменты.

Если дейтаграмма делится на многочисленные фрагменты, то параметры фильтрации могут передаваться только в одном фрагменте или поднаборе фрагментов, что впоследствии усложняет фильтрацию IP-пакетов. Например, параметры фильтрации могут быть номерами портов источника и получателя в TCP-заголовке, который в типичном случае передается в первом фрагменте дейтаграммы. Если узел фильтрации выполняет фильтрацию отдельно в отношении каждого IP-пакета, то IP-пакеты, которые не содержат все из параметров фильтрации, не могут быть правильно отфильтрованы. Узел фильтрации - это узел, который выполняет фильтрацию IP-пакетов и может быть хост-компьютером или маршрутизатором.

В одной традиционной схеме фильтрации фрагментированных дейтаграмм узел фильтрации буферизирует все из фрагментов дейтаграммы, повторно собирает дейтаграмму после того, как все из фрагментов были приняты, выполняет фильтрацию по повторно собранной дейтаграмме и (если необходимо) повторно фрагментирует дейтаграмму на фрагменты и отправляет фрагменты как отдельные IP-пакеты. Эта традиционная схема фильтрации имеет несколько недостатков. Первое, длительная буферизация всех фрагментов каждой дейтаграммы прерывает нормальный поток этих фрагментов, привносит лишние задержки в передачу дейтаграммы к ее конечному получателю и может, кроме того, вызвать неравномерную нагрузку канала связи. Второе, повторный сбор и повторная фрагментация каждой дейтаграммы требует дополнительной обработки узлом фильтрации. Если узел фильтрации является маршрутизатором, то повторный сбор и повторная фрагментация сделают маршрутизацию очень эффективной.

Чтобы уменьшить объем обработки, узел фильтрации может выполнять фильтрацию в отношении фрагментированных дейтаграмм без повторной сборки фрагментов дейтаграмм. Однако узлу все еще может потребоваться буферизовать все фрагменты каждой дейтаграммы и применять фильтр только после того, как все фрагменты приняты. Недостатки, связанные с длительной буферизацией, будут все еще иметь место в этом случае.

Поэтому есть необходимость в уровне техники, чтобы эффективно фильтровать и маршрутизировать фрагментированные дейтаграммы.

Сущность изобретения

Технологии для эффективной фильтрации фрагментированных дейтаграмм и маршрутизации фрагментов этих дейтаграмм описываются в данном документе. Для каждой фрагментированной дейтаграммы, которая идентифицируется уникальным идентификатором дейтаграммы, узел фильтрации получает параметры фильтрации для этой дейтаграммы, по мере того как фрагменты дейтаграммы принимаются. Когда все из параметров фильтрации для дейтаграммы доступны, узел применяет один или более фильтров в отношении параметров фильтрации, получает результат фильтрации для дейтаграммы и сохраняет результат фильтрации в информационном элементе в таблице маршрутизации (т.е., в записи таблицы маршрутизации) для дейтаграммы. Результат фильтрации (который может также называться решением по маршрутизации) указывает обработку, которая должна быть выполнена узлом для всех фрагментов этой дейтаграммы. Например, результат фильтрации может указывать, должен ли узел пропустить фрагменты дейтаграммы на более высокий уровень, пересылать фрагменты к получателю дейтаграммы, пересылать фрагменты по конкретному логическому или физическому каналу связи по направлению к получателю дейтаграммы, удалять все фрагменты дейтаграммы и т. д. Результат фильтрации получается на основе одного или более фильтров, которые в типичном случае предназначены для конкретного приложения.

Прежде чем получить результат фильтрации, узел фильтрации сохраняет все фрагменты, принятые для дейтаграммы, в памяти “фрагментов”, которая может быть любой памятью, подходящей для хранения данных. Когда результат фильтрации становится доступным, узел может обработать все фрагменты, уже принятые для дейтаграммы, в соответствии с результатом фильтрации. По мере последующего приема каждого оставшегося фрагмента для дейтаграммы узел может немедленно обработать фрагмент в соответствии с результатом фильтрации, сохраненным для дейтаграммы. Когда последний фрагмент для дейтаграммы принимается, узел может очистить часть памяти фрагментов, использованную дейтаграммой, и удалить запись таблицы маршрутизации для дейтаграммы.

Далее подробно описаны различные аспекты и варианты осуществления изобретения.

Перечень чертежей

Признаки и сущность настоящего изобретения станут более явными из изложенного ниже подробного описания, рассматриваемого вместе с чертежами, на которых используется сквозная нумерация позиций и на которых:

Фиг.1 - IP-пакет для дейтаграммы;

Фиг.2 - поля идентификатора примерной дейтаграммы;

Фиг.3 - фрагментация дейтаграммы на множество фрагментов;

Фиг.4 - процесс, выполненный узлом фильтрации, чтобы фильтровать фрагментированную дейтаграмму и чтобы маршрутизировать фрагменты дейтаграммы;

Фиг.5 - процесс управления таймерами для фрагментированных дейтаграмм;

Фиг.6 - запись таблицы маршрутизации для фрагментированной дейтаграммы;

Фиг.7 - блок-схема узла фильтрации; и

Фиг.8 - блок-схема устройства беспроводной связи и терминального оборудования.

Подробное описание изобретения

Слово "примерный" используется в данном документе, чтобы обозначать "служащий в качестве примера, отдельного случая или иллюстрации". Любой вариант осуществления или проект, описанный в данном документе как "примерный", необязательно должен быть истолкован как предпочтительный или выгодный по сравнению с другими вариантами осуществления или проектами.

Для ясности в нижеследующем описании используется следующая терминология. Сетевой уровень может принимать данные от более высокого уровня (например, транспортного уровня) и формировать интернет-дейтаграммы (или просто дейтаграммы). Сетевой уровень может также принимать IP-дейтаграммы от других элементов сети через один из его сетевых интерфейсов для обработки и пересылки через один из его оставшихся сетевых интерфейсов. Дейтаграмма может быть обработана и отправлена как один IP-пакет на сетевом уровне. Дейтаграмма может также быть разделена на множество фрагментов, и каждый фрагмент может быть отправлен как отдельный IP-пакет на сетевом уровне. Каждый IP-пакет может, таким образом, быть для целой нефрагментированной дейтаграммы или для одного фрагмента фрагментированной дейтаграммы. Каждый IP-пакет включает в себя IP-заголовок и часть, соответствующую полезной нагрузке.

Фиг.1 показывает IP-пакет для дейтаграммы. IP-пакет включает в себя некоторое количество полей, и для простоты ниже описываются только те поля, которые отвечают настоящему раскрытию.

Длина Интернет заголовка (IHL) - указывает длину IP-заголовка (в единицах 32-битных слов).

Общая длина - указывает общую длину IP-пакета, включающего в себя IP-заголовок и часть, соответствующую полезной нагрузке (в единицах 8-битных октетов).

Идентификация - несет значение идентификации, назначенное хост-компьютером, являющимся источником для содействия в повторной сборке фрагментов (если таковая имеет место) для дейтаграммы.

Флаги - содержит три бита, где бит MF является устанавливаемым в “0”, чтобы указать последний фрагмент дейтаграммы, и в “1”, чтобы указать, что один или более фрагментов следуют для дейтаграммы.

Смещение фрагмента - указывает положение фрагмента в дейтаграмме, что позволяет хост-компьютеру правильно повторно собрать фрагменты дейтаграммы.

Время жизни - указывает максимальное время, в течение которого дейтаграмме разрешено оставаться в IP-сети передачи данных.

Протокол - указывает протокол следующего более высокого уровня, используемый в части IP-пакета, соответствующей полезной нагрузке.

Адрес источника - несет IP-адрес хост-компьютера, являющегося источником.

Адрес получателя - несет IP-адрес хост-компьютера, являющегося получателем.

Полезная нагрузка - несет полезную нагрузку IP-пакета и имеет переменную длину.

Формат IP-пакета описан в RFC 791, озаглавленном “Internet Protocol DARPA Internet Program Protocol Specification”, сентябрь 1981. Другие протоколы для других уровней также определяют форматы для их блоков данных. Например, на транспортном уровне формат, использованный протоколом TCP, описывается в RFC 793, озаглавленном “Transmission Control Protocol”, сентябрь 1980, а формат, использованный протоколом UDP, описывается в RFC 768, озаглавленном “User Datagram Protocol”, август 1980.

Фиг.2 показывает поля примерного идентификатора 200 дейтаграммы, используемого, чтобы уникально идентифицировать каждую дейтаграмму. Идентификатор 200 дейтаграммы формируется сцеплением полей идентификации, протокола, адреса источника и адреса получателя IP-заголовка. RFC 791 требует, чтобы хост-компьютер, являющийся источником, устанавливал поле идентификации в значение, которое является уникальным как для (1) заданной комбинации IP-адреса источника, IP-адреса получателя и протокола, используемого для дейтаграммы, так и для (2) времени, в течение которого дейтаграмма будет действительна в сети передачи данных. Одинаковое значение идентификации используется для всех фрагментов заданной дейтаграммы. Таким образом, все IP-пакеты с одинаковым набором значений для этих четырех полей могут быть рассмотрены как принадлежащие одной и той же дейтаграмме. В общей реализации хост-компьютер, являющийся источником, случайным образом выбирает значение для поля идентификации, когда он начинает отправку дейтаграмм, и после этого увеличивает значение идентификации всякий раз, когда он отправляет новую дейтаграмму (невзирая на протокол). В этом случае идентификатор дейтаграммы может быть задан сцеплением только полей идентификации, адреса источника и адреса получателя.

Фиг.3 показывает фрагментацию дейтаграммы на множество фрагментов. Исходная дейтаграмма содержит IP-заголовок и часть, соответствующую полезной нагрузке, и может превосходить возможности по переносу данных единичного блока данных на более низком уровне (например, канальном уровне). Если часть дейтаграммы, соответствующая полезной нагрузке, содержит M октетов и если каждый блок данных на более низком уровне может нести L октетов плюс IP-заголовок, то дейтаграмма может быть разделена на (M/L) фрагментов, где (x) означает оператор округления до ближайшего целого, который дает в результате ближайшее большее целое число для x. Так как RFC 791 требует, чтобы часть полезной нагрузки дейтаграммы была разделена по 8-октетной границе, для дейтаграммы может потребоваться более чем (M/L) фрагментов. Дейтаграмма может быть разделена на N фрагментов, которые помечаются как фрагменты 1 по N, где N может быть равно или больше, чем (M/L).

Для того чтобы фрагментировать дейтаграмму, IP-заголовок для каждого из N фрагментов генерируется с использованием IP-заголовка дейтаграммы. Новые значения для полей общей длины, смещения фрагмента и флага определяются для IP-заголовка каждого фрагмента. Остающиеся поля IP-заголовка каждого фрагмента копируются из первоначального IP-заголовка дейтаграммы. Опции из первоначального IP-заголовка только копируются в IP-заголовок первого фрагмента. В заключение, пересчитывается контрольная сумма IP-заголовка для каждого фрагмента. Часть дейтаграммы, соответствующая полезной нагрузке, разделяется на N более мелких частей по соответствующей 8-октетной границе. Часть каждого фрагмента, соответствующая полезной нагрузке, заполняется соответствующей одной из N частей. Бит MF в поле флагов IP-заголовка для каждого из фрагментов с 1 по N-1 устанавливается в “1”, чтобы указать, что один или более фрагментов будут следовать для дейтаграммы. Бит MF для фрагмента N устанавливается в “0”, чтобы указать, что этот фрагмент является последним фрагментом для дейтаграммы. Поле смещения фрагмента для каждого фрагмента устанавливается в значение, которое указывает начальное положение части полезной нагрузки в этом фрагменте относительно начала части полезной нагрузки в дейтаграмме. Поле общей длины устанавливается равным длине фрагмента.

Хост-компьютер, являющийся источником, отправляет N фрагментов для дейтаграммы как N отдельных IP-пакетов, в типичном случае по одному IP-пакету, по сети передачи данных. Поскольку эти IP-пакеты могут быть отправлены через разные маршруты, заданный узел может принять эти IP-пакеты не по порядку следования. В последующем описании “фрагмент 1” соответствует первому фрагменту дейтаграммы, а “первый принятый фрагмент” соответствует первому фрагменту, принятому для дейтаграммы, который может быть или может не быть фрагментом 1.

Узел фильтрации может эффективно выполнять фильтрацию фрагментированных дейтаграмм и маршрутизацию фрагментов для этих дейтаграмм следующим образом. Для каждой фрагментированной дейтаграммы узел получает параметры фильтрации для дейтаграммы по мере приема фрагментов дейтаграммы. Как только все из параметров фильтрации для дейтаграммы становятся доступны, узел применяет один или более фильтров в отношении параметров фильтрации, получает результат фильтрации для дейтаграммы и сохраняет результат фильтрации в записи (или строке) в таблице маршрутизации. Результат фильтрации указывает обработку, которая должна быть выполнена узлом для всех фрагментов дейтаграммы. Прежде чем получить результат фильтрации, узел сохраняет все фрагменты, принятые для дейтаграммы, в памяти фрагментов. Как только результат фильтрации становится доступным, узел может обработать все фрагменты, уже принятые для дейтаграммы, в соответствии с результатом фильтрации. По мере последующего приема каждого оставшегося фрагмента для дейтаграммы узел может немедленно обработать фрагмент в соответствии с результатом фильтрации. Когда последний фрагмент для дейтаграммы принимается, узел может очистить часть памяти фрагментов, использованную дейтаграммой, и удалить запись таблицы маршрутизации для дейтаграммы.

Фрагменты дейтаграммы могут быть сохранены разными способами в памяти фрагментов перед тем, как результат маршрутизации становится доступным. Так как размеры фрагментов могут быть не известны априори и фрагменты могут быть приняты не по порядку, каждый фрагмент может быть сохранен в отдельном буфере, когда фрагмент принимается. Буфер может быть частью памяти фрагментов соответствующего размера, который выделяется, как это необходимо. Это позволяет эффективно использовать память фрагментов, так как буфер соответствующего размера может выделяться, когда и если этот буфер действительно необходим. Может использоваться механизм для того, чтобы (1) определять, какие фрагменты дейтаграммы были приняты, (2) определять буферы, где сохраняются принятые фрагменты, и (3) определять другую подходящую информацию, если таковая имеется для дейтаграммы. Этот механизм может быть реализован, например, с помощью списка очередей, связанного списка и т. д., как известно в области техники. Последующее описание предполагает, что фрагменты сохраняются в отдельных буферах. Однако фрагменты могут также сохраняться другими способами, и это находится в рамках объема изобретения.

Вообще, параметры фильтрации для каждой фрагментированной дейтаграммы могут переноситься в одном или более фрагментах, которые именуются как “целевые” фрагменты. Однако многие приложения используют параметры фильтрации, которые передаются в IP-заголовке и/или заголовке для протокола вышерасположенного уровня, такого как TCP, UCP, ICMP и т. д. Так как минимальный размер фрагмента равен 576 октетам, IP-заголовок и заголовки вышерасположенных уровней в типичном случае переносятся в фрагменте 1 дейтаграммы. Для приложений, которые используют параметры фильтрации, переданные в IP-заголовке и заголовках вышерасположенных уровней, в типичном случае присутствует только один целевой фрагмент, который обычно является фрагментом 1 дейтаграммы. Для этих приложений все из параметров фильтрации для дейтаграммы могут быть получены из фрагмента 1 дейтаграммы, который в типичном случае также является первым принятым фрагментом для дейтаграммы, и результат фильтрации может быть получен для дейтаграммы на основе первого принятого фрагмента. Все последующие фрагменты для дейтаграммы могут быть обработаны по мере их приема без необходимости буферизовать эти фрагменты.

Узел фильтрации может использовать таймер для каждой фрагментированной дейтаграммы, чтобы гарантировать, что фрагменты для “устаревших” дейтаграмм удаляются из памяти фрагментов. Таймер для каждой дейтаграммы может быть установлен в первоначальное значение, когда принимается первый фрагмент для дейтаграммы. Это первоначальное значение может быть, например, значением времени жизни в IP-заголовке фрагмента. Когда таймер истекает, запись таблицы маршрутизации для дейтаграммы может быть удалена, и все фрагменты, сохраненные в памяти фрагментов, для дейтаграммы могут быть удалены, таким образом, очищая часть памяти фрагментов, используемую дейтаграммой.

Узел фильтрации может выполнять следующую служебную обработку для разных фрагментов фрагментированной дейтаграммы:

- первый принятый фрагмент для дейтаграммы - создание записи для дейтаграммы в таблице маршрутизации и старт таймера для дейтаграммы;

- целевой фрагмент(ы) - получение всех параметров фильтрации для дейтаграммы и применение, по меньшей мере, одного фильтра в отношении параметров фильтрации, чтобы получить результат фильтрации для дейтаграммы; и

- последний фрагмент для дейтаграммы - очистка части памяти фрагментов, использованной дейтаграммой, и удаление записи таблицы маршрутизации для дейтаграммы.

Фиг.4 показывает блок-схему процесса 400, выполняемого узлом фильтрации для фильтрации фрагментированной дейтаграммы и маршрутизации фрагментов этой дейтаграммы. Фрагментированная дейтаграмма составлена из множества фрагментов, и каждый фрагмент отправляется как один IP-пакет. Таким образом, “фрагменты” и “IP-пакеты” являются синонимичными терминами для фрагментированной дейтаграммы. Фиг.4 показывает обработку одного IP-пакета.

Изначально узел фильтрации принимает IP-пакет (этап 412). Узел затем определяет, является ли IP-пакет фрагментированной дейтаграммой (этап 414). Это может быть выполнено посредством проверки бита MF и поля смещения фрагмента в IP-заголовке IP-пакета. IP-пакет является нефрагментированной дейтаграммой, если поле смещения фрагмента установлено в 0 (что является истиной только для фрагмента 1), и бит MF установлен в “0” (указывающий, что никакой другой фрагмент не будет доступен для дейтаграммы). Если IP-пакет является нефрагментированной дейтаграммой (т. е., ответ 'нет' на этапе 414), то узел применяет один или более фильтров к IP-пакету и обрабатывает и/или пересылает IP-пакет на основе результата фильтрации (этап 416). Узел затем возвращается на этап 412, чтобы обработать следующий IP-пакет.

Если текущий IP-пакет является фрагментированной дейтаграммой, как определено на этапе 414, то узел фильтрации определяет, является ли этот IP-пакет первым принятым для дейтаграммы, который может быть или может не быть фрагментом 1 дейтаграммы, так как узел может принять фрагменты не по порядку (этап 422). Это определение может быть сделано посредством (1) получения идентификатора дейтаграммы, например, как сцепление значений идентификации, протокола, адреса источника и адреса получателя в IP-заголовке IP-пакета, (2) поиска записей таблицы маршрутизации для идентификатора этой дейтаграммы и (3) указания текущего IP-пакета в качестве первого принятого фрагмента, если идентификатор дейтаграммы не найден в каком-либо из элементов таблицы маршрутизации.

Если текущий IP-пакет является первым принятым фрагментом, то узел фильтрации создает новую запись таблицы маршрутизации для дейтаграммы, инициализирует поля новой записи таблицы маршрутизации и запускает таймер для дейтаграммы (этап 424). Запись таблицы маршрутизации для дейтаграммы индексируется по идентификатору дейтаграммы. Запись таблицы маршрутизации включает в себя указатель, который указывает на местоположение памяти фрагментов, используемое для того, чтобы хранить фрагменты дейтаграммы. Узел затем переходит на этап 432.

Если текущий IP-пакет не является первым принятым фрагментом, как определено на этапе 422, то узел фильтрации определяет, доступен ли результат фильтрации для дейтаграммы в записи таблицы маршрутизации для дейтаграммы (этап 426). Если результат фильтрации существует, то узел обрабатывает/пересылает IP-пакет в соответствии с результатом фильтрации (этап 428) и затем переходит на этап 442. Иначе, если результат фильтрации недоступен, то узел определяет, были ли получены все параметры фильтрации для дейтаграммы из текущего IP-пакета и приняты ли уже все IP-пакеты, которые также являются фрагментами этой дейтаграммы (этап 432). Если все параметры фильтрации не были получены, то узел выделяет буфер в памяти фрагментов для текущего IP-пакета и сохраняет IP-пакет в буфере (этап 438). Узел затем возвращается на этап 412, чтобы обработать следующий IP-пакет. Иначе, если все параметры фильтрации были получены, то узел применяет фильтр(ы) в отношении параметров фильтрации, получает результат фильтрации для дейтаграммы и сохраняет результат фильтрации в записи таблицы маршрутизации, созданной для дейтаграммы (этап 434). Узел затем обрабатывает/пересылает текущий IP-пакет, так же как и все уже принятые IP-пакеты, которые также являются фрагментом этой дейтаграммы и сохранены в памяти фрагментов, в соответствии с результатом фильтрации (этап 436). Узел затем переходит к этапу 442.

Для варианта осуществления, показанного на фиг.4, узел фильтрации также отслеживает то, какие фрагменты были приняты для дейтаграммы, и обновляет эту информацию всякий раз, когда для дейтаграммы принимается новый фрагмент (этап 442). Узел может выполнять эту регистрацию на основе смещения фрагмента каждого фрагмента (которое получается из поля смещения фрагмента) и размера полезной нагрузки каждого фрагмента (который получается на основе полей IHL и общей длины). Узел затем определяет, были ли приняты все фрагменты дейтаграммы, на основе обновленной информации о фрагменте (этап 444). Целая дейтаграмма принимается, если (1) был принят последний фрагмент дейтаграммы (последний фрагмент имеет бит MF, установленный в “0”), и (2) все другие фрагменты дейтаграммы были также приняты (что может быть определено на основе смещения фрагмента и размера полезной нагрузки каждого принятого фрагмента). Если целая дейтаграмма была принята, то узел удаляет запись таблицы маршрутизации для дейтаграммы и удаляет все фрагменты дейтаграммы из памяти фрагментов (этап 446). С этапов 444 и 446 узел возвращается на этап 412, чтобы обработать следующий IP-пакет.

В другом варианте осуществления вместо удаления элемента таблицы маршрутизации для дейтаграммы и очистки памяти фрагментов, используемой дейтаграммой, на этапе 446, узел фильтрации просто предписывает истечение таймера для дейтаграммы на этапе 446. Механизм управления таймером затем удалит запись таблицы маршрутизации и очистит память фрагментов, используемую этой дейтаграммой, так как ее таймер истек, как описано ниже. В еще одном варианте осуществления узел фильтрации не отслеживает информацию информации о фрагменте и не выполняет обработку, показанную на этапах 442, 444 и 446. Для этого варианта осуществления узел фильтрации полагается на механизм управления таймером, чтобы удалить запись таблицы маршрутизации и удалить фрагменты в памяти фрагментов для старых дейтаграмм, когда их таймеры естественным образом истекли.

Как показано на фиг.4, фрагменты дейтаграммы временно хранятся в буферах в памяти фрагментов до тех пор, пока все параметры фильтрации для дейтаграммы не будут приняты и результат фильтрации не сможет быть получен для дейтаграммы. Если все из параметров фильтрации передаются в фрагменте 1 дейтаграммы, то результат фильтрации может быть получен, как только будет принят фрагмент 1, который в типичном случае является первым принятым фрагментом для дейтаграммы, если фрагменты принимаются не по порядку. В этом случае как задержка, связанная с маршрутизацией, так и требования касаемо буферизации минимизируются для дейтаграммы. Кроме того, фрагмент 1 может быть без труда идентифицирован значением, равным 0, для поля смещения фрагмента.

Если все из параметров фильтрации не переносятся в фрагменте 1, то и задержка, связанная с маршрутизацией, и требования касаемо буферизации увеличиваются в пропорции к задержке, требуемой узлом, чтобы получить все из требуемых параметров фильтрации. Кроме того, если множество фрагментов требуется для получения всех параметров фильтрации, то параметры фильтрации также нужно будет временно сохранять по мере их приема, до того времени, когда фильтр(ы) может быть применен. Соответствующая обработка выполняется, чтобы обнаружить целевой фрагмент(ы), который переносит требуемые параметры фильтрации.

Эффективная фильтрация может быть выполнена посредством проектирования таких фильтров, чтобы использовались параметры, которые предполагаются быть доступными только в одном фрагменте (чтобы избежать буферизации параметров фильтрации) и предпочтительно в фрагменте 1 (чтобы избежать размещения в буфер фрагментов). Если хост-компьютер, являющийся источником, знает о фильтрации, применяемой узлом фильтрации, то хост-компьютер, являющийся источником, может отправить фрагменты таким способом, что узел фильтрации может принять все параметры фильтрации так скоро, насколько возможно. Например, узел-источник может отправить фрагменты не по порядку, так что фрагменты, переносящие параметры фильтрации, отправляются первыми. Вообще, фильтры могут быть заданы так и/или фрагменты могут быть отправлены так, что задержка, связанная с маршрутизацией, и требование касаемо буферизации могут быть минимизированы до возможной степени.

Узел фильтрации буферизирует фрагменты дейтаграммы в буферы до тех пор, пока результат фильтрации для дейтаграммы не будет получен. Некоторые фрагменты могут быть сброшены или испорчены при прохождении через сеть передачи данных (по любым причинам) и могут быть не приняты узлом. Если фрагмент, содержащий требуемый параметр фильтрации, сброшен, то результат фильтрации для дейтаграммы не может быть получен, и все фрагменты, принятые для дейтаграммы, могут находиться в памяти неопределенное время до тех пор, пока память фрагментов не будет очищена каким-либо механизмом. Даже если результат фильтрации для дейтаграммы получен, любой сброшенный фрагмент приведет к сбою в приеме целой дейтаграммы, и запись таблицы маршрутизации для дейтаграммы может храниться в памяти неопределенное время, если запись таблицы маршрутизации не будет удалена каким-либо механизмом.

Таймер может использоваться для каждой дейтаграммы, чтобы избежать ситуаций, в которых запись таблицы маршрутизации и/или буферы для дейтаграммы сохраняются неопределенное время, например, так как фрагмент сброшен сетью передачи данных. Таймер устанавливается в первоначальное значение, когда принимается первый фрагмент для дейтаграммы. Это первоначальное значение должно быть достаточно большим, так чтобы узел преждевременно не удалил запись таблицы маршрутизации или какие-либо ожидающие фрагменты, уже принятые для дейтаграммы. Это первоначальное значение должно также быть равно или меньше, чем время, требуемое для полного цикла значения в поле идентификации, так чтобы результат фильтрации, полученный для дейтаграммы, ошибочно не был применен к другой дейтаграмме с таким же значением идентификации. Первоначальное значение может быть установлено в значение в поле времени жизни IP-заголовка, например, или в некоторое другое значение времени.

Фиг.5 показывает блок-схему процесса 500 управления таймерами для фрагментированных дейтаграмм. Таймер для фрагментированной дейтаграммы устанавливается, когда принимается первый фрагмент для дейтаграммы, как показано на фиг. 4. После этого, таймер обновляется (например, уменьшается) на количество времени, которое прошло после последнего обновления. После истечения таймера дейтаграмма считается “устаревшей” и все фрагменты, принятые для дейтаграммы, и ее запись таблицы маршрутизации могут быть удалены. Это предотвращает накопление старых фрагментированных дейтаграмм в памяти фрагментов.

Узел обновляет таймер для каждой фрагментированной дейтаграммы, например, периодически или когда он запущен некоторым событием (этап 512). Затем узел определяет, истек ли таймер для какой-либо дейтаграммы (этап 514). Если ответ - 'да', то узел получает идентификатор дейтаграммы для каждой устаревшей дейтаграммы с истекшим таймером (этап 516). Узел затем удаляет запись таблицы маршрутизации для каждой устаревшей дейтаграммы и сбрасывает все фрагменты, сохраненные в памяти фрагментов для устаревшей дейтаграммы (этап 518). Сбрасывание устаревших и/или неполных дейтаграмм не является катастрофическим, так как протокол на более высоком уровне будет, по всей вероятности, выполнять соответствующее корректирующее действие, например инициировать повторную передачу отсутствующих дейтаграмм.

Процесс 500 может выполняться периодически, например, каждое предварительно определенное число секунд. Процесс 500 может также выполняться будучи инициированным, например, после обработки каждого принятого IP-пакета.

Фиг.6 показывает вариант осуществления табличной записи 600 в таблице маршрутизации для фрагментированной дейтаграммы. Для этого варианта осуществления поле 612 хранит идентификатор дейтаграммы, который может быть сформирован из полей в IP-заголовке первого принятого фрагмента дейтаграммы, как описано выше. Запись таблицы маршрутизации индексируется идентификатором дейтаграммы. Поле 614 хранит таймер для дейтаграммы, который устанавливается в предварительно определенное значение, когда создается запись таблицы маршрутизации, и после этого обновляется, например, периодически или будучи инициированным некоторым событием.

Поле 616 хранит параметры фильтрации, уже принятые для дейтаграммы. Если все из параметров фильтрации передаются в одном фрагменте, то фильтр(ы) может быть применен, и результат фильтрации может быть получен, когда принимается этот фрагмент. В этом случае поле 616 не используется. Однако, если все из параметров фильтрации для дейтаграммы переносятся в множестве фрагментов, то параметры фильтрации могут сохраняться в поле 616 по мере их приема, и фильтр(ы) может быть применен после того, как все из параметров фильтрации приняты. Поле 616 может приниматься во внимание для определения по этапу 432 на фиг.4.

Поле 618 хранит результат фильтрации для дейтаграммы, который получается от применения фильтра(ов) к параметрам фильтрации для дейтаграммы. Поле 618 устанавливается в известное состояние, когда создается запись таблицы маршрутизации, чтобы указать, что результат фильтрации еще недоступен. Поле 618 может проверяться, чтобы определить, доступен ли результат фильтрации, для этапа 426 на фиг.4. Результат фильтрации, если доступен, используется, чтобы обработать/переслать все фрагменты дейтаграммы. Результат фильтрации может включать в себя разные типы информации, такие как, например, (1) касаемо того, пропустить ли фрагменты дейтаграммы на вышерасположенный уровень, удалить фрагменты или переслать фрагменты хост-компьютеру, являющемуся получателем, (2) информацию маршрутизации для хост-компьютера, являющегося получателем, такую как адрес интерфейса или шлюз, если применимо, (3) идентификатор канала связи для многоканальных интерфейсов, (4) метки для классификации качества обслуживания (QoS) и т. д.

Поле 620 хранит информацию для фрагментов дейтаграммы, например смещение фрагмента и размер полезной нагрузки каждого фрагмента. Эта информация о фрагменте используется, чтобы определить, была ли принята целая дейтаграмма, для этапа 444 на фиг.4. Поле 620 может быть очищено, когда запись таблицы маршрутизации создается и после этого заполняется битом MF, смещением фрагмента и размером полезной нагрузки для каждого принятого фрагмента. Поле 622 хранит указатель на местоположение в памяти фрагментов, в которой хранятся фрагменты дейтаграммы.

Фиг. 7 показывает блок-схему варианта осуществления узла 700, выполненного с возможностью фильтровать дейтаграммы и маршрутизировать фрагменты. В узле 700 процессор 720 принимает IP-пакеты и обрабатывает к