Йон Снейдер, "Эффективное программирование TCP/IP"
При изучении любого явления пытливому человеку недостаточно только теоретических сведений, ему непременно хочется "потрогать все руками", чтобы убедиться, что он правильно понял словесные описания, а автор ничего не исказил. Применительно к коммуникационным протоколам практический опыт такого рода дает работа с анализаторами протоколов по изучению взаимодействия клиентских и серверных частей реальных приложений, конфигурирование сетевых устройств и программных модулей операционных систем, а также само программирование сетевых приложений. Для выполнения всех этих работ нужно хорошо знать логику и форматы сообщений коммуникационных протоколов, а также прикладной программный интерфейс (Application Programming Interface, API) к ним.
На первый взгляд может показаться, что детальная информация о протоколе, не говоря уже о API, нужна только прикладным и системным сетевым программистам, но это не так - такие знания полезны и многим другим категориям сетевых специалистов. Например, для оптимизации транспортной инфраструктуры своей сети администратор должен весьма детально представлять функционирование установленных в ней протоколов. Какие параметры протоколов могут быть заданы в приложении, а какие являются строго фиксированными? Какие встроенные стандартные средства могут быть использованы прикладным программистом для повышения скорости работы данного приложения, а какие нет, поскольку они отрицательно сказываются на общей производительности сети? На подобные вопросы можно ответить, познакомившись с известными приемами использования различных особенностей коммуникационных протоколов в типичных сетевых программах, а для понимания самих программ текста знание API просто необходимо. Изучение же зафиксированных анализатором протоколов коммуникационных сеансов становится гораздо эффективней при сопоставлении собранных пакетов с текстом программ, их породившим. Иногда от сетевого инженера (не программиста) может потребоваться даже умение написать простейшую тестовую программу, например для исследования производительности сети.
Поэтому книга Й. Снейдера "Эффективное программирование TCP/IP", посвященная вопросам разработки приложений для сетей IP и адресованная в первую очередь программистам, полезна также всем сетевым специалистам, желающим получить как можно более полные сведения о процессах, протекающих при взаимодействии узлов сети. Сразу отметим, что данную книгу нельзя назвать исчерпывающим руководством по программированию, более того, вы не найдете в ней даже сколько-нибудь полного описания API стека TCP/IP: нет в ней и систематического описания собственно протоколов, а также особенностей их реализаций. Автор ставил перед собой более узкую задачу - дать начинающим программистам набор базовых рекомендаций по разработке эффективных сетевых приложений. В книге изложены подтвержденные практикой рекомендации, технические приемы и эвристические правила программирования, представленные в форме советов. Например, о порядке назначения номера порта серверу, о важности аккуратного размыкания соединения TCP, о создании и применении программ для анализа сообщений ICMP. Все примеры приводятся для сокетов API, они применимы как для платформы UNIX, так и Windows (в необходимых случаях автор делает соответствующие оговорки, касающиеся особенностей работы в среде Windows).
Компактность и обозримость этих рекомендаций и советов делают книгу полезной для тех, кто не занимается программированием профессионально, так как позволяют уяснить определенные особенности поведения протокола без необходимости изучения больших фрагментов программ. В то же время такая манера изложения лишает текст логической последовательности, а если учесть, что индексный указатель содержит совсем немного ссылок, поиск нужного материала в книге довольно непрост. Но все эти сложности компенсируются множеством интересных подробностей и мало известных деталей функционирования стека протоколов - в дополнение, естественно, к описаниям стандартных ситуаций при взаимодействии узлов. Особенно много внимания уделено протоколу TCP, поскольку он оказывает значительное влияние на общую производительность сети за счет таких механизмов, как "скользящее окно", "медленный старт", алгоритм Нейгла и ряда других.
В целом книга Й. Снейдера - полезное дополнение к считающимся бестселлерами трехтомникам Р. Стивенса "TCP/IP Illustrated", Д. Комера "Internetworking with TCP/IP" и двухтомному руководству Р. Стивенса по сетевому программированию "UNIX Network Programming".
Книгу Снейдера Й. "Эффективное программирование TCP/IP" (СПб.: Питер, 2001) можно приобрести в книжных магазинах. Ориентировочная цена - 120 руб.