Сетевая подсистема Windows глазами разработчика. Алексей Пахунов [email protected]

Содержание

Слайд 2

Обо мне.

Senior SDE в команде eXtreme Computing Group (XCG), Microsoft Research.
Специализация: низкоуровневое

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

Слайд 3

Содержание.

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

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

Слайд 4

АРХИТЕКТУРА СТЕКА TCP/IP.

АРХИТЕКТУРА СТЕКА TCP/IP.

Слайд 5

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

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

Слайд 6

Стек драйверов в NDIS 6.0.

Отдельный стек над каждым сетевым адаптером.
Многопортовые сетевые адаптеры

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

Слайд 7

Промежуточные драйверы.

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

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

Слайд 8

Программные интерфейсы.

Winsock (send/recv, WSASend/WSARecv).
Winsock Kernel (WskSend/WskReceive).
IP Helper.
RPC (RpcXxx).
WNet (WNetXxx).
WinInet (InternetXxx).
WinHTTP (WinHttpXxx).
HTTP Server

Программные интерфейсы. Winsock (send/recv, WSASend/WSARecv). Winsock Kernel (WskSend/WskReceive). IP Helper. RPC (RpcXxx).
API (HttpXXX).

Слайд 9

ПУТЬ ДАННЫХ ВВЕРХ И ВНИЗ.

ПУТЬ ДАННЫХ ВВЕРХ И ВНИЗ.

Слайд 10

Обработка принятых пакетов (IP).

Сетевой адаптер проверяет целостность пакета и генерирует прерывание.
Драйвер адаптера

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

Слайд 11

Передача данных (TCP).

Приложение указывает на данные для передачи: send(connection, buffer, length, 0);
TCP

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

Слайд 12

Как пакеты хранятся в памяти?

Каждый пакет описывается списком буферов (NET_BUFFER).
Буфер может располагаться

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

Слайд 13

Прямой доступ в память (DMA).

Сетевой адаптер поддерживает очереди буферов.
Несколько очередей для приёма

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

Слайд 14

Прерывания в Windows.

Уровни прерываний (IRQL):
PASSIVE_LEVEL – обычный код; используются приоритеты потоков.
DISPATCH_LEVEL –

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

Слайд 15

Прерывания в NDIS.

Основные прерывания: пакет принят и передан.
Обработка принятых пакетов проходит на

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

Слайд 16

Уведомление приложений.

Все операции ввода-вывода асинхронны.
Синхронные send() и recv() эмулируются.
Уведомление об окончании операции

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

Слайд 17

НАСТРОЙКИ И АППАРАТНОЕ УСКОРЕНИЕ.

НАСТРОЙКИ И АППАРАТНОЕ УСКОРЕНИЕ.

Слайд 18

Аппаратное ускорение.

MAC и VLAN фильтры на сетевом адаптере.
Регулирование частоты прерываний (Interrupt Moderation).
Выгрузка

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

Слайд 19

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

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

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

Слайд 20

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

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

Слайд 21

Настройка TCP/IP.

Доступные через реестр параметры TCP/IP описаны в TechNet и множестве других

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

Слайд 22

ФИЛЬТРЫ И СЛЕЖЕНИЕ ЗА ТРАФИКОМ.

ФИЛЬТРЫ И СЛЕЖЕНИЕ ЗА ТРАФИКОМ.

Слайд 23

NDIS фильтры.

Делятся на следящие и модифицирующие фильтры.
Перехватывают и пакеты, и управляющие OID

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

Слайд 24

Расширение отладчика !ndiskd.

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

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

Слайд 25

Это проще, чем кажеться...

Приостановите BitLocker.
“bcdedit /debug on”.
После перезагрузки: “windbg.exe -kl”.
Убедитесь в корректности

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

Слайд 26

Архитектура WFP.

WFP – Windows Filtering Platform.

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

Слайд 27

Основные элементы WFP.

Shims:
Стек TCP/IP определяет несколько ключевых точек, где происходит фильтрация трафика.
Filters:
Ко

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

Слайд 28

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

Архитектура IPsec.
Имя файла: Сетевая-подсистема-Windows-глазами-разработчика.-Алексей-Пахунов[email protected]
Количество просмотров: 816
Количество скачиваний: 1