ПРЕДОСТАВЛЕНИЕ ВОЗМОЖНОСТИ СЕТЕВЫМ УСТРОЙСТВАМ ВЫПОЛНЯТЬ НЕСКОЛЬКО АЛГОРИТМОВ УПРАВЛЕНИЯ ПЕРЕГРУЖЕННОСТЬЮ
ENABLING NETWORK DEVICES TO RUN MULTIPLE CONGESTION CONTROL ALGORITHMS

Уровень техники
Протокол управления передачей (TCP) позволяет двум сетевым устройствам устанавливать соединение по сети и обмениваться потоками данных по соединению в форме пакетов. TCP гарантирует доставку данных, а также гарантирует то, что пакеты будут доставлены в том же порядке, в котором они отправлены.
TCP использует алгоритмы управления перегруженностью, которые помогают снимать перегруженность сети посредством активного регулирования скорости, с которой пакеты передаются (т.е. отправляются) из источника. В сетях с высокой пропускной способностью-задержкой эти активные меры приводят к существенному неполному использованию посредством TCP пропускной способности сети при наличии даже небольшого процента потерь пакетов. Например, некоторые из операционных систем семейства Windows используют форму TCP, которая реализует широко распространенный алгоритм управления перегруженностью NewReno, который плохо работает в окружениях с высокой пропускной способностью-задержкой.
Сетевое научное сообщество предложило несколько усовершенствований и модификаций в алгоритм управления перегруженностью TCP в попытке повысить его производительность в высокоскоростных сетях. Необходимо принимать во внимание несколько факторов, и нет решения типа "один масштаб подходит для всего". Чем более активный алгоритм, тем более неблагоприятный он для других TCP-потоков. Дополнительно, поскольку нет универсального общепринятого стандарта, решение о том, какой алгоритм управления перегруженностью реализовать для данной операционной системы, является достаточно сложным.
Сущность изобретения
Данная сущность представляет иллюстративный контекст для аспектов изобретения в упрощенной форме. Она не предназначена для того, чтобы использоваться для того, чтобы определять область применения заявляемого предмета изобретения. Аспекты изобретения более полно описываются ниже в подробном описании.
В данном документе раскрыты системы, способы и программное обеспечение (к примеру, инфраструктура) для создания различных модулей управления перегруженностью (CCM), которые могут взаимодействовать (к примеру, быть "встроенными") со стеком сетевой передачи данных (к примеру, стеком TCP/IP). Программно-реализованные абстракции, задающие события управления транспортировкой, алгоритмы управления перегруженностью (CCA) и другую информацию, могут быть раскрыты через интерфейс прикладного программирования, к примеру, операционной системы. Эти абстракции могут быть использованы для того, чтобы определять тип CCM, из которого несколько CCM могут быть сформированы (к примеру, созданы экземпляры).
Стек сетевой передачи данных может быть выполнен с возможностью выбирать один из нескольких доступных CCM для того, чтобы управлять перегруженностью для данного соединения. Этот выбор может быть основан на любых из множества факторов, включая, но не только: сетевое окружение; характеристики тракта соединения; характеристики линии связи в соединении; значение параметра сокета приложения; другие факторы и любая надлежащая комбинация вышеозначенного. Таким образом, CCM могут быть выбраны и реализованы на основе соединения, так что несколько CCM могут работать параллельно.
Стек сетевой передачи связи может сообщать о событиях управления транспортировкой для данного соединения в соответствующий CCM, и CCM может обновлять значения одной или более переменных состояния для соединения соответствующим образом. CCM может предоставлять обновленные значения одной или более переменных состояния в стек сетевой передачи данных, и стек может модифицировать свое управление соединением соответствующим образом.
В некоторых вариантах осуществления для того, чтобы уменьшить объем памяти, потребляемой посредством сохранения информации состояния для каждого соединения, информация может выбираться не из всех пакетов, передаваемых и/или принимаемых для соединения. Частота выборки для каждого соединения может быть определена на основе множества факторов, включая, но не только, скорость передачи по соединению и время на передачу и подтверждение приема (RTT) соединения. Пул памяти может быть выделен для управления перегруженностью, и часть пула памяти может быть выделена каждому соединению на основе его частоты выборки.
Информация может выбираться из пакетов, отправляемых и/или принимаемых в каждом соединении согласно частоте выборки соединения, и выборочная информация может быть сохранена в части памяти, выделенной каждому соответствующему соединению. Например, время, в которое фрагмент информации (к примеру, байты данных) передается, может быть выбрано, и время, в которое подтверждение приема фрагмента данных принимается, может быть выбрано, и эта информация может быть использована для того, чтобы определять RTT для соединения. Частота выборки и объем памяти, выделенный каждому соединению, может корректироваться по мере того, как скорость передачи и/или RTT соединения изменяется.
В некоторых вариантах осуществления сетевой интерфейсный модуль, к примеру, сетевая интерфейсная карта (NIC), может формировать временные метки для пакетов, принимаемых в соединении. Для каждого пакета, принимаемого из сети, временная метка может быть сформирована и передана в стек сетевой передачи данных, чтобы использоваться для управления перегруженностью соединения. Например, сетевой интерфейсный модуль может сохранять информацию временных меток, ассоциативно связывающую временную метку и соединение, в структуре данных (к примеру, в структуре данных NET_BUFFER и/или NET_BUFFER_LIST операционной системы Windows Vista™). Эта информация временных меток может быть использована посредством стека сетевой передачи данных для того, чтобы определять RTT и/или другую информацию управления транспортировкой по соединению. Стек сетевой передачи данных может сообщать RTT и/или другую информацию в CCM, управляющий перегруженностью для соединения. CCM может обновлять переменные состояния соединения и предоставлять обновленные значения одной или более переменных состояния соединения в стек сетевой передачи данных. Стек затем может модифицировать свое управление соединением соответствующим образом.
В варианте осуществления изобретения предусмотрена система для создания модуля управления перегруженностью для управления перегруженностью по сетевому соединению. Система включает в себя интерфейс прикладного программирования, раскрывающий одну или более абстракций событий для использования при определении типов модулей управления перегруженностью, из которых могут быть сформированы модули управления перегруженностью, причем каждая абстракция события определяет событие управления транспортировкой.
В другом варианте осуществления изобретения предусмотрена система управления перегруженностью по одному или более сетевых соединений между сетевым устройством и сетью передачи данных. Система включает в себя стек сетевой передачи данных, выполненный с возможностью управлять сетевой передачей данных по одному или более соединений, и один или более модулей управления перегруженностью, причем каждый модуль управления перегруженностью определяет алгоритм управления перегруженностью, чтобы управлять перегруженностью по соответствующему из одного или более сетевых соединений, и сохраняет одну или более переменных состояния соединения для соответствующего соединения. Стек сетевой передачи данных выполнен с возможностью, для каждого одного или более соединений, оповещать модуль управления перегруженностью, который управляет перегруженностью по соединению, об одном или более событий управления транспортировкой, которые возникают в соединении.
В другом варианте осуществления изобретения предусмотрен компьютерный программный продукт. Компьютерный программный продукт включает в себя машиночитаемый носитель и машиночитаемые сигналы, сохраненные на машиночитаемом носителе, которые задают инструкции, которые, в результате приведения в исполнение посредством компьютера, управляют компьютером так, чтобы осуществлять способ управления перегруженностью по сетевому соединению между сетевым устройством и сетью передачи данных. Способ включает в себя этапы: выбора первого типа управления перегруженностью для первого соединения; формирования первого модуля управления перегруженностью первого типа и управления перегруженностью сети по первому соединению с помощью первого модуля управления перегруженностью.
В другом варианте осуществления изобретения перегруженность по сетевому соединению управляется. Частота, при которой следует выбирать информацию из пакетов, передаваемых из сетевого устройства по сетевому соединению, определяется, по меньшей мере, частично на основе скорости передачи сетевого соединения и времени на передачу и подтверждение приема для соединения. Информация из пакетов, передаваемых по соединению, выбирается на определенной частоте выборки, перегруженность сетевого соединения управляется, по меньшей мере, частично на основе выборочной информации.
В еще одном другом варианте осуществления изобретения предусмотрена система управления перегруженностью по сетевому соединению. Система включает в себя стек сетевой передачи данных, выполненный с возможностью определять частоту, при которой следует выбирать информацию из пакетов, передаваемых из сетевого устройства по сетевому соединению, по меньшей мере, частично на основе скорости передачи сетевого соединения и времени на передачу и подтверждение приема для соединения, выбирать, на определенной частоте выборки, информацию из пакетов, передаваемых по соединению, и управлять перегруженностью сетевого соединения, по меньшей мере, частично на основе выборочной информации.
В другом варианте осуществления изобретения предусмотрен компьютерный программный продукт, который включает в себя машиночитаемый носитель и машиночитаемые сигналы, сохраненные на машиночитаемом носителе, которые задают инструкции, которые, в результате приведения в исполнение посредством компьютера, управляют компьютером так, чтобы осуществлять способ управления перегруженностью по сетевому соединению. Способ включает в себя этапы: определения частоты, при которой следует выбирать информацию из пакетов, передаваемых из сетевого устройства по сетевому соединению, по меньшей мере, частично на основе скорости передачи сетевого соединения и времени на передачу и подтверждение приема для соединения; выборки, на определенной частоте выборки, информации из пакетов, передаваемых по соединению; и управления перегруженностью сетевого соединения, по меньшей мере, частично на основе выборочной информации.
В другом варианте осуществления изобретения перегруженность сетевого соединения между сетевым устройством и сетью передачи данных управляется. Сетевое устройство включает в себя стек сетевой передачи данных и отдельный сетевой интерфейсный модуль. В сетевом интерфейсном модуле пакет принимается по сетевому соединению из сети передачи данных. Временная метка формируется в сетевом интерфейсном модуле, при этом временная метка соответствует времени, в которое принят пакет. Информация, ассоциативно связывающая временную метку с пакетом, сохраняется в структуре данных, доступной посредством стека сетевой передачи данных, и пакет отправляется в стек сетевой передачи данных.
В еще одном другом варианте осуществления изобретения предусмотрена система управления перегруженностью по сетевому соединению между сетевым устройством и сетью передачи данных. Сетевое устройство включает в себя стек сетевой передачи данных. Система включает в себя сетевой интерфейсный модуль, выполненный с возможностью принимать пакет по сетевому соединению из сети передачи данных, формировать временную метку в сетевом интерфейсном модуле, при этом временная метка соответствует времени, в которое принят пакет, сохранять информацию, ассоциативно связывающую временную метку с пакетом, в структуре данных, доступной посредством стека сетевой передачи данных, и отправлять пакет в стек сетевой передачи данных.
В другом варианте осуществления изобретения предусмотрен вычислительный программный продукт, который включает в себя машиночитаемый носитель и машиночитаемые сигналы, сохраненные на машиночитаемом носителе, которые задают инструкции, которые, в результате приведения в исполнение посредством компьютера, управляют компьютером так, чтобы осуществлять способ управления перегруженностью по сетевому соединению между сетевым устройством и сетью передачи данных. Сетевое устройство включает в себя стек сетевой передачи данных и отдельный сетевой интерфейсный модуль. Способ включает в себя этапы: в сетевом интерфейсном модуле, приема пакета по сетевому соединению из сети передачи данных; формирования временной метки в сетевом интерфейсном модуле, при этом временная метка соответствует времени, в которое принят пакет; сохранение информации, ассоциативно связывающей временную метку с пакетом, в структуре данных, доступной посредством стека сетевой передачи данных; и отправки пакета в стек сетевой передачи данных.
Другие преимущества, новые признаки и цели изобретения, а также его аспекты и варианты осуществления, должны стать очевидными из последующего подробного описания изобретения, включающего в себя его аспекты и варианты осуществления, если рассматривать их вместе с чертежами, которые являются схематичными и необязательно нарисованы в масштабе. На чертежах каждый идентичный или практически идентичный компонент, который проиллюстрирован на различных чертежах, представляется посредством одного числа. Для понятности не все компоненты помечены на всех чертежах, а также не все компоненты каждого варианта осуществления или аспекта изобретения показаны, если иллюстрация необязательна для того, чтобы предоставлять возможность специалистам в данной области техники понимать изобретение.
Краткое описание чертежей
Фиг.1 - это блок-схема, иллюстрирующая пример системы управления перегруженностью одного или более сетевых соединений между сетевым устройством и сетью передачи данных, согласно некоторым вариантам осуществления изобретения.
Фиг.2 - это блок-схема, иллюстрирующая пример системы определения типов CCM для управления перегруженностью сетевого соединения, согласно некоторым вариантам осуществления изобретения.
Фиг.3 - это блок-схема последовательности операций, иллюстрирующая пример способа управления перегруженностью сетевого соединения, согласно некоторым вариантам осуществления изобретения.
Фиг.4 - это таблица, иллюстрирующая пример частот выборки для соединений при определенных комбинациях скорости соединения и RTT, согласно некоторым вариантам осуществления изобретения.
Фиг.5 - это блок-схема, иллюстрирующая пример структуры данных для сохранения информации, выбранной из пакетов, принимаемых по соединению, согласно некоторым вариантам осуществления изобретения.
Фиг.6 - это блок-схема последовательности операций, иллюстрирующая пример способа управления перегруженностью сетевого соединения, согласно некоторым вариантам осуществления изобретения.
Фиг.7 иллюстрирует пример способа управления перегруженностью сетевого соединения, согласно некоторым вариантам осуществления изобретения.
Фиг.8 - это блок-схема, иллюстрирующая пример компьютерной системы, в которой могут быть реализованы некоторые варианты осуществления изобретения.
Фиг.9 - это блок-схема, иллюстрирующая пример системы хранения, которая может быть использована в качестве части компьютерной системы, чтобы реализовать некоторые варианты осуществления изобретения.
Подробное описание изобретения
При отсутствии явного оповещения о перегруженности некоторые протоколы транспортного уровня (к примеру, TCP) основываются на определенных событиях, чтобы обнаруживать появляющуюся перегруженность, потери пакетов и образование очереди в "узком" маршрутизаторе. Текущие исследования по управлению перегруженностью могут в широком смысле классифицироваться как либо базирующиеся на потерях, которые основываются на потерях пакетов как индикаторе перегруженности, либо базирующиеся на задержке, которые отслеживают загруженность буфера в узком маршрутизаторе, чтобы упреждающе избегать перегруженности. Основанные на задержке схемы прослеживают образование очереди посредством мониторинга увеличений RTT соединений.
Варианты осуществления изобретения, описанные в данном документе, могут быть использованы для того, чтобы реализовать основанное на задержках и/или основанное на потерях управление перегруженностью. Например, как подробнее описано ниже, одна или более абстракций событий, абстракций алгоритма управления перегруженностью (CCA) и абстракций, задающих другую информацию, ассоциативно связанную с управлением перегруженностью, могут быть раскрыты через интерфейс. Эти абстракции могут быть использованы для того, чтобы определять один или более модулей управления перегруженностью (CCM), чтобы управлять перегруженностью по одному или более соответствующих соединений с помощью основанных на задержках и/или основанных на потерях схем.
Функции и преимущества вариантов осуществления настоящего изобретения, описанных выше, и других вариантов осуществления должны стать более понятными из примеров, описанных ниже. Следующие примеры служат для того, чтобы упростить понимание и проиллюстрировать преимущества настоящего изобретения, но не поясняют полную область применения изобретения.
При использовании в данном документе, будь то подробное описание или формула изобретения, термины "содержащий", "включающий в себя", "переносящий", "имеющий", "содержащий в себе", "влекущий за собой" и т.п. должны пониматься как открытые, т.е. означать включающий в себя, но не только. Только промежуточные фразы "состоящий из" и "состоящий главным образом из", соответственно, должны быть замкнутыми или полузамкнутыми промежуточными фразами, как изложено, со ссылкой на формулу изобретения, в "Руководстве по проведению патентной экспертизы" Патентного ведомства США (восьмое издание, редакция 2, май 2004 года), раздел 2111.03.
Примеры
Фиг.1 - это блок-схема, иллюстрирующая пример системы 100 управления перегруженностью одного или более сетевых соединений между сетевым устройством 102 и сетью 128 передачи данных, согласно некоторым вариантам осуществления изобретения. Система 100 является просто иллюстративным вариантом осуществления системы 100 управления перегруженностью одного или более сетевых соединений между сетевым устройством и сетью передачи данных и не предназначена для того, чтобы ограничивать область применения изобретения. Любые из множества других реализаций такой системы, например, варианты системы 100 возможны и предназначены для того, чтобы попадать в рамки области применения изобретения.
При использовании в данном документе "сеть" - это группа из двух или более компонентов, соединенных между собой через один или более сегментов среды передачи, по которой данные могут обмениваться между компонентами. Каждый сегмент может быть любым из множества типов сред передачи, включая один или более электрических или оптических проводов или кабелей, изготовленных из металла и/или оптоволокна, эфир (к примеру, использование беспроводной передачи по волновым несущим) либо любую комбинацию этих сред передачи. При использовании в данном документе "множество" означает два или более. Следует принимать во внимание, что сеть может быть такой простой, как два компонента, соединенных посредством одного провода, шины, беспроводного соединения или другого типа сегмента. Дополнительно, следует принимать во внимание, что когда сеть проиллюстрирована на чертеже данной заявки как соединенная с элементом чертежа, сам соединенный элемент считается частью сети.
При использовании в данном документе "сетевое устройство" - это устройство, выполненное с возможностью обмениваться данными по сети, в том числе, но не только: рабочие станции, персональные компьютеры, терминалы, портативные компьютеры, конечные станции, пользовательские устройства, серверы, шлюзы, директории, коммутаторы, маршрутизаторы, концентраторы, мосты, каталоги, передатчики, приемники, приемо-передатчики, беспроводные точки доступа (AP), повторители и любые комбинации вышеозначенного. При использовании в данном документе "пользовательское устройство" - это сетевое устройство, из/в которое пользователь может принимать/отправлять данные и которое может выступать в качестве конечной точки для связи по сети передачи данных. Пользовательские устройства включают в себя, но не только: рабочие станции; персональные компьютеры (к примеру, ПК); переносные компьютеры, блокнотные компьютеры; телефоны (к примеру, стационарные или мобильные); пейджеры; устройства марки Blackberry™, PCS-устройства, персональные цифровые устройства (PDA), приемо-передающие радиостанции (к примеру, "переносные дуплексные приемо-передающие устройства"), другие типы пользовательских устройств и любую надлежащую комбинацию вышеуказанного.
Сеть может быть или включать в себя любые из множества типов сетей, в том числе, но не только, локальную сеть (LAN), городскую сеть (MAN), глобальную сеть (WAN), беспроводную сеть, наземную сеть мобильной связи общего пользования (PLMN), сеть глобальной системы мобильной связи (GSM), сеть общей службы пакетной радиопередачи (GPRS), сеть универсальной системы мобильной связи (UMTS), сеть с множественным доступом с кодовым разделением (CDMA), оптическую сеть, сеть передачи данных, корпоративную сеть, беспроводную персональную сеть (PAN), домашнюю сеть, сеть дистанционной связи, коммутируемую телефонную сеть общего пользования (PSTN), широкополосную сеть, другой тип сети или любую надлежащую комбинацию вышеозначенного.
Сетевое устройство 102 может включать в себя любое из: одного или более приложений 108; операционной системы 104; сетевого интерфейсного модуля 122; одного из модулей 116 управления перегруженностью (CCM); других компонентов; или любой надлежащей комбинации вышеозначенного.
Сетевой интерфейсный модуль 122 может быть любым из множества типов сетевых компонентов, таких как, к примеру, сетевая интерфейсная карта (NIC). Модуль 122 может быть выполнен с возможностью принимать пакеты 126 из сети 128, например, по одному или более сетевых соединений, и выполнять операции с пакетами. Например, сетевой интерфейсный модуль 122 может выполнять любые из множества широко распространенных операций. Дополнительно, модуль 122 может быть выполнен с возможностью формировать временные метки для пакетов, когда они принимаются. Например, формирователь 124 временных меток может формировать временную метку во время, максимально близкое к времени, в которое каждый пакет принимается. Информация, ассоциативно связывающая временную метку 118 с пакетом (т.е. информация временной метки) может быть сохранена в структуре данных (к примеру, в структуре данных NET_BUFFER или NET_BUFFER_LIST операционной системы Windows Vista™). Эта структура данных (или информация временных меток, сохраненная в ней) может передаться или делаться доступной для стека 110 сетевой передачи данных. Как подробнее описано ниже, информация временных меток может быть использована для того, чтобы определять перегруженность сети по сетевому соединению.
Операционная система 104 может включать в себя любое из: одной или более структур 106 данных управления передачей; стека 110 сетевой передачи данных; других компонентов и любой надлежащей комбинации вышеозначенного. Стек 110 сетевой передачи данных может быть любым из множества типов стеков сетевой передачи данных, таких как, например, стек TCP/IP. Стек 110 сетевой передачи данных может быть выполнен с возможностью принимать пакеты 120 и управлять соединениями, по которым принимаются пакеты 120 (и по которым передаются пакеты). Хотя не показано на фиг.1 и не обсуждается в данной заявке, следует принимать во внимание, что стек 110 сетевой передачи данных также может быть выполнен с возможностью передавать пакеты в сеть 128, например, через сетевой интерфейсный модуль 122.
Стек 110 может применять одну или более структур 106 данных управления передачей для того, чтобы управлять соединениями между сетевым устройством 102 и сетью 128. Например, для каждого соединения отдельная структура 106 данных управления передачей может быть использована для того, чтобы сохранять и обновлять информацию, относящуюся к соединению (к примеру, информацию состояния), которую стек 110 может использовать для того, чтобы управлять обменом данными по соединениям. Структура 106 данных управления передачей может быть или включать в себя любые из множества различных типов структур данных, такие как, например, блок управления передачей (TCB). Хотя структуры 106 данных управления транспортировкой показаны как размещающиеся в операционной системе 104, изобретение не ограничено таким образом. Эти структуры могут размещаться в любых из множества расположений сетевого устройства 102, в том числе в сетевом интерфейсном модуле 122.
Стек 110 может быть выполнен с возможностью обнаруживать и/или определять одно или более событий управления транспортировкой, обновлять одну или более структур 106 данных управления передачей соответствующим образом и/или сообщать эти одно или более событий 112 управления транспортировкой в один или более CCM 116. Эти события могут включать в себя любое из следующего: таймаут на повторную передачу по соединению; изменение времени на передачу и подтверждение приема; подтверждение приема новых данных; прием дублированного подтверждения приема; отправка нового пакета данных; другие события управления транспортировкой либо любую надлежащую комбинацию вышеозначенного.
В типичном протоколе транспортного уровня (уровня 4) (к примеру, TCP), когда сетевое устройство (к примеру, получатель) принимает данные по соединению, оно отвечает в сетевое устройство, которое отправило данные (к примеру, в отправитель), подтверждением приема (т.е. ACK). Таймаут на повторную передачу возникает у отправителя (к примеру, на сетевом устройстве 102) для соединения, когда сообщение подтверждения приема для данных, ранее отправленных отправителем по соединению, не принималось от получателя в течение предварительно определенного количества времени. Возникновение таймаута на повторную передачу может приводить к повторной передаче данных, для которых возник таймаут.
Время на передачу и подтверждение приема (RTT) - это интервал времени, которое истекает, когда отправитель отправляет данные в другой объект и когда отправитель принимает подтверждение приема от другого объекта о том, что данные приняты. Информация RTT может быть использована для того, чтобы задавать таймер для таймаута на повторную передачу. Изменение RTT возникает, когда RTT для данного соединения изменяется, например, в результате уменьшения или снижения перегруженности сети по соединению.
Когда данные передаются между отправителем и получателем по сети, данные зачастую делятся на фрагменты, т.е. группы байтов, и эти группы байтов отправляются в пакетах. Хотя фрагменты данных передаются в том порядке, в котором они первоначально скомпонованы, фрагменты данных (и пакеты, которые их содержат) могут поступать в другом порядке получателю.
Типичный протокол транспортного уровня, такой как, к примеру, TCP, отслеживает порядок этих фрагментов и то, какие фрагменты приняты получателем, и повторно собирает эти фрагменты в надлежащем порядке. Получатель отправляет подтверждения приема отправителю пакета, указывающие то, какие фрагменты данных он принял, и может указывать те фрагменты, которые он еще не принял. Например, рассмотрим данные, поделенные на фрагменты 1-90. Если получатель этих данных принимает фрагменты 1-20 в одном пакете, 31-60 в другом пакете и 61-90 в третьем пакете, он может отправлять подтверждение приема отправителю каждый раз, когда он принимает эти пакеты. Подтверждение приема указывает то, какие фрагменты он принял, и также может указывать то, какие фрагменты данных он еще не принял. Например, получатель может принять первый пакет, включающий в себя фрагменты 1-20, и отправить подтверждение приема, указывающее то, что он принял фрагменты 1-20. Затем он может принять пакеты, включающие в себя фрагменты 31-60, и отправить подтверждение приема о том, что он принял фрагменты 1-20 и 31-60, но не фрагменты 21-30. Он может принять еще один пакет, включающий в себя фрагменты 61-90, и отправить подтверждение приема о том, что он принял фрагменты 1-20 и 31-90, но не фрагменты 21-30. Таким образом, отправитель может принимать несколько подтверждений приема от получателей, указывающих то, что получатель еще не принял фрагменты 1-30.
Подтверждение приема новых данных - это первое или начальное подтверждение приема, принятое отправителем для конкретного фрагмента данных, согласно протоколу транспортного уровня, указывающее то, что фрагмент данных принят получателем.
Дублированное подтверждение приема - это любое подтверждение приема, отличное от первого подтверждения приема, указывающее то, что конкретный фрагмент данных не принят получателем. Прием дублированного подтверждения приема может указывать разрыв (к примеру, фрагменты 21-30) в данных, принятых получателем.
Стек 110 сетевой передачи данных может быть выполнен с возможностью обнаруживать эти одно или более событий управления транспортировкой или других событий через анализ значимой информации в пакетах 120, принятых от сетевого интерфейсного модуля 122. Т.е. помимо обработки пакетов 120 перед передачей их содержимого в одно или более приложений 108, стек 110 также может проанализировать информацию в этих пакетах, управляющую их транспортировкой, включая управление перегруженностью соединения(й), по которому эти пакеты передаются. В некоторых вариантах осуществления стек 110 может выбирать информацию не из всех пакетов, которые он принимает. Эта выборка может выполняться для того, чтобы уменьшать объем информации состояния, которая обязательно должна храниться для каждого соединения посредством соответствующего CCM 116. Частота выборки для каждого соединения может быть определена на основе скорости передачи и RTT соединения. Эта выборка может быть выполнена, как подробнее описано ниже в связи с фиг.4-7.
При использовании в данном документе "модуль управления перегруженностью" или "CCM" - это программно-реализованная абстракция, которая определяет CCA для управления перегруженностью одного или более соединений. Каждый CCM 116 может соответствовать только одному соединению между сетевым устройством 102 и объектом в сети 128, и каждый CCM может реализовать конкретный тип CCA. Стек 110 сетевой передачи данных может сообщать в CCM 116 события управления транспортировкой для соединения, по которому CCM управляет перегруженностью. CCM 116 может хранить переменные состояния соединения для соединения и может обновлять эти переменные состояния в ответ на события управления транспортировкой. CCM может предоставлять обновленные значения переменных состояния в стек 110 сетевой передачи данных, и стек может модифицировать свое управление соединением соответствующим образом. В течение продолжительности существования данного соединения CCM 116 может выделяться часть памяти для того, чтобы управлять соединением, и эта часть памяти может оставаться непрозрачной для стека 110 и структуры 106 данных управления передачей. Эта часть памяти может принадлежать CCM и быть использована для того, чтобы отслеживать и обновлять переменные состояния соединения, используемые для того, чтобы управлять перегруженностью соединения.
Стек 110 сетевой передачи данных может быть выполнен с возможностью выбирать один из нескольких доступных CCM 116 для того, чтобы управлять перегруженностью для данного соединения. Этот выбор может быть основан на любых из множества факторов, включая, но не только: сетевое окружение; характеристики тракта соединения; характеристики линии связи в соединении; значение параметра сокета приложения 108; другие факторы и любую надлежащую комбинацию вышеозначенного. Т.е. CCM 116 могут быть выбраны и реализованы на основе соединения посредством стека 110, и несколько CCM 116 могут работать параллельно. Каждый из этих CCM может быть различного типа, либо два или более из этих CCM могут быть одного типа (т.е. выполнять один тип CCA).
В некоторых вариантах осуществления изобретения, когда определенные версии Windows (к примеру, Windows Vista™) используются в качестве операционной системы, может быть предусмотрен сетевой программный интерфейс (NPI). NPI может помогать в разработке и конфигурировании сетевого интерфейса между сетевым устройством (к примеру, устройством 102) и сетью (к примеру, 128). NPI может предоставлять структуру данных (к примеру, регистратор сетевых модулей (NMR)), который предоставляет возможность ассоциативного связывания одного или более CCM 116 со стеком 110 сетевой передачи данных. Например, стек 110 (к примеру, драйвер tcp.sys в Windows Vista™) может регистрироваться как CCM-клиент, и один или более CCM 116 могут регистрироваться как CCM-поставщики. NPI для Windows Vista™, включая использование NMR, подробнее описан в библиотеке Microsoft Developers Network (MSDN) по адресу http://msdn.microsoft.com/library в следующем каталоге: Device and Driver Technologies/Network/Windows Codename Longhorn Networking.
В некоторых вариантах осуществления изобретения CCM может быть сформирован (к примеру, создан экземпляр) с помощью абстракции типа CCM. Абстракция типа CCM может быть определена с помощью одной или более предварительно определенных программно-реализованных абстракций (к примеру, типов объектов), которые могут быть предоставлены через CCM API, например, как описано ниже в связи с фиг.2.
Фиг.2 - это блок-схема, иллюстрирующая пример системы 200 определения типа CCM для управления перегруженностью сетевого соединения, согласно некоторым вариантам осуществления изобретения. Система 200 является просто иллюстративным вариантом осуществления системы определения типов CCM и не предназначена для того, чтобы ограничивать область применения изобретения. Любые из множества других реализаций такой системы, например, варианты системы 200 возможны и предназначены для того, чтобы попадать в рамки области применения изобретения.
Как должно стать более очевидным из последующего описания, в некоторых вариантах осуществления изобретения система 200 автономно и/или в комбинации с системой 100 предоставляет одно или более следующих свойств: простой способ для того, чтобы реализовать любые из множества типов CCA; возможность для кого-либо (к примеру, программиста или разработчика) писать CCA без необходимости изучения кода TCP; возможность выбирать CCM из множества доступных CCM на основе соединения, к примеру, на основе сетевого окружения, характеристик тракта и/или линии связи, посредством параметра сокета и т.д.; возможность управлять тем, сколько данных отправляется по соединению; и возможность управлять тем, какие байты данных отправлены по соединению.
Система 200 может включать в себя любое из: среды 202 разработки программного обеспечения; CCM интерфейса 204 прикладного программирования (API); других компонентов; или любых надлежащих комбинаций вышеозначенного. При использовании в данном документе "интерфейс прикладного программирования" или "API" - это набор из одной или более машиночитаемых инструкций, которые предоставляют доступ к одному или более других наборов из одной или более машиночитаемых инструкций, которые задают функции и/или типы данных, так что эти функции и/или типы данных могут быть выполнены с возможностью выполняться в компьютере вместе с прикладной программой. API может рассматриваться как "связующий элемент" между прикладными программами и конкретным вычислительным окружением или платформой (к примеру, любыми из описанных в данном документе) и может предоставлять возможность программисту программировать приложения, чтобы выполняться на одной или более конкретных вычислительных платформ или в одном или более конкретных вычислительных окружений.
Тип CCM может быть разработан в среде 202 разработки приложений, по меньшей мере, частично посредством использования CCM API 204, который может предоставляться посредством операционной системы (к примеру, 104) сетевого устройства (к примеру, 102). В некоторых вариантах осуществления изобретения CCM API 204 может быть, или может быть включен как часть, NPI операционной системы, такой как, к примеру, Windows Vista™.
CCM API 204 может включать в себя любое из: одной или более абстракций 205 CCA; одной или более абстракций 206 событий управления транспортировкой; других компонентов; или любой надлежащей комбинации вышеозначенного. Каждая абстракция 206 событий управления транспортировкой может определять конкретное событие управления транспортировкой, такое как, например, любое из событий управления транспортировкой, описанных выше. Дополнительно, CCM API 204 может предоставлять одну или более абстракций 205 CCA. Каждая абстракция CCA может определять конкретный тип CCA, такой как, к примеру, CCA по умолчанию, NewReno; CTCP; HSTCP; BIC; Fast; другие типы CCA, либо любая надлежащая комбинация вышеозначенного.
Таким образом, CCM API может раскрывать одну или более абстракций 205 CCA, одну или более абстракций 206 событий управления транспортировкой и другие абстракции, задающие информацию, которая может быть использована посредством среды 202 разработки приложений для того, чтобы определять одну или более абстракций 208 типа CCM, из которой один или более CCM может быть сформирован. Например, в некоторых вариантах осуществления, в которых используется Windows Vista™, один или более типов CCM могут связываться с одной или более абстракций 205 и 206 посредством регистрации в NMR. В таком варианте осуществления стек 110 сетевой передачи данных (к примеру, tcpip.sys) может регистрироваться как CCM-клиент, и несколько абстракций 208 типа CCM могут регистрироваться в стеке 110 с помощью NMR.
В некоторых вариантах осуществления изобретения CCM API 204 и среда 202 разработки приложений могут быть частью инфраструктуры CCM, предоставляемой посредством системы 200, которая может быть использована для того, чтобы помогать в разработке типов CCM. При использовании в данном документе, "инфраструктура" - это многократно используемая структура, включающая в себя один или более предварительно определенных программных компонентов (к примеру, абстрактных и/или конкретных классов языка объектно-ориентированного программирования), которые помогают в компоновке приложений. Таким образом, инфраструктура CCM - это многократно используемая структура проектирования, включающая в себя один или более предварительно определенных программно-реализованных компонентов (к примеру, абстракций 205 CCA, абстракций 206 событий управления транспортировкой, других абстракций и любую надлежащую комбинацию вышеозначенного), которые помогают в компоновке абстракций типов CCM.
В некоторых вариантах осуществления изобретения абстракция(и) 206 событий управления транспортировкой и абстракция(и), задающая информацию, ассоциативно связанную с событиями управления транспортировкой, задаются с помощью языка программирования C. Эти абстракции могут включать в себя, но не только, любое из следующего:
typedef enum {
CcmTimeoutEvent = 0x1,
CcmRttSampleEvent,
CcmCumulativeAckEvent,
CcmDuplicateAckEvent,
CcmSendEvent
} CcmEventType;
typedef struct {
PULONG Cwnd;
PULONG SsThresh;
} CCM_CONGESTION_STATE_INFORMATION;
typedef struct {
BOOLEAN InRecovery;
ULONG RecoveryUna;.
ULONG RecoveryNxt;
ULONG RecoveryMax;
}CCM_LOSS_RECOVERY_INFORMATION;
typedef struct {
ULONG RetransmitCount;
ULONG Mss;
ULONG SndWnd;
ULONG MaxSndWnd;
} CCM_RETRANSMIT_TIMEOUT_INFORMATION;
typedef struct {
ULONG SRtt;
ULONG RttVar;
ULONG RttSample;
} CCM_RTT_SAMPLE_INFORMATION;
typedef struct {
ULONG SeqAcked;
ULONG BytesAcked;
ULONG Mss;
ULONG SndWnd;
ULONG MaxSndWnd;
#ifdef_cplusplus
CCM_LOSS_RECOVERY_INFORMATION Recovery;
#else
CCM_LOSS_RECOVERY_INFORMATION;
#endif
}CCM_CUMULATIVE_AGK_NFORMATION;
typedef struct {
ULONG DupAckCount;
ULONG SndUna;
ULONG Mss;
ULONG SndWnd;
ULONG MaxSndWnd;
#ifdef__cplusplus
CCM_LOSS_RECOVERY_INFORMATION Recovery;
#else
CCM_LOSS_RECOVERY_INFORMATION;
#endif
}CCM_DUPLICATE_ACK_INFORMATION;
typedef struct {
ULONG SeqNumber;
ULONG SendLength;
}CCM_SEND_PACKET_INFORMATION;
typedef
NTSTATUS
(NTAPI *PCCM_PROVIDER_NOTIFY_EVENT)(
IN HANDLE TcpCcmState,
IN CcmEventType CcmEvent,
IN PVOID Ccmlnformation,
OUT PCCM_CONGESTION_STATE_INFORMATION CongestionState
);
Следует принимать во внимание, что другие абстракции, определяющие другие события и связанную информацию, могут быть предоставлены посредством CCM API 204 и могут быть удалены либо добавлены из/в API с течением времени.
Дополнительно, в некоторых вариантах осуществления изобретения одна или более абстракций CCA, раскрываемых посредством CCM API 204, определяются с помощью языка программирования C. Эти абстракции могут включать в себя, но не только, любое из следующего:
typedef enum {
TcpCcmDefault,
TcpCcmNewReno,
TcpCcmCtcp,
TcpCcmHstcp,
TcpCcmBic,
TcpCcmFast,
TcpCcmReserved1,
TcpCcmReserved2,
TcpCcmReserved3,
TcpCcmMAX
} TcpCcmType;
Следует принимать во внимание, что другие абстракции, определяющие другие CCA и связанную информацию, могут быть предоставлены посредством CCM API 204 и могут быть удалены либо добавлены из/в API с течением времени. В вариантах осуществления, в которых используется Windows Vista™, абстракции 208 типов CCM может регистрироваться, чтобы реализовать один или более вышеупомянутых CCA. Например, абстракция типа CCM может быть определена, по меньшей мере, частично, с помощью следующей абстракции, определенной на языке программирования C.
typedef struct _CCM_PROVIDER_CHARACTERISTICS {
USHORT Version;
USHORT Length;
//
// Алгоритм управления перегруженностью, который реализует данный поставщик.
//
TcpCcmType CcmAlgorithm;
CCM
// Состояние управления перегруженностью, которое требует этот алгоритм.
// Размер указывается в байтах.
//
ULONG Size;
} CCM_PROVIDER_CHARACTERISTICS;
В некоторых вариантах осуществления, в которых используется язык программирования C, абстракция типа CCM может использовать одну или более следующих абстракций, определяющих функции для инициализации и очистки CCM:
typedef
NTSTATUS
*PCCM_PROVIDER_INITIALIZE_CONNECTION)(
(NTAPI
IN OUT HANDLE TcpCcmState
);
typedef
NTSTATUS
*PCCM_PROVIDER_CLEANUP_CONNECTION)(
(NTAPI
IN OUT HANDLE TcpCcmState
);
typedef struct CCM_PROVIDER_DISPATCH {
USHORT Version;
USHORT Length;
//
// Инициализация соединения с конкретным для поставщика
// состоянием перегруженности.
//
PCCM_PROVIDER_INITIALIZE_CONNECTION CcmInitialize;
//
// Очистка
// PCCM_PROVIDER_CLEANUP_CONNECTION CcmCleanup;
//
// Оповещение о событии Ccm
// PCCM_PROVIDER_NOTIFY_EVENT CcmNotifyEvent;
} CCM_PROVIDER_DISPATCH, *PCCM_PROVIDER_DISPATCH;
Система 100 и/или 200 и ее компоненты могут быть реализованы с помощью любой из множества технологий, включая программное обеспечение (к примеру, C, C#, C++, Java или комбинацию вышеозначенного), аппаратные средства (к примеру, одну или более специализированных интегрированных схем), микропрограммное обеспечение (к примеру, электрически программируемую память) либо любую комбинацию вышеозначенного. Один или более компонентов систем 100 и/или 200 могут постоянно размещаться в одном устройстве (к примеру, компьютере) либо один или более компонентов могут постоянно размещаться в отдельных обособленных устройствах. Дополнительно, каждый компонент может быть распределен по нескольким устройствам и одно или более устройств могут быть соединены между собой.
Дополнительно, в каждом из одного или более устройств, которые включают в себя один или более компонентов системы 100 или 200, каждый из компонентов может постоянно размещаться в одном или более мест системы. Например, различные части компонентов этих систем могут постоянно размещаться в различных областях памяти (к примеру, RAM, ROM, диск и т.д.) устройства. Каждое из одного или более устройств может включать в себя, среди прочих компонентов, множество известных компонентов, например, один или более процессоров, систему памяти, систему устройств хранения на дисках, один или более сетевых интерфейсов и одну или более шин либо других внутренних линий связи, соединяющих между собой различные компоненты. Система 100 и/или 200 и ее компоненты могут быть реализованы с помощью вычислительной системы, такой как описанная ниже в связи с фиг.8 и 9.
Фиг.3 - это блок-схема последовательности операций, иллюстрирующая пример способа 300 управления перегруженностью сетевого соединения, согласно некоторым вариантам осуществления изобретения. Способ 300 является просто иллюстративным вариантом осуществления способа управления перегруженностью сетевого соединения и не предназначен для того, чтобы ограничивать область применения изобретения. Множество других реализаций, например, варианты способа 300 возможны и предназначены для того, чтобы попадать в рамки области применения изобретения.
На этапе 302 тип управления перегруженностью может быть выбран, например, посредством стека сетевой передачи данных (к примеру, стека 110), как описано выше в связи с системой 100.
На этапе 304 CCM выбранного типа может быть сформирован (к примеру, из абстракции 208 типа CCM), а на этапе 306 перегруженность сети в соединении может управляться с помощью сформированного CCM. Каждый из этапов 304 и 306 может выполняться так, как описано выше в связи с системами 100 и 200.
В течение продолжительности существования данного соединения, на этапе 308, сформированный модуль управления перегруженностью может быть оповещен об одном или более событий транспортировки, к примеру, посредством стека 110, как описано выше в связи с системой 100.
На этапе 310 значение одной или более переменных состояния соединения может быть обновлено (к примеру, посредством сформированного CCM) на основе одного или более событий транспортировки, и на этапе 312 стек сетевой передачи данных может быть оповещен (к примеру, посредством CCM) об обновленном значении одной или более переменных состояния соединения, например, как описано выше в связи с системой 100.
Управление соединением может быть модифицировано на этапе 314 (к примеру, посредством стека 110) на основе обновленного значения одной или более переменных состояния соединения, к примеру, как описано выше в связи с системой 100.
Способ 300 может включать в себя дополнительные этапы. Дополнительно, порядок этапов, выполняемых как часть способа 300, не ограничен порядком, проиллюстрированным на фиг.3, поскольку этапы могут выполняться в другом порядке, и/или один или более этапов могут выполняться параллельно, по меньшей мере, частично. Например, любой из этапов 308-314 может выполняться для одного или более событий или переменных параллельно с выполнением любого из этапов для другого соединения.
Стек 110 сетевой передачи данных может потреблять значительный объем памяти для записи событий управления транспортировкой, например, как часть реализации основанного на задержках CCA. Т.е. значительный объем информации состояния может сохраняться для каждого соединения.
В некоторых вариантах осуществления изобретения объем памяти, потребляемый посредством информации состояния на соединение, уменьшается за счет выборки информации не из всех пакетов, передаваемых и/или принимаемых по одному или более соединений. Информация может выбираться не из всех пакетов при сохранении достаточной высокой частоты выборки для того, чтобы своевременно обнаруживать перегруженность, например, посредством обнаружения изменения RTT для соединения. Если частота выборки слишком мала, то определение перегруженности может произойти слишком поздно для того, чтобы изменить передачу информации по соединению так, чтобы не допустить переполнения "узкого" буфера.
В некоторых вариантах осуществления изобретения частота выборки соединения основана на произведении (BDP) пропускной способности и задержки соединения, т.е. произведении скорости соединения и RTT соединения (т.е. скорость*RTT). Таким образом, если скорость соединения выражена в мегабитах в секунду (Мбит/с), а RTT выражено в секундах, то BDP может быть выражено в единицах битов или байтов. Окно перегруженности соединения может быть определено на основе BDP соединения. При использовании в данном документе "окно перегруженности" - это максимальный объем данных, которому разрешено быть "в потоке" для данного соединения в любое данное время. Например, окно соединения может определять максимальное число пакетов для соединения, которые: 1) переданы; и 2) для которых подтверждение приема еще не принято. Стек сетевой передачи данных (к примеру, 110) может быть выполнен с возможностью использовать значение окна управления перегруженностью, чтобы управлять передачей данных в соединении, с тем, чтобы не больше максимального разрешенного числа пакетов для соединения было в потоке (т.е. не больше окна перегруженности) до тех пор, пока подтверждение приема не принято для одного из пакетов в потоке.
Таблица иллюстрирует частоты выборки для соединения, имеющего RTT в 100 мс, которые авторы изобретения определили посредством экспериментов так, чтобы иметь допустимый баланс: 1) объема памяти, потребленного для того, чтобы сохранять информацию состояния для соединения; и 2) способности своевременно идентифицировать перегруженность соединения. Частота выборки - это число пакетов, переданных в соединении, из которого выбирается информация, на цикл. "Цикл" определяется следующим образом. Рассмотрим соединение, в котором данные только что начали передаваться. В ответ на прием подтверждения приема (т.е. ACK) для первого фрагмента данных (т.е. "сегмента"), который передан, порядковый номер (описан ниже; либо другой идентификатор) последнего сегмента данных, который передан, но для которого ACK не принято, может быть записан (к примеру, в переменной с названием RoundEnd). Цикл завершается, когда ACK для последнего сегмента принято.
Первый столбец в таблице указывает скорость соединения. Второй столбец указывает окно перегруженности (в единицах пакетов), заданное для соединения при: RTT=100 мс; и скорости соединения, заданной в первом столбце. Третий столбец определяет допустимую частоту выборки, в единицах пакетов, выбранных на цикл, которая определена экспериментально. Например, третья строка указывает то, что для скорости соединения в 1 Гбит/с и RTT в 100 мс, для которого задано окно перегруженности в 8333 пакетов, частота выборки в 128 пакетов на цикл определена как допустимая. Следует принимать во внимание, что изобретение не ограничено значениями, показанными в таблице, поскольку другие значения могут быть использованы и предназначены для того, чтобы попадать в рамки области применения изобретения.
Частоты выборки для различных скоростей соединения при RTT в 100 мс
Скорость соединения
Окно перегруженности (выражается в пакетах)
Частота выборки
10 Мбит/с
83
32
100 Мбит/с
833
64
1 Гбит/с
8333
128
2,5 Гбит/с
20833
192
10 Гбит/с
83333
256
Фиг.4 - это таблица 400, иллюстрирующая пример частот выборки для соединений при определенных комбинациях скорости соединения и RTT, согласно некоторым вариантам осуществления изобретения. Следует принимать во внимание, что изобретение не ограничено значениями, показанными на фиг.5, поскольку другие значения могут быть использованы и предназначены для того, чтобы попадать в рамки области применения изобретения.
Частоты выборки в столбце 404 соответствуют частотам выборки, показанным в третьем столбце вышеприведенной таблицы. Столбцы 406-412 иллюстрируют то, что для данной скорости соединения выделенная частота выборки является функцией от RTT. Для данной скорости соединения (т.е. данной строки) позиция дальше вправо в таблице 400 соответствует более высокому RTT и соответствующей выделенной более высокой частоте выборки, при этом частота выборки ограничена 256 пакетами в секунду независимо от скорости соединения и RTT.
В некоторых вариантах осуществления изобретения пул памяти совместно используется между несколькими (к примеру, всеми) соединениями в сетевом устройстве либо в многопроцессорном варианте осуществления посредством нескольких (к примеру, всех) соединений для данного процессора, для целей выборки информации, чтобы управлять перегруженностью. Этот пул может иметь фиксированный размер, и слоты из пула памяти могут выделяться и открепляться от соединений (к примеру, посредством стека сетевой передачи данных, например, 110) по мере необходимости. Таким образом, объем памяти (т.е. число слотов) из пула памяти, выделенного для соединения, может быть основан на данных, в данный момент передаваемых и/или принимаемых по соединению. При использовании в данном документе термин "обменянный" означает переданный и/или принятый. Таким образом, объем памяти, выделяемый для каждого соединения, не основывается исключительно на вычисленном BDP соединения, а вместо этого на объеме данных, фактически обмениваемом в соединении.
Например, нагруженное соединение может увеличивать свое окно перегруженности до большого значения (т.е. значения, равного BDP для соединения), и в результате ему может выделяться больше памяти из пула. Тем не менее выделение увеличенного объема памяти соединению не будет продолжаться, если только оно не сохраняет скорость обмена данными; т.е. если только он не поддерживает объем данных в потоке, заданный посредством его окна перегруженности.
Эта методика совместного использования пула памяти между соединениями на основе необходимости, для целей управления перегруженностью, является более эффективным использованием памяти, чем предварительное выделение памяти соединениям (к примеру, исключительно на основе BDP) независимо от фактических данных, обмениваемых между соединениями.
В некоторых вариантах осуществления изобретения следующая структура данных может быть использована для того, чтобы определять выборку:
typedef struct _CTCP_RTT_SAMPLE{
SEQ_NUM Seq; // SendSequence
ULONG Time; //SendTime
} CTCP_RTT_SAMPLE, *PCTCP_RTT_SAMPLE;
и следующая структура данных может быть использована для записи и отслеживания информации, выбранной из пакетов для цели управления перегруженностью соединения:
#define CTCP_DWND_RTT_SAMPLES_NUM 32
typedef struct_CTCP_RTT_SAMPLE_TABLE {
LIST_ENTRY Link;
CTCP_RTT_SAMPLE RttSamples[CTCP_DWND_RTT_SAMPLES_NUM];
}CTCP_RTT_SAMPLE_TABLE, *PCTCP_RTT_SAMPLE_TABLE;
Вышеприведенные описания структур данных могут быть использованы для того, чтобы конструировать структуру данных, проиллюстрированную на фиг.5. Фиг.5 - это блок-схема, иллюстрирующая пример структуры 500 данных для сохранения информации, выбранной из пакетов, принимаемых по соединению, согласно некоторым вариантам осуществления изобретения. Фиг.5 является просто иллюстративным вариантом осуществления структуры данных для сохранения информации, выбранной из пакетов, принимаемых по соединению, и не предназначена для того, чтобы ограничивать область применения изобретения. Другие структуры данных, например, варианты структуры 500 могут быть использованы и предназначены для того, чтобы попадать в рамки области применения изобретения.
Структура данных 500 может быть кольцевым буфером и может включать в себя несколько слотов памяти, в том числе слоты 502 и 512 памяти, каждый из которых включает в себя множество (к примеру, 32) слотов, таких как, например, слоты 504-508 и 514-518, соответственно. Индекс 520 (SndNext) указывает следующую позицию в памяти, выделенную для соединения, под которым выборочная информация должна быть сохранена. Индекс 510 (RcvNext) указывает следующую запись, включающую в себя выборочную информацию, для которой ACK, соответствующее выборочной информации, ожидается (к примеру, самая ранняя запись, для которой ACK еще не принято). Например, запись 506 может уже включать в себя временную метку, сформированную для фрагмента информации, когда пакет, включающий в себя фрагмент информации, передан для соединения, и для которого ACK еще не принято, но ожидается далее. Когда ACK для пакета, соответствующего фрагменту информации, принято, временная метка пакета может быть добавлена к записи 506. Разница между двумя временными метками, теперь включенными в запись, может быть использована для того, чтобы определять RTT для фрагмента информации. Это RTT может быть использовано для того, чтобы определять изменение RTT, что может быть событием управления перегруженностью, может быть сообщено в CCM для соединения и может приводить к изменению выделения памяти, как описано ниже.
Индексы 510 и 520 могут быть использованы для того, чтобы определять объем данных в потоке для соединения в данное время. Например, объем данных в потоке для соединения в данное время может быть определен как RttSampIeTable[SndNext].Seq - RttSampleTable[RcvNext].Seq.
Чтобы отслеживать число выборок, выделенных соединению, могут быть использованы две переменные на соединение: ActualSamples; и AssignedSamples. ActualSamples позволяет отслеживать точное число блоков, фактически выделенных для соединения. AssignedSamples может быть объемом, который соединение может потенциально использовать, что основано на окне перегруженности для соединения. Тем не менее, память не всегда фактически назначается (и отражается посредством ActualSamples) до тех пор, пока соединение не попытается фактически отправить стоящие окна перегруженности данные. AssignedSamples всегда >= ActualSamples.
При создании соединения, соединению (к примеру, по умолчанию) может быть выделен один блок в 32 выборки, и AssignedSamples может быть задана равной ActualSamples, т.е. обе могут быть заданы равными 1 (т.е. 1 блоку данных).
По мере того как данные отправляются по соединению, индексы 510 и 520 могут отслеживать объем данных в потоке, к примеру, RttSampleTable[SndNext].Seq - RttSampleTable[RcvNext].Seq. Следующая запись в структуре 500 данных, в которой следует сохранять выборку, может быть определена на основе выделенных выборок, к примеру, (SndNext+1)%AssignedSamples*CTCP_DWND_RTT_SAMPLES_NUM. Если это вычисленное значение превышает ActualSamples*CTCP_DWND_RTT_SAMPLES_NUM, то новый блок (к примеру, еще 32 записи выборок) может быть выделен из пула памяти, и значение ActualSamples может быть увеличено на 1. Если выделение нового блока завершается неудачей, то AssignedSamples может быть задана равной ActualSamples, и значение индекса 520 (SndNext) вычисляется повторно.
Если структура 500 данных полная (т.е. объем памяти, фактически выделенный соединению, соответствует объему выделенной памяти), то выборка может не быть записана.
Выборка может записываться до тех пор, пока частота выборки для данного соединения позволяет это (и еще есть доступное пространство памяти в пуле). Например, согласно таблице и фиг.4, если скорость соединения (т.е. пропускная способность) для соединения составляет 1 Гбит/с, а RTT в данный момент задано равным 100 мс, 128 выборок (к примеру, 4 всего блока памяти) может быть выбрано на цикл, т.е. на окно перегруженности.
Одно или более событий могут быть выполнены в конце каждого цикла. Как указано выше, цикл завершается, когда ACK для последнего сегмента цикла принято. Например, когда цикл завершается, окно перегруженности может быть повторно вычислено, и частота выборки может быть переконфигурирована как (пересчитанное окно перегруженности) %AssignedSamples*CTCP_DWND_RTT_SAMPLES_NUM.
Дополнительно, когда цикл завершается, может быть определено, есть ли неиспользованные записи из структуры 500 данных, которые выделены для соединения, которые могут быть высвобождены обратно в пул памяти. Это решение может быть основано на том, где индексы 510 и 520 находятся в структуре 500 данных. Например, для конкретного блока (к примеру, 502 или 512), если и 510, и 520 не находятся в блоке, блок может быть освобожден (и переменные состояния соединения могут быть исправлены). Если 510 и 520 находятся в одном блоке, все блоки в структуре 500 данных, если есть, после данного блока могут быть освобождены. В варианте осуществления, в котором структура 500 данных является кольцевым буфером, другая методика заключается в том, чтобы найти индекс 520 (SndNext) в структуре 500 данных и удалить все следующие блоки до блоков, имеющих запись, на которую указывает индекс 510 (RcvNext).
Используя вышеописанные методики выделения/открепления памяти, если соединение всегда передает объем данных, соразмерный с окном перегруженности, то выделенная память пула памяти (к примеру, блоки структуры 500 данных) не высвобождается. В противном случае, неиспользованное пространство памяти возвращается в пул памяти и может быть использовано посредством других соединений.
Фиг.6 - это блок-схема последовательности операций, иллюстрирующая пример способа 600 управления перегруженностью сетевого соединения, согласно некоторым вариантам осуществления изобретения, например, на основе вышеприведенного описания выборки RTT. Следует принимать во внимание, что способ 600 является просто иллюстративным вариантом осуществления способа управления перегруженностью сетевого соединения и не предназначен для того, чтобы ограничивать область применения изобретения. Любые из множества других реализаций такого способа, например, варианты способа 600 возможны и предназначены для того, чтобы попадать в рамки области применения изобретения.
На этапе 602 частота, при которой следует выбирать информацию из пакетов, принимаемых по соединению, определяется, по меньшей мере, частично на основе скорости передачи соединения и времени на передачу и подтверждение приема для соединения, например, как описано выше.
Часть пула памяти (к примеру, один или более блоков структуры 500 данных) может быть выделена соединению на этапе 604 на основе определенной частоты выборки.
На этапе 606 информация из пакетов, принимаемых в соединении, может выбираться на определенной частоте выборки, а на этапе 608 выборочная информация может быть сохранена в выделенной части памяти, например, в записи структуры 500. Дополнительно, на этапе 607 информация может выбираться из поступающих пакетов, принимаемых в соединении, причем эти пакеты соответствуют пакетам, выбранным на этапе 606, и эта информация может быть сохранена в выделенной памяти. Например, как описано выше, временная метка для фрагмента информации (т.е. сегмента) может быть сохранена в записи структуры 500 данных. Когда впоследствии принимается пакет, который включает в себя ACK для фрагмента информации, временная метка для этого пакета может быть сохранена в той же записи.
На этапе 610 перегруженность сетевого соединения может управляться, по меньшей мере, частично на основе выборочной информации. Например, как описано выше, RTT фрагмента информации может быть определено на основе двух временных меток, выбранных для фрагмента информации, и это RTT может быть использовано для того, чтобы управлять перегруженностью. Например, в конце цикла может быть определено, что RTT соединения изменилось, и это может быть сообщено соответствующему CCM, который может модифицировать свое управление перегруженностью соединения соответствующим образом, как описано выше.
Как показано посредством стрелки, указывающей от этапа 610 на этап 602, управление перегруженностью соединения и объем памяти из пула памяти, выделенного для соединения, может регулироваться на основе выборочной информации.
Способ 600 может включать в себя дополнительные этапы. Дополнительно, порядок этапов, выполняемых как часть способа 600, не ограничен порядком, проиллюстрированным на фиг.5, поскольку этапы могут выполняться в другом порядке, и/или один или более этапов могут выполняться параллельно, по меньшей мере, частично. Например, любой из этапов 602-510 может выполняться для одного соединения, при этом в данный момент любой из этапов 602-510 выполняется для другого соединения.
Некоторые операционные системы предоставляют API, который предоставляет счетчик выполнений, который может быть использован посредством приложений в операционной системе. Например, некоторые операционные системы, доступные от Microsoft Corporation, предоставляют API, называемый KeQueryPerformanceCounter, который предоставляет точно детализированный счетчик выполнений, доступный в операционной системе. Тем не менее, вызов этого API является очень затратным, и слишком частый его вызов может ухудшать производительность сетевого устройства, в котором размещается операционная система.
Следовательно, в некоторых вариантах осуществления изобретения временная метка (к примеру, временная метка 118) для поступающего пакета (к примеру, 126) формируется в сетевом интерфейсном модуле (к примеру, посредством формирователя 124 временных меток модуля 122), который является отдельным от операционной системы (к примеру, 104) и стека сетевой передачи данных (к примеру, 110) сетевого устройства (к примеру, 102), в котором принимается пакет. Временная метка может быть использована для того, чтобы определять RTT соединения, которое может быть использовано для того, чтобы управлять перегруженностью соединения, как подробнее описано ниже.
Временная метка может фиксироваться в сетевом интерфейсном модуле максимально близко ко времени, в которое принимается пакет, и включается в структуру данных, которая делается доступной для стека 110 сетевой передачи данных, как подробнее описано ниже. Таким образом, для каждого пакета, принимаемого в сетевом интерфейсном модуле, может быть записана временная метка, которая более точно отражает время, в которое принят пакет, чем если бы временная метка была сформирована посредством операционной системы. Таким образом, даже если есть задержка между тем, когда пакет принят в сетевом интерфейсном модуле, и временем, когда он отправлен в стек сетевой передачи данных, временная метка по-прежнему точно указывает, когда пакет фактически принят в сетевом устройстве. Дополнительно, ресурсы операционной системы освобождаются от нагрузки формирования временной метки, что позволяет предоставлять менее затратное решение для управления перегруженностью в сетевом устройстве.
Фиг.7 - это блок-схема последовательности операций, иллюстрирующая способ 700 управления перегруженностью по сетевому соединению между сетевым устройством и сетью передачи данных, при этом сетевое устройство содержит стек сетевой передачи данных и отдельный компонент сетевого интерфейса, согласно некоторым вариантам осуществления изобретения.
На этапе 702 пакет (к примеру, 126) может быть принят по соединению из сети, например, в сетевом интерфейсном модуле 122, как описано выше.
Временная метка (к примеру, 118), соответствующая времени, в которое принят пакет, может быть сформирована на этапе 704, например, посредством формирователя 124 временных меток модуля 122.
На этапе 706 информация, ассоциативно связывающая временную метку с пакетом, может быть сохранена в структуре данных, доступной посредством стека сетевой передачи данных. Например, в вариантах осуществления изобретения, в которых используется операционная система Windows Vista™, этап 706 может включать в себя ассоциативное связывание временной метки с пакетом в структуре данных NET_BUFFER и/или NET_BUFFER_LIST.
Пакет может отправляться в стек сетевой передачи данных (к примеру, 110) на этапе 708, например, как описано выше в связи с системой 100.
На этапе 710 RTT данных, отправленных из сетевого устройства в другой сетевой объект, может быть определено, по меньшей мере, частично на основе информации, ассоциативно связывающей временную метку и пакет. Например, временная метка, возможно, сформирована, когда фрагмент данных передан из сетевого устройства в другой сетевой объект. RTT соединения может быть определено посредством определения разности между временной меткой, которая указывает то, когда этот фрагмент данных передан, и временной меткой, сформированной на этапе 704 для подтверждения приема, указывающего то, что фрагмент данных принят посредством сетевого объекта.
На этапе 712 перегруженность сети может быть определена, по меньшей мере, частично на основе определенного времени на передачу и подтверждения приема. Например, если RTT, определенное на этапе 710, указывает изменение RTT для соединения, это изменение может быть передано в CCM, управляющий перегруженностью соединения, например, как описано выше в связи с системой 100. CCM затем может обновить переменные состояния соединения для соединения и передать обновленные переменные в стек сетевой передачи данных (к примеру, 110), который после этого может изменить управление соединением, например, как описано выше.
Способ 700 может включать в себя дополнительные этапы. Дополнительно, порядок этапов, выполняемых как часть способа 400, не ограничен порядком, проиллюстрированным на фиг.4, поскольку этапы могут выполняться в другом порядке, и/или один или более этапов могут выполняться параллельно, по меньшей мере, частично. Например, этап 708 может выполняться до или параллельно с этапом 706.
Способы 300, 600 и 700 и их этапы, различные варианты осуществления и варианты этих способов и этих этапов, а также другие методологии и методики, описанные выше, отдельно или в комбинации, могут быть заданы посредством машиночитаемых сигналов, материально осуществленных на одном или более машиночитаемых носителей, к примеру, энергонезависимых носителей записи, элементов памяти на интегральных схемах либо комбинации вышеозначенного. Машиночитаемыми носителями могут быть любые доступные носители, к которым можно осуществлять доступ посредством компьютера. В качестве примеров, но не ограничения, машиночитаемые носители могут содержать компьютерные носители хранения и среду связи. Компьютерные носители хранения включают в себя энергозависимые и энергонезависимые, сменные и стационарные носители, реализованные по любому способу или технологии хранения такой информации, как машиночитаемые команды, структуры данных, программные модули и др. данные. Компьютерные носители хранения данных включают в себя (но не только) RAM, ROM, EEPROM, флэш-память или другую технологию памяти, CD-ROM, универсальные цифровые диски (DVD) или другие оптические диски, магнитные кассеты, магнитные ленты, устройства хранения на магнитных дисках или другие магнитные устройства хранения, другие типы энергозависимой и энергонезависимой памяти, любой другой носитель, который может быть использован для того, чтобы хранить нужную информацию, и к которому можно осуществлять доступ посредством компьютера, а также любую надлежащую комбинацию вышеозначенного.
Среда связи типично осуществляет машиночитаемые инструкции, структуры данных, программные модули или другие данные в модулированном сигнале данных, таких как волновая несущая или другой механизм распространения, и включает в себя любую среду доставки информации. Термин "модулированный сигнал данных" означает сигнал, который имеет одну или более из его характеристик, установленных или изменяемых таким образом, чтобы кодировать информацию в сигнале. В качестве примера, а не ограничения, среда связи включает в себя проводную среду, такую как проводная сеть или прямое проводное соединение, беспроводную среду, такую как акустическая среда, радиочастота, инфракрасное излучение и другая беспроводная среда, другие типы среды связи, а также любую надлежащую комбинацию вышеозначенного.
Машиночитаемые сигналы, осуществленные на одном или более машиночитаемых носителей, могут определять инструкции, например, как часть одной или более программ, которые в результате приведения в исполнение посредством компьютера, инструктируют компьютеру выполнять одну или более функций, описанных в данном документе (включая способы 300, 600 и 700 или любые их этапы), и/или их различных вариантов осуществления, разновидностей и комбинаций. Эти инструкции могут быть написаны на любом из множества языков программирования, например, Java, J#, Visual Basic, C, C# или C++, Fortran, Pascal, Eiffel, Basic, COBOL и т.д., или любой из множества комбинаций вышеозначенного. Машиночитаемые носители, на которых осуществляются эти инструкции, могут размещаться в одном или более компонентов любой из систем 100, 200, 800 и 900, описанных в данном документе, могут быть распределены по одному или более таких компонентов и могут быть в переходном состоянии между ними.
Машиночитаемые носители могут быть переносными, так что инструкции, сохраненные на них, могут загружаться в любой ресурс вычислительной системы, чтобы реализовывать аспекты настоящего изобретения, описанные в данном документе. Помимо этого, следует принимать во внимание, что инструкции, сохраненные на машиночитаемом носителе, описанном выше, не ограничены инструкциями, осуществленными как часть прикладной программы, запущенной на узловом компьютере. Наоборот, инструкции могут быть осуществлены как любой тип вычислительного кода (к примеру, программное обеспечение или микрокод), который может быть использован для того, чтобы программировать процессор так, чтобы реализовывать вышеописанные аспекты настоящего изобретения.
Следует принимать во внимание, что любой компонент или отдельный набор из нескольких компонентов вычислительной системы, например, любой из вычислительных систем, описанных в связи с фиг.1, 2, 8 и 9, которые выполняют функции, описанные в данном документе, могут, в общем, рассматриваться как один или более контроллеров, которые управляют этими функциями. Один или более контроллеров могут быть реализованы множеством способов, например, с помощью специализированных аппаратных средств и/или микропрограммного обеспечения, с помощью процессора, который запрограммирован с помощью микрокода или программного обеспечения, чтобы выполнять функции, упомянутые выше, либо любой надлежащей комбинации вышеозначенного.
Различные варианты осуществления согласно изобретению могут быть реализованы на одной или более вычислительных систем. Этими вычислительными системами могут быть, к примеру, компьютеры общего назначения, такие как компьютеры на базе процессора Intel PENTIUM, процессоров Motorola PowerPC, Sun UltraSPARC, Hewlett-Packard PA-RISC, любых из множества процессоров, предлагаемых Advanced Micro Devices (AMD), либо любого другого типа процессора. Следует принимать во внимание, что один или более из любых типов вычислительных систем может быть использован для того, чтобы реализовывать различные аспекты изобретения.
Вычислительная система общего назначения согласно одному варианту осуществления изобретения выполнена с возможностью выполнять одну или более функций, описанных выше. Следует принимать во внимание, что система может выполнять другие функции, и изобретение не ограничено наличием какой-либо конкретной функции либо набора функций.
Например, различные аспекты изобретения могут быть реализованы как специализированное программное обеспечение, приводимое в исполнение в вычислительной системе 800 общего назначения, такой как показанная на фиг.8. Вычислительная система 800 может включать в себя процессор 803, соединенный с одним или более запоминающих устройств 804, таких как дисковый накопитель, память или другое устройство для хранения данных. Память 804 типично используется для хранения программ и данных в ходе работы вычислительной системы 800. Компоненты вычислительной системы 800 могут быть соединены посредством механизма 805 межкомпонентного соединения, который может включать в себя одну или более шин (к примеру, между компонентами, которые интегрированы в одной машине) и/или сеть (к примеру, между компонентами, которые размещаются на отдельных обособленных машинах). Механизм 805 межкомпонентного взаимодействия предоставляет возможность информации (к примеру, данным, инструкциям) быть обмениваемой между системными компонентами системы 800. Вычислительная система 800 также включает в себя одно или более устройств 802 ввода, например, клавиатуру, мышь, шаровой манипулятор, микрофон, сенсорный экран, и одно или более устройств 801 вывода, например, печатающее устройство, экран дисплея, громкоговоритель. Помимо этого, вычислительная система 800 может содержать один или более интерфейсов (не показаны), которые соединяют вычислительную систему 800 с сетью связи (помимо или в качестве альтернативы механизму 805 межкомпонентного соединения).
Система 806 хранения, подробнее показанная на фиг.9, типично включает в себя машиночитаемый и записываемый энергонезависимый носитель 901 записи, на который сохраняются сигналы, которые задают программу, которая должна быть приведена в исполнение посредством процессора, или информацию, сохраненную на или в носителе 901, которая должна быть обработана посредством программы. Носителем может быть, например, диск или флэш-память. Типично при работе процессор инструктирует данным быть считанными из энергонезависимого носителя 901 записи в другое запоминающее устройство 902, которое предоставляет более быстрый доступ к информации посредством процессора, чем носитель 901. Это запоминающее устройство 902 типично является энергозависимым оперативным запоминающим устройством, таким как динамическое оперативное запоминающее устройство (DRAM) или статическое запоминающее устройство (SRAM). Оно может находиться в системе 806 хранения, как показано, либо в системе 804 памяти, не показана. Процессор 803, в общем, обрабатывает данные в памяти 804, 902 на интегральных схемах и затем копирует данные в носитель 901 после того, как обработка завершена. Известно множество механизмов для управления перемещением данных между носителем 901 и элементом 804, 902 памяти на интегральных схемах, и изобретение не ограничено в этом отношении. Изобретение не ограничено конкретной системой 804 памяти или системой 806 хранения.
Вычислительная система может включать в себя специально запрограммированные аппаратные средства специального назначения, например, специализированную интегральную схему (ASIC). Аспекты изобретения могут быть реализованы в программном обеспечении, микропрограммном обеспечении или аппаратных средствах либо в любой комбинации вышеозначенного. Дополнительно, эти способы, этапы, системы, элементы и системы и ее компоненты могут быть реализованы как часть вычислительной системы, описанной выше, или как независимый компонент.
Хотя вычислительная система 800 показана в качестве примера как один тип вычислительной системы, в котором различные аспекты изобретения могут быть практически осуществлены, следует принимать во внимание, что аспекты изобретения не ограничены реализацией в вычислительной системе, показанной на фиг.8. Различные аспекты изобретения могут быть практически осуществлены на одном или более компьютеров, имеющих архитектуру и компоненты, отличные от показанных на фиг.8.
Вычислительная система 800 может быть вычислительной системой общего назначения, которая программируется с помощью высокоуровневого языка вычислительного программирования. Вычислительная система 800 также может быть реализована с помощью специально запрограммированных аппаратных средств специального назначения. В вычислительной системе 800 процессором 803 типично является предлагаемый на рынке процессор, такой как процессор класса Pentium, предлагаемый Intel Corporation. Множество других процессоров доступно. Такой процессор обычно приводит в исполнение операционную систему, которой может быть, например, операционная система Windows 95, Windows 98, Windows NT, Windows 2000 (Windows ME) или Windows XP, предлагаемая Microsoft Corporation, MAC OS System X, предлагаемая Apple Computer, операционная система Solaris, предлагаемая Sun Microsystems, Linux, предлагаемая множеством поставщиков, или UNIX, предлагаемая множеством поставщиков. Любые из множества других операционных систем могут быть использованы.
Процессор и операционная система совместно задают вычислительную платформу, для которой пишутся прикладные программы на высокоуровневых языках программирования. Следует понимать, что изобретение не ограничено конкретной платформой вычислительной системы, процессором, операционной системой или сетью. Так же, специалистам в данной области техники должно быть очевидным, что настоящее изобретение не ограничено конкретным языком программирования или вычислительной системой, и что другие надлежащие языки программирования и другие надлежащие вычислительные системы также могут быть использованы.
Одна или более частей вычислительной системы могут быть распределены по одной или более вычислительных систем (не показаны), соединенных с сетью передачи данных. Эти вычислительные системы также могут быть вычислительными системами общего назначения. Например, различные аспекты изобретения могут быть распределены по одной или более вычислительным системам, выполненным с возможностью предоставлять услугу (к примеру, серверы) одному или более клиентских компьютеров либо выполнять общую задачу как часть распределенной системы. Например, различные аспекты изобретения могут быть выполнены в клиент-серверной системе, которая включает в себя компоненты, распределенные по одной или более серверных систем, которые выполняют различные функции согласно различным вариантам осуществления изобретения. Эти компоненты могут быть исполняемым, промежуточным (к примеру, IL) или интерпретируемым (к примеру, Java) кодом, которые обмениваются данными по сети передачи данных (к примеру, Интернет) с помощью протокола обмена данными (к примеру, TCP/IP).
Следует принимать во внимание, что изобретение не ограничено приведением в исполнение на какой-либо конкретной системе или группе систем и что изобретение не ограничено какой-либо конкретной распределенной архитектурой, сетью или протоколом обмена данными.
Различные варианты осуществления настоящего изобретения могут быть запрограммированы с помощью языка объектно-ориентированного программирования, такого как SmallTalk, Java, J# (J-Sharp), C++, Ada или C# (C-Sharp). Другие языки объектно-ориентированного программирования также могут быть использованы. Альтернативно, языки функционального, скриптового и/или логического программирования могут быть использованы. Различные аспекты изобретения могут быть реализованы в незапрограммированном окружении (к примеру, документы, созданные в HTML, XML или другом формате, которые при просмотре в окне программы обозревателя подготавливают посредством рендеринга аспекты графического пользовательского интерфейса (GUI) или выполняют другие функции). Различные аспекты изобретения могут быть использованы как запрограммированные или незапрограммированные элементы либо любая комбинация вышеозначенного. Дополнительно, различные варианты осуществления изобретения могут быть реализованы с помощью технологии Microsoft.NET, предлагаемой Microsoft Corporation.
После описания некоторых иллюстративных вариантов осуществления изобретения специалистам в данной области техники должно быть очевидным, что вышеозначенное является просто иллюстративным, а не ограничивающим, будучи представленным только в качестве примера. Различные модификации и другие иллюстративные варианты осуществления находятся в рамках области применения для специалистов в данной области техники и рассматриваются как попадающие в рамки области применения изобретения. В частности, хотя многие из примеров, представленных в данном документе, влекут за собой конкретные комбинации этапов способа или системных элементов, следует понимать, что эти этапы и эти элементы могут быть комбинированы другими способами, чтобы достичь тех же целей. Этапы, элементы и признаки, поясненные только в связи с одним вариантом осуществления, не предназначены для того, чтобы быть исключенными из аналогичной роли в других вариантах осуществления. Дополнительно, для одного или более ограничений "средство плюс функция", указанных в нижеприведенной формуле изобретения, средство не предназначено для того, чтобы быть ограниченным средством, описанным в данном документе, для выполнения указанной функции, а предназначено для того, чтобы охватывать по области применения все эквивалентные средства, известные сегодня или разработанные впоследствии, для выполнения указанной функции.
Использование перечисляемых терминов, таких как "первый", "второй", "третий" и т.д. в формуле изобретения для того, чтобы модифицировать элемент формулы изобретения, само по себе не подразумевает какой-либо приоритет, предшествование или очередность одного элемента формулы изобретения в сравнении с другим либо временную последовательность, в которой выполняются этапы способа, а используется просто в качестве меток, чтобы отличать один элемент формулы изобретения, имеющий определенное имя, от другого элемента, имеющего такое же имя (но для применения перечисляемого термина), чтобы различать элементы формулы изобретения.