Книга, которую вы держите в руках, — результат коллективной работы. Авторы лишь обобщили опыт и знания множества людей, превратив в систематизированный материал. Это итог совместных усилий специалистов, чьи разработки были проверены временем и используются сейчас повсеместно.
Нам повезло, что в написании книги приняли участие некоторые из непосредственных разработчиков сетевых стеков и операционных систем, поделившись с нами своими знаниями и позволив сохранить их опыт. Другие эксперты, причастные к созданию книги, — это те, кто постоянно использует в своей работе реализованные первыми инженерные решения: разработчики сетевых приложений и специалисты, которые напрямую занимаются эксплуатацией приложений и систем, а также предоставляют для них сетевую инфраструктуру.
Мы надеемся, что такой подход позволил нам описать рассматриваемую область более широко и дал возможность разным группам читателей извлечь что-то полезное для себя.
Артем Нечипорук окончил Московский государственный университет экономики, статистики и информатики по специальности «Прикладная информатика в экономике».
Разработчик и архитектор программного обеспечения с более чем десятилетним опытом работы на Python и C++. Автор курса по сетевому программированию на C++.
Начал карьеру в качестве инженера микропроцессорных устройств железнодорожной автоматики и телемеханики, где помимо основной работы внедрял средства удаленного контроля управляющих систем и прочих систем железнодорожной автоматики.
Работал в компании «Тензор» над C++ ядром SaaS системы СБИС, используемой для онлайн-сдачи бухгалтерской отчетности по всей России.
С 2015 года работает в компаниях, связанных с информационной безопасностью. Занимался разработкой программно-аппаратных комплексов защищенной связи.
В настоящее время — архитектор программного обеспечения в отделе перспективных исследований «Лаборатории Касперского». Один из его проектов — «Kaspersky Neuromorphic Platform», платформа с открытым кодом для выполнения импульсных нейронных сетей.
Алексей Баринов — разработчик, свыше 25 лет проработавший в ИТ, более половины из них в области сетевой безопасности.
Начинал карьеру программистом контроллеров навигационных систем.
Затем в компании ООО «Газпромэнергодиагностика» проделал длинный путь от ведущего инженера до начальника отдела разработки ПО в области автоматизированного контроля газотранспортных объектов.
Далее был руководителем отдела системного ПО в сфере разработки устройств для цифрового телевидения в компании ЗАО «Рикор ИМТ».
С 2016 года работает в компаниях, занятых информационной безопасностью. Занимался разработкой программно-аппаратных комплексов защищенных сетевых решений.
В настоящее время — разработчик-аналитик в компании RDP.RU, специализирующейся на создании решений для защиты сетевого трафика.
Книга не появилась бы на свет без экспертизы множества людей, причем многие из них являются непосредственными разработчиками инструментов, описанных в книге.
Алексей Кузнецов в конце 1990-х и начале 2000-х годов являлся одним из ключевых разработчиков ядра Linux, занимая позицию мейнтейнера сетевой подсистемы с 2000 по 2003 год. За этот период Алексей существенно усовершенствовал сетевой стек Linux, адаптировав его для многоядерных систем, улучшив поддержку IPv6 и внедрив средства управления трафиком.
В дополнение к этому он переработал поддержку протокола TCP, что привело к созданию нового TCP-стека, который был представлен в версии ядра Linux 2.2 и до сих пор широко востребован. Среди разработанных Алексеем инструментов наиболее известны утилиты из набора iputils: ping, tracepath, tftpd, rarpd и утилиты для управления трафиком iproute2: ip, tc, ss.
Стивен Хеммингер (Stephen Hemminger) начал работать над TCP/IP и сетевыми драйверами для Unix с Tektronix, Sequent и nCube, а затем унаследовал разработку сети в Linux от Алексея Кузнецова. Более 20 лет в Linux Foundation он занимался ядром Linux, iproute2 и мостами. Оттуда он перешел в Vyatta, где работал главным инженером проекта программного маршрутизатора на базе Linux. Затем, чтобы внести свой вклад в сетевые драйверы Linux для Azure, он перешел на позицию архитектора в Microsoft.
В настоящее время он совместно с Дэвидом Ахерном занимается сопровождением iproute2.
Петр Савельев — автор пакета PyRoute2 и специалист по сокетам Netlink. Обладает более чем 20-летним опытом в индустрии телекома. Во время работы в Ericsson принимал участие в разработке сетевой подсистемы OpenStack, затем работал с сетями в Amazon Global Payments. На данный момент занимается решениями и аудитом сетевой безопасности в Kubernetes.
Владимир Строгов — эксперт по ядру Windows. Имеет свыше 30 лет опыта разработки на уровне ядра в области хранения данных и безопасности. Занимался файловыми системами, виртуализацией, защитой данных и антивирусной защитой, обратным инжинирингом.
Почти 10 лет Владимир работал над проектами Veritas и Symantec. Затем трудился в «Лаборатории Касперского», в группе Core Drivers, на позициях технического эксперта и руководителя группы. Сейчас Владимир является директором по развитию команды ядра в международной компании.
Никита Соболев — core-разработчик языка Python и его основного интерпретатора — CPython. На постоянной основе занимается разработкой различных open-source-технологий. Проводил ревью кода Python в книге.
Сергей Талантов — старший архитектор программного обеспечения в группе разработки шлюзов для интернета вещей на базе ОС ЛК. Проводил ревью кода C++. Контрибьютор в браузер Chromium.
Александр Певзнер — эксперт в области технологий сети, протоколов и сетевого оборудования. Проводил консультации по топологии сетей, работе сетевого оборудования, сетевым протоколам и их применению в современной практике. Старший системный инженер группы по управлению телекоммуникациями в «Лаборатории Касперского». Имеет большой опыт работы с сетями и автоматизацией управления сетевой инфраструктурой.
Кирилл Круглов — эксперт в области антивирусных технологий и анализа сложных угроз, ведущий разработчик-исследователь в отделе исследования угроз критической инфраструктуре. С 2014 года занимается исследованием угроз, направленных на автоматизированные системы управления и технологические сети.
Перечисленные ниже консультанты оказывали помощь в решении некоторых технических вопросов, относящихся к узким областям и конкретным продуктам.
Руслан Морозов — руководитель отдела разработки решений для рабочих станций и мобильных устройств на базе ОС ЛК. Руслан обладает экспертизой во многих областях, рассмотренных в книге, в особенности в области отладки, безопасности и ядра Linux, а также в сложных вопросах, которые выходят за рамки первой книги.
Александр Гетьман — кандидат физико-математических наук. Занимается направлением анализа сетевого трафика в Институте системного программирования РАН. Александр консультировал авторов по сложным вопросам: например, проксирование, VPN и др. В книге использованы материалы некоторых его статей.
Андрей Федотов — кандидат технических наук, ранее старший научный сотрудник ИСП РАН, работает в компании Яндекс. Андрей предоставил консультации по работе систем статического анализа Svace и системы фаззинг-тестирования Sydr, членом команды разработки которых он являлся.
Святослав Размыслов — продуктовый менеджер PVS-Studio LLC. Он поделился знаниями о работе и возможностях статического анализатора кода PVS-Studio и помог составить описание анализатора PVS-Studio.
Над книгой также трудились специалисты, которые вычитывали, проверяли и дополняли текст, искали ошибки и неточности в главах, предлагали свои замечания. Они помогли исправить большое количество недочетов и ошибок и заполнить серьезные пробелы в знаниях авторов. Книга не смогла бы состояться без усилий, приложенных этими людьми.
Сергей Талантов проверил и исправил код примеров на C++ — его коммиты доступны в репозитории книги.
Никита Соболев проверил и скорректировал весь Python-код из книги.
Андрей Маркобородов — старший разработчик «Лаборатории Касперского» в группе разработки решений для защиты сетей. Вычитал текст, диаграммы и код глав 3–12, 23, 24 и внес свои конструктивные замечания.
Владислав Егоров — специалист по направлению анализа сетевого трафика в ИСП РАН. Выполнил ревью глав 23 и 24.
Максим Дмитриченко — системный программист с более чем 20-летним опытом разработки. Пишет на C, C++ и Rust. Занимается разработкой встраиваемых систем, ЦОС, высокоскоростных систем анализа информации и принятия решений, обратной инженерией сетевых протоколов. Выполнил ревью глав 20–22, внес замечания по работе прокси. Провел ревью диаграммы сетевого стека Linux в главе 3, а также исследование по главе 6, выяснив, как избежать гонки при обработке сигнала.
Петр Савельев провел вычитку и исправления глав 11 и 12 по теме Netlink.
Александр Певзнер проверил все описания работы протоколов и особенности работы сети в главах 1–6 и 10–24.
Александр Гетьман провел ревью глав 21–23.
Владимир Строгов проверил диаграммы функционирования сетевого стека Windows в главе 3 и проверил главы 14–20 по ОС Windows.
Алексей Кузнецов проверил главу 8, по теме опций управления сокетами.
Руслан Морозов провел ревью глав 7–12.
Андрей Грес — инженер-разработчик встраиваемых систем на основе Linux, занимается конструированием и разработкой программного обеспечения для автомобильных систем экстренного реагирования при авариях и ДТП. Выполнил ревью всех глав, помог с написанием книги, доработал глоссарий, а также оказал помощь с проверкой кода примеров и исправлением примера с OOB.
Александр Цыганкин — технический руководитель кластера «Кибербезопасность» в компании MTS Digital, занимается созданием решений в сфере кибербезопасности и защиты инфраструктуры с использованием искусственного интеллекта. Провел ревью глав с 1-й по 4-ю. Исправил некоторые серьезные ошибки, в том числе в коде и терминологии.
Генрих Селеня — аспирант ОИПИ. Генрих пишет серверы на C++. Провел ревью глав 7 и 8.
Владимир Протасов — технический менеджер компании Яндекс. Провел ревью введения, а также глав 1 и 2.
Павел Балаев — старший разработчик Tarantool, ранее исследователь в отделе технологических исследований компании «Инфотекс». Провел ревью глав 1 и 2.
Автор всех иллюстраций в книге — Ксения Баринова.
История Udev была написана с помощью участников русского сообщества Debian:
Алексей Петров — к.ф.-м. н., ФТИ им. Иоффе РАН.
Максим Дмитриченко — системный программист.
Илья Казакевич — участник русского сообщества Debian.