Книга: Сетевое программирование. От основ до приложений
Назад: Создатели книги
Дальше: Глава 1. Сетевое взаимодействие, сокеты, порядок байтов

Предисловие

С каждым днем мир становится все более глобальным, объединяя людей, отрасли и страны. Этому процессу в том числе способствует развитие технологий связи и обмена данными. Благодаря им стало возможным построить глобальную сеть интернет, позволяющую быстро получать доступ к любой информации, о чем раньше можно было только мечтать.

Новые требования к связи порождают необходимость создания эффективных сетевых решений. И навык сетевого программирования становится одним из ключевых для IT-специалистов.

Данной теме посвящено множество книг, но основное внимание в них уделяется либо сокетам в C, либо специфическим библиотекам для разных языков.

Новички, желающие создавать сетевые приложения, думают, что это легко, — достаточно использовать сокеты: открыл соединение, передал данные, закрыл.

Литература, описывающая процесс работы с конкретными библиотеками, устаревает из-за развития технологий, а также не дает понимания основ и не закладывает базу, на которой строятся такие решения.

Потому реальность разработки значительно отличается от наивных представлений: конечно, сокеты являются фундаментом для создания специализированных решений, но чаще всего профессиональные разработчики обращаются к различным готовым продуктам, таким как сетевые фреймворки и библиотеки, а также выбирают подходящие языки программирования. При этом сохраняются неизбежные сложности, порождаемые сетью и комплексом параллельно взаимодействующих процессов. Для понимания этих проблем и эффективного решения связанных задач требуется знание теории.

Эта книга стремится соединить теорию с практикой. Она служит инструментом для изучения сетевого программирования на уровне, достаточном для среднего разработчика в IT-компании.

Поскольку объем материала очень большой, мы разбили его на три книги. Первая книга — «Cетевое программирование. От основ до приложений», ее вы сейчас читаете. Книги «Сетевое программирование. Практика разработки при­ложений» (книга 2) и «Сетевое программирование. Безопасность и масштабируемые си­стемы» (книга 3) готовятся к выходу в издательстве «Питер». Для удобства ссылки на них будут сделаны в главах.

Основой материала книги послужили лекции, написанные одним из авторов для онлайн-университета и доработанные по запросам студентов.

В дальнейшем материал лекций претерпел значительные изменения, был обновлен, переработан и дополнен, чтобы осветить все важные аспекты. Авторы включили в него теорию и практику, редко описываемые в других источниках. Все практические примеры в книге работающие.

Примеры доступны в Git-репозитории по адресу .

И так как владение знаниями о сокетах критично для осмысления структур, построенных на их основе, первая часть данной книги посвящена использованию сокетного интерфейса.

Там, где это необходимо для понимания и эффективного применения, мы разбираем структуру сетевых протоколов.

В следующих книгах будут рассмотрены темы создания сетевых API и применения разнообразных библиотек, что важно для сетевого программирования.

Часть материала книг показывает, как подобрать инструменты для создания приложений, а также как разобраться в их устройстве.

Главный язык, использованный в книгах, — C++. В качестве второго основного языка выбран Python. Иногда примеры приводятся на других языках.

Мы не стали брать за основу язык C, так как он слишком приближен к низко­уровневым языкам, а мы хотели показать, как использовать API в контексте платформ, на которых обычно реализуются современные приложения.

Рекомендуем ознакомиться с примерами на C++, даже если вы используете Python, — это поможет выявить нюансы, актуальные для обоих языков. После прочтения каждой главы желательно проверить, насколько хорошо усвоен материал, выполнив упражнения и ответив на вопросы, чтобы устранить пробелы в знаниях.

Вы научитесь работать с базовыми и продвинутыми сетевыми функциями для обеспечения коммуникации программ. Освоите решение задач связи и безопасности. Книга охватывает разработку на Python и C++, а также дает представление о сетевых механизмах в других языках.

Книгу проверял Никита Соболев — один из core-разработчиков CPython. Опции IP_RECVERR, IP_RECVTTL и IP_RECVORIGDSTADDR были добавлены в CPython 14 благодаря работе над книгой.

Чтобы успешно освоить материал книги, важно иметь хотя бы базовые знания и представления в области сетевых технологий: понимать назначение протоколов, знать, что такое TCP/IP и DNS, а также иметь навык работы на C++ выше начального уровня.

Кроме того, для полного освоения темы не обойтись без чтения стандартов и RFC, на которые мы старались указывать в тексте.

Если вы уже владеете материалом, содержащимся в каком-либо разделе, можете его пропустить. Например, начальные разделы посвящены сокетам, которые хорошо описаны в других источниках, таких как книга У. Стивенса, Б. Феннера, Э. Рудоффа «UNIX: разработка сетевых приложений», 3-е изд. (изд-во «Питер») или Beej’s Guide to Network Programming. Рекомендуем ознакомиться с этими ресурсами. Если вы без труда отвечаете на вопросы в конце очередной главы, можете двигаться дальше.

Надеемся, что книга станет вашим верным гидом в освоении и совершенствовании сетевых технологий.

Условные обозначения

Так выделяется дополнительная техническая информация:

Тут будет техническая информация.

Места, на которые следует обратить внимание, выглядят так:

Внимание! Обратите внимание.

Текст вывода командной строки выделен серой заливкой:

whatis socket

socket (7) — Linux socket interface

Исходный текст программы или просто код выглядит так:

#include <resolv.h>

 

int dn_comp(const char *exp_dn, unsigned char *comp_dn,

            int length, unsigned char **dnptrs,

            unsigned char **lastdnptr);

От издательства

Книга «Сетевое программирование. От основ до приложений» является первой из трех книг, задуманных авторами. На момент подготовки первой книги в печать следующие две еще пишутся.

Их рабочие названия «Сетевое программирование. Практика разработки приложений» и «Сетевое программирование. Безопасность и масштабируемые системы».

Одна из них посвящена, в частности, вопросам оптимизации, многопоточности, асинхронности; другая описывает сериализацию, безопасность, встраиваемые стеки, многоагентные системы и др. Для простоты и краткости мы будем называть их в дальнейшем «книга 2» и «книга 3».

В книге «Сетевое программирование. От основ до приложений», которую вы сейчас читаете, в конце каждой главы приводятся вопросы и задачи для закрепления изученного материала. Ответы на вопросы вы можете получить, обратившись к авторам: Алексею Баринову по адресу [email protected] или Артему Нечипоруку по адресу [email protected].

Обращаем ваше внимание, что решения задач не приводятся, так как каждую задачу можно решать различными способами, и «эталонного» решения, как правило, не существует.

Материал книги снабжен большим количеством ссылок на интернет-ресурсы, содержащие дополнительную информацию, полезные сведения, официальную документацию и т.п. В электронной версии книги все гиперссылки активны, и вы можете перейти по ним непосредственно из текста. В бумажной версии они обозначены нумерованными сносками и, чтобы не перегружать текст, вынесены в раздел «Список интернет-ресурсов» репозитория книги на GitHub.

Для перехода к репозиторию посетите https://github.com/artiomn/network-programming-book-code/.

 

Ваши замечания, предложения, вопросы отправляйте по адресу (издательство «Питер», компьютерная редакция).

Мы будем рады узнать ваше мнение!

На веб-сайте издательства www.piter.com вы найдете подробную информацию о наших книгах.

Назад: Создатели книги
Дальше: Глава 1. Сетевое взаимодействие, сокеты, порядок байтов