- Сетевая подсистема в ОС
- Инструментарий и метод исследования
- Проблемы при исследовании ОС Linux
- Сетевая подсистема Linux
- ОС Windows: сетевая подсистема
- Структура сетевой операционной системы linux
- Возможности, которые предоставляет ОС Linux.
- Кому и зачем может понадобиться ОС Linux.
- Xарактерные особенности Linux как ОС.
Сетевая подсистема в ОС
Для будущих студентов курса «Сетевой инженер» и всех интересующихся подготовили полезную статью.
Также приглашаем на открытый вебинар по теме «NAT — не Firewall». Участники вебинара вместе с экспертом рассмотрят NAT и его использование, почему NAT != firewall, а также различные виды конфигураций для разных ситуаций.
В данной статье будет проведено исследование сетевой подсистемы ОС Windows и Linux, а также предложен план изучения подсистем операционной системы. Основная задача исследования — понять, из чего состоит сетевая подсистема; какие поддерживает протоколы из коробки; какие дополнительные механизмы использует в своей работе.
Disclamer: Статья описывает данные, которые с точки зрения автора помогут понять, как работают операционные системы с моделью TCP/IP, и не претендует на полноту.
Инструментарий и метод исследования
Для исследования операционной системы будем использовать следующие инструменты:
Операционная система Linux:
Visual Studio Code;
Операционная система Windows:
Инструменты подобраны таким образом, чтобы можно было охватить максимальное количество форматов файлов, которые можно обнаружить в ОС. Для исходного же кода главный инструмент — редактор, который позволяет удобно переходить от исходника к исходнику для разбора кода.
В нашем исследовании будем руководствоваться двумя правилами:
Используем всю информацию из документации операционных систем;
Проверяем правдивость описанных данных. Для структур данных:
В ОС Windows исследуем соответствующие функционалу dll, sys файлы;
В ОС Linux исследуем исходные коды и отдельные ветки ядра;
Теперь определимся с проблемами, которые вероятно будут нас преследовать на протяжении всего исследования.
Проблемы при исследовании ОС Linux
Основной функционал подсистемы целиком находится в ядре. К счастью, исходный код доступен в сети. Исследование исходного кода таких больших проектов всегда довольно сложная задача. На её сложность может влиять несколько факторов:
у каждого исследователя разный уровень экспертизы в области языка программирования, который используется в исходном коде;
у каждого исследователя есть свой собственных подход на интерпретацию полученной информации.
ограниченности исследования по времени;
объем исходного кода;
принятые правила кодирования проекта.
Как минимизировать количество действий исследователя, чтобы получить как можно больше полезной и интересной информации? Огромную роль играет правильно настроенное рабочее место. В нашем случае верную настройку определяет набор инструментов, который мы описали в разделе «Инструментарий и метод исследования». Также можно применить небольшой лайфхак и не рассматривать каждую строку исходников ядра, а рассматривать только высокоуровневые элементы. Это сэкономит время на изучение языка программирования и даст возможность разобраться, что к чему. Попробуем применить эту тактику на практике.
Сетевая подсистема Linux
Начнем наше исследование с вот такой интересной картинки:
Картинка представляет собой структуру директорий исходного кода ядра ОС Linux. На ней видно, что сетевая подсистема вовсе не самая большая часть операционной системы. По правде говоря, можно собрать ядро и без этой части. Сегодня это вариант только для embeded систем, в общем случае без сети представить Linux сложно.
Код, который относится к сетевой подсистеме, находится в директории «net». Посмотрим, из чего он состоит.
Исходный код собран по выполняемым задачам. За базовыми элементами можно обратиться в директорию core:
На картинке выделены названия файлов, которые описывают основные структуры для работы с сетью. Это создание сокетов, хранение пересылаемых данных и работа с фильтрующей подсистемой bfp . Именно этот код переиспользуется для остальной части сетевой подсистемы.
Оставшиеся файлы в директории «net» описывают работу ядра с различными протоколами. Интересным моментом здесь является то, что фильтрующая подсистема имеет какие-то файлы только в некоторых протоколах и подсистемах:
Прямоугольниками выделены те протоколы и подсистемы, которые содержат файлы netfilter . Как видно из картинки, механизм фильтрации трафика работает не со всеми протоколами. Также интересно то, что он присутствует не только в протоколах, но и в более высокоуровневой абстракции — bridge. Теперь понятно, почему bridge от Linux можно настроить настолько гибко и контролировать пересылаемые данные.
Что в итоге? Всего по 4м картинкам структуры исходных кодов ядра мы уже обладаем информацией о том, какие поддерживаются протоколы в ядре Linux, какие механизмы интегрированы в протоколы для контроля и фильтрации и где найти базовые элементы, которые позволяют использовать сеть. Попробуем найти эту информацию и в ОС Windows.
ОС Windows: сетевая подсистема
Изучить сетевую подсистему этой ОС так же просто, как в ОС Linux, не получится. Самый большой камень преткновения — закрытый исходный код. Однако давайте попытаемся восстановить информацию о том, как работает сетевая подсистема в рамках этой ОС. В качестве целей будем использовать то, что нашли в Linux:
Где располагается код для создания и работы с сокетами;
Какой механизм используется для фильтрации;
Как имплементированы протоколы.
Сетевая подсистема, согласно документации построена по принципу модели OSI. И также приводится описание того, за счет каких технологий и типов файлов реализуется работа отдельных уровней модели.
Имплементация модели OSI в операционной системе начинается со строго определенных уровней. В данном случае всё начинается на уровне «Канальном» и заканчивается на уровне «Транспортном». Имплементация на каждом уровне своя:
Канальный уровень — состоит из MAC и LLC, соответственно и частей имплементации должно быть две:
MAC — miniportdriver это драйвер, который контролирует сетевой интерфейс;
LLC — protocol driver — драйвер, который используется для обработки данных от сетевых устройств;
Уровень сети — protocol driver — драйвер, который используется для обработки данных от сетевых устройств;
Уровень транспорта — protocol (transport) driver;
Вот и выявилось коренное отличие Windows от Linux — вся логика работы сетевой подсистемы разбита на множество элементов. Каждое устройство, каждый протокол и абстракция имплементированы не в ядре, а в модуле ядра — драйвере, который может быть загружен ядром по запросу. Что это значит для нас? У нас нет исходного кода данных драйверов, а значит мы не можем использовать подход, который использовали при изучении ОС Linux.
Как же быть? При разработке эксплойтов исследователи в качестве отправной точки для восстановления структур внутри ядра Windows используют проект с открытым исходным кодом — ReactOS. Попробуем сделать тоже самое. Давайте найдем части подсистемы и затем спроецируем найденную информацию на реальную ОС Windows.
На экране ниже приведен снимок директории с основными драйверами для сетевой подсистемы:
Попробуем найти такие же файлы в реальной ОС. Заглянем в директорию «%Windows%». В качестве исследуемой системы возьмем Windows 7.
Часть файлов действительно имеет названия файлов, которые присутствуют в реальной ОС.
Один из способов проверки функционала уже скомпилированного приложения — прочитать используемые им строки. Можем для этого воспользоваться утилитой strings.exe для tcpip.sys :
Похоже, что данные по работе с сетевой подсистемой можно обнаружить именно в этом драйвере. Поищем функции, которые позволяют фильтровать трафик. Как их идентифицировать?
В операционной системе Windows за всё время её существования было 2 технических спецификаций на основании которых создавались драйвера для сетевого взаимодействия: TDI и WinSock. И все эти спецификации использовали отдельный драйвер для того чтобы можно было собирать весь функционал — NDIS. Значит большая часть функций сконцентрирована в этих драйверах:
Но в них все равно нет функций, которые бы могли фильтровать трафик. Почему так? Дело в том, что до Windows 7 фильтрация трафика как такового была имплементирована в отдельных драйверах, которые настраивались за счет интерфейса Windows. Начиная с Windows 7 была реализована так называемая Windows Filtering Platform, которая определила часть драйверов в специальную категорию, которая и призвана фильтровать трафик.
Часть этих фильтров можно найти по обычному поиску в директориях ОС:
Используем утилиту strings.exe на файлы FWPKCLNT.SYS и wfplwf.sys :
Выше представлена часть строк, которые обнаружились в файле FWPKCLNT.sys , файл wfplwf.sys содержал только названия функций. Почему тогда они здесь вместе? Дело в том, что в импортах wfplwf.sys есть функция, которая берется из файла FWPKCLNT.sy s:
Имплементация всех объектов и механизмов в ядре для работы с протоколами — файлы из директории %Windows%\System32\Drivers . Основные из них — netio.sys, ndis.sys, tdi.sys.
Фильтрацией занимаются драйвера WFP: FWPKCLNT.sys , wfplwf.sys .
Имплементируются через отдельные одноименные файлы, например: tcpip.sys
В ОС Linux мы не задумывались о том как приложения получают доступ к структурам ядра и работают с сетью. Там более-менее всё очевидно и только один шаг до функций, но для Windows всё работает по принципу Callback`ов. Поэтому скорее всего будет несколько оберток для взаимодействия. Попробуем найти эти файлы.
Для поиска файлов, которые используются в качестве обертки-библиотеки, можно использовать следующий метод. Для этого создадим мини приложение, которое будет работать с сокетами, принимать и отправлять данные. Исходный код приложения:
Запускаем файл в ОС, если не возникло никаких ошибок, то необходимо параллельно запустить инструмент Process Explorer. С помощью этого инструмента мы подсмотрим, чем занимается поток, пока ждет соединения. На картинке ниже отображены все описанные действия:
Слева изображен стек вызовов функций, которые задействованы в процедуре настройки сокета и перевода его в состояние bind. Этот набор файлов — mswinsock.dll (Win Sock 2 Service) и WS2_32.dll (Windows Socket 2). Данные библиотеки используются для того, чтобы предоставить приложениям функции по работе с сокетами в ОС Windows.
Стоит отметить, что последовательность функций, которые вызываются для работы сокета в ОС, не виден в Process Explorer`е. Если нужно восстановить и эти данные, то нужно использовать отладчик ядра.
Таким образом, проводить исследование подсистем любых ОС и их механизмов можно с исходным кодом и без — достаточно выбрать необходимый набор инструментов, а также доступные методы, источники знаний.
Источник
Структура сетевой операционной системы linux
Linux произносится как ‘Линукс, с ударением на первом слоге.
Linux — это современная POSIX-совместимая и Unix-подобная операционная система для персональных компьютеров и рабочих станций.
Это многопользовательская сетевая операционная система с сетевой оконной графической системой X Window System. ОС Linux поддерживает стандарты открытых систем и протоколы сети Internet и совместима с системами Unix, DOS, MS Windows. Все компоненты системы, включая исходные тексты, распространяются с лицензией на свободное копирование и установку для неограниченного числа пользователей.
Разработка ОС Linux выполнена Линусом Торвалдсом (Linus Torvalds) из университета Хельсинки и не поддающейся подсчету обширной командой из тысяч пользователей сети Internet, сотрудников исследовательских центpов, фондов, унивеpситетов и т.д.
Возможности, которые предоставляет ОС Linux .
- дает возможность бесплатно и легально иметь современную ОС для использования как на работе, так и дома;
- обладает высоким быстродействием;
- работает надежно, устойчиво, совершенно без зависаний;
- не подвержена вирусам;
- позволяет использовать полностью возможности современных ПК, снимая ограничения, присущие DOS и MS Windows по использованию памяти машины и ресурсов процессора(ов);
- эффективно управляет многозадачностью и приоритетами, фоновые задачи (длительный расчет, передача электронной почты по модему, форматирование дискеты и т.д. и т.п.) не мешают интерактивной работе;
- позволяет легко интегрировать компьютер в локальные и глобальные сети, в т.ч. в Internet; работает с сетями на базе Novell и MS Windows;
- позволяет выполнять представленные в формате загрузки прикладные программы других ОС — различных версий Unix, DOS и MS Windows;
- обеспечивает использование огромного числа разнообразных программных пакетов, накопленных в мире Unix и свободно распространяемых вместе с исходными текстами;
- предоставляет богатый набор инструментальных средств для разработки прикладных программ любой степени сложности, включая системы класса клиент-сервер, объектно-ориентированные, с многооконным текстовым и/или графическим интерфейсом, пригодных для работы как в Linux, так и в других ОС;
- дает пользователю и особенно разработчику замечательную учебную базу в виде богатой документации и исходных текстов всех компонент, включая ядро самой ОС;
- дает всем желающим попробовать свои силы в разработке, организовать общение и совместную работу через Internet с любыми из разработчиков ОС Linux и сделать свой вклад, став соавтором системы.
Кому и зачем может понадобиться ОС Linux .
В применении Linux по разным причинам могут быть заинтересованы многие категории пользователей. Привести исчерпывающий список невозможно. Однако, вот ряд примеров.
Linux это полноценная 32-х разрядная (64-х разрядная на платформе DEC AXP) операционная система, которая использует компьютер на полную мощность. Linux превращает персональный компьютер IBM PC в настоящую рабочую станцию. По цене персоналки, которая значительно ниже стоимости рабочей станции.
Выигрыш в цене очень большой, так как помимо экономии на оборудовании, программное обеспечение в Linux поставляется со свободной лицензией, разрешающей бесплатное неограниченное копирование системы. Ядро, редакторы, трансляторы, СУБД, сеть, графические интерфейсы, игры и масса другого программного обеспечения объемом в тысячи мегабайт — бесплатно и на законной основе.
Выигрыш только на программном обеспечении может составить от тысяч до десятков тысяч долларов. Для многих пользователей в России свободная лицензия — это единственная возможность легально снабдить себя полноценным набором программного обеспечения.
Для пиратского рынка не платить за программы — обычное дело. Однако в случае с Linux мало того, что за это никто преследовать не будет, еще и полную документацию дадут! Более того, с исходными текстами всех программ! Пиратам такое и не снилось.
Большой интерес Linux представляет для потребителей и разработчиков прикладных систем. Представьте себе фирму, состоящую из нескольких филиалов, территориально разнесенных по разным районам города и даже по разным городам и странам. На головном предприятии работает сервер базы данных, клиенты — рабочие места в филиалах — через сеть взаимодействуют с сервером. Такая система быстро, дешево и удобно делается в Linux. Вспомните об устойчивости Linux. Вот где она сильно пригодится!
Допустим, вы разработчик коммерческих программ для коммерческих ОС, например, SCO Unix, Solaris или DOS. Вы используете многоплатформенный компилятор, мощную многооконную систему отладки, эмуляторы и системы совместимости. Все это есть в Linux . Можете поставить его на свою домашнюю персоналку и, если у вас есть модем, ходить на работу только за зарплатой. Кстати, и здесь устойчивость не помешает. Представьте, что вы открыли пару десятков окон, много что в них наработали, а система зависла. В Linux такого не бывает.
А если вы научный работник и пишете статьи в международные журналы? К вашим услугам в Linux издательская система TeX, в формате которой принимаются статьи в эти журналы. Статью можете отправить по электронной почте прямо со своей Linux-машины. Пока вы писали статью, машина делала длительный сложный расчет и вам это совершенно не мешало. И массивы в вашей программе вовсе не ограничены пределом в 640 KB. Хотите массив в 50 мегабайт? Пожалуйста, даже если у вас только 8 MB RAM, так как в Linux работает виртуальная память. Как вы думаете, приятно ли столкнуться с зависанием ОС, когда до окончания трехчасового расчета осталось три минуты? В Linux это вам не грозит.
Может, вам нужно синтезировать рекламную картинку профессионального качества? Пока система рендеринга будет это делать, можете поиграть в DOOM. Или отлаживать описание другой картинки. Рендеринг сложной картинки идет часами. Устойчивость ОС и тут не помешает.
Здесь не зря такой упор сделан на устойчивость ОС. Пользователь, практика которого ограничена системами DOS и особенно MS Windows, привык, что зависание — неотъемлемое свойство ОС. Дело обстоит как раз с точностью до наоборот.
Linux распахивает дверь в гигантский мир открытых систем, в котором существует огромное количество средств для решения самых разнообразных задач.
Xарактерные особенности Linux как ОС.
- многозадачность: много программ выполняются одновременно;
- многопользовательский режим: много пользователей одновременно работают на одной и той же машине;
- защищенный режим процессора (386 protected mode);
- защита памяти процесса; сбой программы не может вызвать зависания системы;
- экономная загрузка: Linux считывает с диска только те части программы, которые действительно используются для выполнения;
- разделение страниц по записи между экземплярами выполняемой программы. Это значит, что процессы-экземпляры программы могут использовать при выполнении одну и ту же память. Когда такой процесс пытается произвести запись в память, то 4-x килобайтная страница, в которую идет запись, копируется на свободное место. Это свойство увеличивает быстродействие и экономит память;
- виртуальная память со страничной организацией (т.е. на диск из памяти вытесняется не весь неактивный процесс, а только требуемая страница); виртуальная память в самостоятельных разделах диска и/или файлах файловой системы; объем виртуальной памяти до 2 Гбайт; изменение размера виртуальной памяти во время выполнения программ;
- общая память программ и дискового кэша: вся свободная память используется для буферизации обмена с диском;
- динамические загружаемые разделяемые библиотеки;
- дамп программы для пост-мортем анализа: позволяет анализировать отладчиком не только выполняющуюся, но и завершившуюся аварийно программу;
- сертификация по стандарту POSIX.1, совместимость со стандартами System V и BSD на уровне исходных текстов;
- через iBCS2-согласованный эмулятор совместимость с SCO, SVR3, SVR4 по загружаемым программам,
- наличие исходного текста всех программ, включая тексты ядра, драйверов, средств разработки и приложений. Эти тексты свободно распространяются. В настоящее время некоторыми фирмами для Linux поставляется ряд коммерческих программ без исходных текстов, но все, что было свободным так и остается свободным;
- управление заданиями в стандарте POSIX;
- эмуляция сопроцессора в ядре, поэтому приложение может не заботиться об эмуляции сопроцессора. Конечно, если сопроцессор в наличии, то он и используется;
- поддержка национальных алфавитов и соглашений, в т.ч. для русского языка; возможность добавлять новые;
- множественные виртуальные консоли: на одном дисплее несколько одновременных независимых сеансов работы, переключаемых с клавиатуры;
- поддержка ряда распространенных файловых систем (MINIX, Xenix, файловые системы System V); наличие собственной передовой файловой системы объемом до 4 Терабайт и с именами файлов до 255 знаков;
- прозрачный доступ к разделам DOS (или OS/2 FAT): раздел DOS выглядит как часть файловой системы Linux; поддержка VFAT (WNT, Windows 95);
- специальная файловая система UMSDOS, которая позволяет устанавливать Linux в файловую систему DOS;
- доступ (только чтение) к файловой системе HPFS-2 OS/2 2.1;
- поддержка всех стандартных форматов CD ROM;
- поддержка сети TCP/IP, включая ftp, telnet, NFS и т.д.
Источник