'

Сетевая подсистема Windows глазами разработчика.

Понравилась презентация – покажи это...





Слайд 0

Сетевая подсистема Windows глазами разработчика. Алексей Пахунов alexeypa@microsoft.com 1 Краткий, неполный и, в основном, неверный обзор. :-)


Слайд 1

Обо мне. Senior SDE в команде eXtreme Computing Group (XCG), Microsoft Research. Специализация: низкоуровневое и системное программирование; разработка драйверов и компонентов ядра Windows. 3 года в команде Windows Kernel: Wow64 и поддержка AVX. Мой блог: http://blog.not-a-kernel-guy.com. 2


Слайд 2

Содержание. Архитектура стека TCP/IP. Путь данных вверх и вниз. Настройки и аппаратное ускорение. Фильтры и мониторинг трафика. 3


Слайд 3

Архитектура стека TCP/IP. 4


Слайд 4

Архитектура стека TCP/IP. 5


Слайд 5

Стек драйверов в NDIS 6.0. Отдельный стек над каждым сетевым адаптером. Многопортовые сетевые адаптеры могут запросить отдельный стек для каждого порта. Сетевой адаптер может привязывается к нескольким протоколам. Фильтры устанавливаются отдельно над каждым сетевым адаптером. 6


Слайд 6

Промежуточные драйверы. Промежуточный драйвер объединяет два стека в один. Верхний стек видит виртуальный сетевой адаптер. Нижний стек привязывается к промежуточному драйверу как к протоколу. 7


Слайд 7

Программные интерфейсы. Winsock (send/recv, WSASend/WSARecv). Winsock Kernel (WskSend/WskReceive). IP Helper. RPC (RpcXxx). WNet (WNetXxx). WinInet (InternetXxx). WinHTTP (WinHttpXxx). HTTP Server API (HttpXXX). 8


Слайд 8

Путь данных вверх и вниз. 9


Слайд 9

Обработка принятых пакетов (IP). Сетевой адаптер проверяет целостность пакета и генерирует прерывание. Драйвер адаптера передает его выше по стеку. IP проверяет целостность IP заголовка, восстанавливает пакет из фрагментов, перенаправляет пакет согласно таблице маршрутизации. TCP/UDP проверяет целостность данных пакета, запрашивает повторную передачу и копирует данные в буфер приложения или драйвера: recv(connection, buffer, length, 0); 10


Слайд 10

Передача данных (TCP). Приложение указывает на данные для передачи: send(connection, buffer, length, 0); TCP формирует заголовки пакета (или нескольких пакетов). IP формирует свои заголовки и разбивает пакеты на фрагменты, если необходимо. Драйвер адаптера ставит пакеты в очередь, настраивает DMA и запускает передачу пакетов. Сетевой адаптер генерирует прерывание по окончанию передачи. Драйвер адаптера возвращает буферы их владельцу. 11


Слайд 11

Как пакеты хранятся в памяти? Каждый пакет описывается списком буферов (NET_BUFFER). Буфер может располагаться в несмежных физических страницах. Между уровнями передаются указатели. Данные пакета копируются только один раз. 12


Слайд 12

Прямой доступ в память (DMA). Сетевой адаптер поддерживает очереди буферов. Несколько очередей для приёма и передачи. Драйвер отвечает за выделение памяти, вставляет буферы в очередь и удаляет их оттуда. Сетевой адаптер сохраняет принятые данные в подготовленные драйвером буфера. Дескрипторы указывают сетевому адаптеру как нужно «склеивать» пакеты из нескольких буферов. 13


Слайд 13

Прерывания в Windows. Уровни прерываний (IRQL): PASSIVE_LEVEL – обычный код; используются приоритеты потоков. DISPATCH_LEVEL – планировщик потоков и подкачка страниц приостановлены. DIRQLs – прерывания от менее приоритетных устройств заблокированы. Прерывание обрабатывается в два этапа: Обработчик прерывания должен выполнить минимум работы максимально быстро. Отложенный обработчик (DPC) выполняет оставшуюся работу. IRQL нельзя произвольно понижать. Каждое из ядер может находится на своем уровне прерываний. 14


