Введение В этой преимущественно технической статье я расскажу о реализации IPv6 в новом стеке Microsoft TCP/IP. Новый стек был включен в операционные системы Windows, начиная с Vista и Server 2003. В кратком введении объясняется, что такое IPv6, а в следующих трех разделах рассматриваются различия между новым стеком и старым стеком (особенно различия, связанные с IPv6).
Надеюсь, вас не смутит слишком строгое изложение.
1. Введение: Коротко об IPv6
IPv4
Интернет-протокол версии 4 (IPv4) не претерпел каких-либо серьезных изменений с момента публикации RFC 791 в 1981 году.Благодаря удачному первоначальному проектированию IPv4 выдержал испытание на масштабируемость, которое сопровождало рост сетей, которые он обслуживает. IPv4 стабилен, прост в реализации и с ним легко взаимодействовать.
Однако к началу 90-х годов Интернет на основе TCP/IP начал развиваться огромными темпами.
Уменьшение количества свободных IP-адресов произошло пугающе быстро, даже с учетом введения бесклассовой адресации.
Стало очевидным, что необходимо разработать способ избежать дефицита в будущем.
В 1992 году IETF опубликовал в виде RFC (RFC 1550) призыв к разработке и публикации прототипов протокола под названием IP The Next Generation (IPng).
НАТ
Изобретение трансляции сетевых адресов (NAT) в середине 90-х годов помогло существенно замедлить снижение количества доступных адресов.NAT позволяет транслировать запросы из внутренней сети во внешнюю (например, в Интернет), используя один внешний IP-адрес (NAT заменяет адреса непосредственно в заголовках датаграмм).
Однако NAT имеет ряд своих недостатков.
Трансляция адресов нарушает исходную модель подключения хостов в Интернете, тем самым усложняя их взаимодействие и негативно влияя на производительность.
Недостатки NAT ограничивают сферу его применения, поэтому NAT не решил (хотя и существенно тормозил и позволял выиграть много времени) проблему уменьшения количества свободных адресов.
Кроме того, IPv4 имеет ряд недостатков, устранение которых не входит в функции NAT. К ним относятся, например, слишком большое количество таблиц маршрутизации на основных интернет-маршрутизаторах, а также отсутствие обязательного стандарта использования IPsec.
IPv6
В 1996 году IETF выпустила серию RFC, описывающую результат работы над IPng — протоколом Интернета версии 6 (IPv6).Протокол объединил в одном стандарте концепции многих существовавших на тот момент усовершенствований IPv4. IPv6 является довольно консервативным расширением IPv4, и многие протоколы транспортного и программного уровня требуют минимальных (или вообще никаких) изменений для работы поверх IPv6. IPv6 включает в себя следующие основные инновации:
- Новый формат заголовка, предназначенный для уменьшения его размера до минимально возможного размера.
Все необязательные поля, которые раньше были в шапке, перенесены в «расширенные заголовки», расположенные после основного.
Благодаря этому заголовки пакетов теперь могут обрабатываться более эффективно на промежуточных маршрутизаторах.
- Новый формат адреса.
16 байт, выделенных для поля адреса, допускают комбинации 3,8e38. Это позволит полностью исключить технологии трансляции адресов (такие как NAT).
Кроме того, адресное пространство позволяет формировать несколько уровней вложенности сети и формирует эффективную иерархическую инфраструктуру маршрутизации.
- Обязательная поддержка IPsec.
- Конфигурация адреса без сохранения состояния, которая позволяет узлам в сети без DHCP-сервера автоматически настраивать адреса IPv6 с использованием префикса маршрутизатора или полностью независимо.
- Улучшенная система приоритетной доставки, работающая с помощью новых полей в заголовке пакета IPv6, описывающих, как следует идентифицировать и обрабатывать трафик.
Поскольку информация о приоритете находится в заголовке, даже пакеты, закодированные IPsec, поддерживают эту опцию.
- ICMPv6 — это новый протокол взаимодействия между узлами в одной сети, заменяющий ARP и ICMPv4 Router Discovery.
2. Реализации IPv6 в операционных системах Microsoft
Реализации Microsoft IPv6
Первой реализацией стека IPv6 от Microsoft является экспериментальная реализация прототипа, известная как «MSRIPv6 1.0», выпущенная в 1998 году компанией Microsoft Research. Его развитие и усовершенствование продолжались и в дальнейшем, вплоть до версии 1.4. В начале 2000 года компания MS Research объединила усилия с группой Windows Networking, и в марте на веб-сайте MSDN для загрузки была доступна технологическая версия стека IPv6 для Windows 2000 SP1. Windows XP, выпущенная в октябре 2001 года, имела встроенную поддержку IPv6 в виде стека Developer Preview (который, однако, не устанавливался по умолчанию, но мог быть легко добавлен позже).Windows XP SP1 и Windows Server 2003 включали первый полностью поддерживаемый и коммерчески доступный стек IPv6 от Microsoft. Windows Vista, выпущенная в 2007 году, включала новую реализацию IPv6 (и всей сетевой подсистемы в целом) — «стек TCP/IP следующего поколения».
Новый стек унаследовал архитектуру MSRIPv6, но код был полностью переписан.
В результате на данный момент существует 4 официальные реализации IPv6 от Microsoft, подходящие для промышленного использования:
- Стек TCP/IP следующего поколения для Windows Vista, Windows Server 2003 и Windows 7;
- Протокол IPv6 для семейства Windows Server 2003;
- Протокол IPv6 для Windows XP с пакетом обновления 1 и более поздних версий;
- Протокол IPv6 для Windows CE .
NET 4.1 и более поздних версий.
Стек TCP/IP следующего поколения
Стек протоколов TCP/IP, входящий в состав Windows XP и Windows Server 2003, был создан в начале 1990-х годов и за время своего существования претерпел множество изменений и улучшений.
Стек TCP/IP следующего поколения — это полная замена старой сетевой подсистемы не только для IPv6, но и для IPv4.
Архитектура нового стека показана на рисунке:
Как видно из рисунка, новый стек предоставляет 3 API для программ, сервисов и компонентов системы для доступа к сетевому функционалу:
- WSK (Winsock Kernel) — используется клиентами WSK (например, сетевыми драйверами).
- Windows Sockets — используются программами и службами на основе Windows Sockets. API сокетов Windows, в свою очередь, использует драйвер вспомогательной функции (AFD) для работы с сокетами TCP/IP.
- TDI — используется NetBIOS через TCP/IP и другими устаревшими клиентами TDI. Роль прослойки между TDI и стеком выполняет драйвер TDX.
С его помощью стек TCP/IP следующего поколения обеспечивает возможность обработки пакетов на сетевом, канальном и транспортном уровнях.
Более подробное обсуждение ВПП будет проведено в главе 4. Прием и отправка кадров осуществляется с помощью NDIS (Спецификация интерфейса сетевого драйвера) — разработанной Microsoft совместно с API 3Com для сетевых адаптеров.
В целом в архитектуре драйвера стека (tcpip.sys) можно выделить следующие уровни:
- Транспортный уровень — содержит реализации TCP и UDP, а также механизм отправки «сырых» IP-пакетов, не имеющих заголовка TCP или UDP.
- Сетевой уровень — содержит реализации IPv4 и IPv6, объединенные в двойной уровень IP.
- Framing Layer – содержит модули для формирования IP-пакетов.
Уровень включает в себя модули для различных физических сетевых технологий (таких как IEEE 802.3 (Ethernet), IEEE 802.11, PPP и IEEE 1394) и логических интерфейсов (обратная связь, туннели IPv4 и туннели IPv6).
3. Технологические различия при реализации нового и старого стеков.
Архитектура с двойным IP-уровнем
Реализации IPv6 в Windows XP и Windows Server 2003 имели двухстековую архитектуру.Старый стек содержал отдельные компоненты для IPv4 и IPv6, каждый со своей реализацией TCP и UDP, а также канального уровня.
Стек TCP/IP следующего поколения представляет собой единый компонент с двухуровневой IP-архитектурой.
IPv4 и IPv6 используют общие транспортный и канальный уровни.
Благодаря единой реализации TCP протокол TCP через IPv6 обладает всеми преимуществами производительности нового стека.
Подробнее об улучшении производительности мы поговорим в главе 7.
Ядро Винсокка
Winsock Kernel (WSK) — это новый API уровня ядра, разработанный для замены интерфейса транспортного драйвера (TDI), используемого в Windows XP и Windows Server 2003. WSK обладает большей производительностью и его легче программировать.В целях обратной совместимости новый стек также поддерживает TDI, используя TDX в качестве уровня.
Ядро Winsock использует те же концепции, что и интерфейс пользовательского уровня Winsock2. WSK поддерживает знакомые операции с сокетами, такие как создание сокетов, резервирование, установление соединения, а также получение и передача данных.
Однако следует отметить, что WSK — это совершенно новый интерфейс, обладающий рядом уникальных характеристик, таких как асинхронный ввод-вывод с использованием пакетов запросов ввода-вывода (IRP) и обратных вызовов событий для повышения производительности.
Платформа фильтрации Windows
Связанные с безопасностью интерфейсы в старом стеке, перехватчик брандмауэра, перехватчик фильтра и база данных фильтра пакетов были заменены новой платформой под названием Windows Filtering Platform (WFP).WFP предоставляет возможности фильтрации на всех уровнях стека TCP/IP. По сравнению с предыдущими технологиями WFP более безопасна, напрямую интегрирована в стек и ее проще программировать.
Технически WFP представляет собой набор системных сервисов и API на уровне пользователя и ядра.
WFP позволяет разрабатывать на ее основе межсетевые экраны и другое программное обеспечение для управления соединениями и обработки пакетов.
Брандмауэр Windows в Windows Vista, Windows 7 и Windows Server 2008 использует WFP.
Масштабирование на стороне приема
Архитектура NDIS 5.1 и более ранних версий ограничивала обработку запросов от одного сетевого адаптера одним процессором.Таким образом, даже многопроцессорный компьютер использовал для обработки сетевого трафика только один процессор.
Масштабирование на стороне приема устраняет этот недостаток, позволяя балансировать сетевую нагрузку между несколькими процессорами.
RSS позволяет параллельно выполнять несколько вызовов отложенных процедур (DPC) на одном сетевом адаптере.
Кроме того, если этот параметр поддерживается сетевым адаптером, RSS допускает параллельные прерывания.
Расширяемая инфраструктура
Благодаря расширяемой инфраструктуре модульные компоненты нового стека можно добавлять или удалять из него динамически.
4. Различия в поддержке стандартов и технологий
IPsec
В Windows XP и Windows Server 2003 поддержка безопасности интернет-протокола для трафика IPv6 была ограничена.Старый стек TCP/IP не поддерживал обмен ключами через Интернет (IKE) и шифрование данных.
Кроме того, все правила и ключи IPsec настраивались путем редактирования текстовых файлов и активировались с помощью утилиты командной строки IPsec6.exe.
Новый стек поддерживает IPsec как для IPv6, так и для IPv4. Эта поддержка включает в себя IKE и шифрование данных с использованием AES 128/192/256, а также настройку с помощью графических утилит.
МЛДv2
Протокол обнаружения прослушивателей многоадресной рассылки (MLD) используется коммутаторами IPv6 для обнаружения прослушивателей многоадресной рассылки (узлов, которые получают пакеты многоадресной рассылки) в своей сети и определения, какие адреса многоадресной рассылки интересуют эти узлы.Сам коммутатор может быть прослушивателем многоадресной рассылки одного или нескольких многоадресные адреса.
В этом случае он должен сообщить другим коммутаторам в своей сети, что он принимает многоадресные пакеты.
MLD — это аналог IGMP IPv6. Новый стек теперь поддерживает MLDv2. Отличием MLDv2 от первой версии является поддержка «фильтрации источников».
Узел имеет возможность сигнализировать, что он принимает только многоадресные пакеты, отправленные с одного из адресов в определенном наборе, или все многоадресные пакеты, кроме тех, которые отправлены с адреса в определенном наборе.
Следует отметить, что несмотря на нововведения, MLDv2 может взаимодействовать с MLDv1.
ЛЛМНР
Целью разрешения многоадресных имен Link-Local (LLMNR) является предоставление возможности разрешать сетевые имена в ситуациях, когда это невозможно с помощью DNS (например, когда в сети просто нет DNS-сервера).IPv4 традиционно использовал протокол NetBIOS over TCP/IP (NetBT) для аналогичных целей.
Однако NetBT работает только с IPv4 и не поддерживает IPv6. Кроме того, сетевой администратор может отключить NetBT в сети, использующей DNS-сервер.
LLMNR поддерживает все текущие и будущие форматы, типы и классы DNS. В этом случае LLMNR использует собственный порт и отдельный от DNS кэш.
LLMNR не является заменой DNS, поскольку предназначен для работы только в локальных сетях.
IPv6 через PPP
Протокол «точка-точка» (PPP) обеспечивает стандартный метод инкапсуляции пакетов сетевого уровня для передачи по каналам «точка-точка».Кроме того, PPP включает в себя протокол управления каналом (LCP), который используется для настройки и тестирования соединений, а также семейство протоколов управления сетью NCP (протокол управления сетью) для различных протоколов сетевого уровня.
Новый стек TCP/IP теперь имеет встроенную поддержку передачи трафика IPv6 с использованием PPP. Стек включает NCP для IPv6, известный как протокол управления IPv6 (IPV6CP), и поддерживает пересылку пакетов IPv6 через соединение PPP. Например, можно подключиться к интернет-провайдеру, используя IPv6, используя коммутируемый доступ или PPP через Ethernet.
DHCPv6
Представленная в IPv6 «автоконфигурация адреса без сохранения состояния» устраняет основную причину использования DHCP в сетях IPv4, но не может полностью заменить ее.DHCPv6 можно использовать для назначения заранее выбранных адресов хостам, если сетевой администратор хочет иметь больший контроль над распределением адресов.
Кроме того, сервер DHCPv6 может распространять информацию, которую хосты не могут получить другим способом, например адреса серверов DNS [NDP!].
Клиентская служба DHCP в новом стеке поддерживает DHCPv6 и оба режима его конфигурации (без отслеживания и с отслеживанием состояния).
DHCP-сервер в Windows Server 2008 также поддерживает DHCPv6.
Случайные идентификаторы интерфейсов
Чтобы предотвратить сканирование адресов IPv6 на предмет известных идентификаторов поставщиков сетевых карт, новый стек по умолчанию генерирует случайные идентификаторы интерфейсов для автоматически настроенных адресов IPv6.Использование буквальных адресов IPv6 в качестве URL-адресов в WinInet
Win32 Internet Extensions (WinInet) — это API высокого уровня для доступа к распространенным интернет-протоколам.В отличие от WinSock, он позволяет разработчику не беспокоиться о деталях реализации соответствующих протоколов.
В операционных системах с новым стеком WinInet поддерживает использование буквальных адресов IPv6 в URL-адресах.
Например, в браузере на базе WinInet (например, Internet Explorer) вы можете ввести « http://[2001:db8:100:2a5f::1 ]" в поле адреса.
Конечные пользователи вряд ли будут часто использовать эту функцию, но она будет полезна разработчикам сетевых приложений, тестировщикам и сетевым администраторам.
Вместо заключения: если такая неформатная статья для Хабра вызовет интерес, я готов опубликовать продолжение, которое расскажет об улучшениях производительности стека.
Теги: #microsoft #ipv6 #tcp-ip
-
Запираясь В Тишине
19 Oct, 24 -
Сравнение Гибких Методологий
19 Oct, 24 -
Генератор Прелоадера (Индикатора Загрузки)
19 Oct, 24