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


Рекомендации по работе с пакетами для канала передачи данных расширяемого коммутатора

В этом разделе описываются рекомендации, которые Hyper-V расширения расширяемых коммутаторов должны соответствовать управлению пакетами, полученными на пути к расширяемым коммутаторам.

Примечание В интерфейсе расширяемого коммутатора драйверы фильтров NDIS называются расширениями расширяемого коммутатора, а стек драйверов называется стеком расширяемых коммутаторов. Дополнительные сведения о расширениях см. в Hyper-V расширяемые расширения коммутаторов.

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

Расширения должны соответствовать этим рекомендациям по управлению пакетами в пути к данным расширяемого коммутатора:

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

  • Расширение записи может отслеживать пакеты на расширяемом коммутаторе входящего трафика и пути к исходящим данным. Однако этот тип расширения должен всегда пересылать пакеты и не должен удалять пакеты. Кроме того, расширение записи не должно изменять данные пакета, прежде чем он перенаправит пакет.

  • В пути к данным расширяемого коммутатора ingress расширения фильтрации и пересылки могут выполнять следующие действия:

    • Расширения фильтрации могут фильтровать трафик пакетов и применять только пользовательские политики портов или коммутаторов для доставки пакетов через расширяемый коммутатор. Когда расширение фильтрует пакеты в потоке данных входящего трафика, оно может применять правила фильтрации, основанные только на исходном порту и подключении сетевого адаптера, из которого прибыл пакет. Эти сведения хранятся в данных OOB структуры NET_BUFFER_LIST пакета и могут быть получены с помощью макроса NET_BUFFER_LIST_SWITCH_FORWARDING_DETAIL.

      Примечание Пакеты, полученные на пути к данным входящего трафика, не содержат конечные порты. Фильтрация пакетов на основе конечных портов может выполняться только на пакетах, полученных на выходящем векторе передачи данных.

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

  • В расширяемом коммутаторе исходящий путь передачи данных, расширения для фильтрации и пересылки могут выполнять следующие действия:

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

      Данные порта назначения хранятся в данных OOB NET_BUFFER_LIST структуры пакета. Расширения получают эти сведения путем вызова функции GetNetBufferListDestinations.

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

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

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

  • На расширяемом коммутаторе исходящий путь к данным, фильтрация и пересылка расширений не должны выполнять следующие действия:

    • Измените данные пакета перед его пересылкой по пути исходящего трафика.

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

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

      Для получения дополнительной информации см. клонирование трафика пакетов.

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

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

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

    • Внедрять новые или клонированные пакеты данных в траекторию исходящих данных.

  • В стандартном маршруте передачи данных NDIS нерасширяемый коммутатор OOB часто имеет разные форматы в зависимости от того, указывается ли пакет как отправляемый или получаемый. Например, данные OOB NDIS_IPSEC_OFFLOAD_V2_HEADER_NET_BUFFER_LIST_INFO представляют собой объединение структур, специфичных для отправки и получения.

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

    Формат этих данных OOB зависит от порта расширяемого коммутатора источника, из которого пакет прибыл в расширяемый коммутатор. Если исходный порт подключен к внешнему сетевому адаптеру, данные нераcширяемого коммутатора OOB будут иметь формат приема. Для других портов эти данные OOB будут находиться в формате отправки.

    Примечание Если расширение клонирует структуру NET_BUFFER_LIST пакета, необходимо учитывать данные OOB, которые не могут быть расширены, если они добавляются или изменяются. Расширение должно вызывать CopyNetBufferListInfo, чтобы скопировать данные OOB, связанные с расширяемым путем переключения данных из исходного пакета в клонированный пакет. Эта функция будет поддерживать формат отправки или получения OOB при копировании данных в клонированный пакет.

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