Слайд 14

Прерывания в NDIS. Основные прерывания: пакет принят и передан. Обработка принятых пакетов проходит на DISPATCH_LEVEL. Любой драйвер в стеке имеет право передать обработку в рабочий поток (PASSIVE_LEVEL). Исходящие пакеты формируются на PASSIVE_LEVEL. Любой драйвер в стеке имеет право повысить IRQL до DISPATCH_LEVEL. 15


Слайд 15

Уведомление приложений. Все операции ввода-вывода асинхронны. Синхронные send() и recv() эмулируются. Уведомление об окончании операции доставляется одним из стандартных способов: APC, установка события, IO completion port, threadpool, опрос OVERLAPPED. Драйверы, работающие через Winsock Kernel, используют IRP (I/O Request Packet). 16


Слайд 16

Настройки и аппаратное ускорение. 17


Слайд 17

Аппаратное ускорение. MAC и VLAN фильтры на сетевом адаптере. Регулирование частоты прерываний (Interrupt Moderation). Выгрузка вычислений на сетевой адаптер: Вычисление и проверка контрольных сумм (Checksum Offloading). TCP сегментация (Large Send Offloading). TCP Chimney Offloading. Обработка принятых пакетов на нескольких процессорах (Receive-Side Scaling). Поддержка виртуализации. 18


Слайд 18

Вкладка «Advanced». Описывается в .INF файле драйвера. NDIS определяет стандартные параметры. …но отображаемые названия параметров все равно берутся из .INF файла. 19 Настройка сетевого адаптера (1).


Слайд 19

Настройка сетевого адаптера (2). 20


Слайд 20

Настройка TCP/IP. Доступные через реестр параметры TCP/IP описаны в TechNet и множестве других источников. HKLM\SYSTEM\CurrentControlSet\services\Tcpip\Parameters: Адреса. Размер окна TCP. Маршрутизация. Лимиты. ... 21


Слайд 21

Фильтры и слежение за трафиком. 22


Слайд 22

NDIS фильтры. Делятся на следящие и модифицирующие фильтры. Перехватывают и пакеты, и управляющие OID запросы. Иными словами – полностью контролируют нижнюю часть стека. Загружаются для всех адаптеров данного типа. Перехватываемые функции конфигурируются для отдельно для каждого адаптера. 23


Слайд 23

Расширение отладчика !ndiskd. Расширение !ndiskd: Входит в состав Windows Debugging Tools. Дружественно к неподготовленному пользователю. Показывает детальную информацию об адаптерах, фильтрах и протоколах. Требует подключения ядерного отладчика. Достаточно локального подключения. 24


Слайд 24

Это проще, чем кажеться... Приостановите BitLocker. “bcdedit /debug on”. После перезагрузки: “windbg.exe -kl”. Убедитесь в корректности “.sympath”. “!ndiskd.help”. 25


Слайд 25

Архитектура WFP. 26 WFP – Windows Filtering Platform.


Слайд 26

Основные элементы WFP. Shims: Стек TCP/IP определяет несколько ключевых точек, где происходит фильтрация трафика. Filters: Ко входящему и исходящему трафику применяется набор правил, задающий действия, применяемые к данным. Layers: Фильтры групприрутся по уровням и подуровням. Каждый уровень определяет свой набор полей для фильтрации. Порядок применения фильтров однозначно определён. Callouts: Фильтр может принять решение о глубокой инспекции пакета. 27


Слайд 27

Архитектура IPsec. 28


Слайд 28

Мониторинг WFP. Aудит: Конфигурация WFP. Отброшенные/пропущенные пакеты, соединения, операции с сокетами. Обмен ключами и отброшенные пакеты в IPsec. Конфигурация WFP доступна через Win32 API. 29


×

HTML:





Ссылка: