РЕЦЕНЗИИ
Снейдер Йон. Эффективное программирование TCP/IP. Библиотека программиста. СПб.: Издательский дом “Питер”, 2002. - 320 с.
Создание несложного сетевого приложения типа клиент-сервер может показаться необычайно простым делом даже для новичка, особенно при использовании шаблонов. Однако если программист недостаточно овладел тонкостями протоколов, входящих в состав стека TCP/IP, то после первоначального успеха обязательно последуют неудачи: созданное на скорую руку сетевое приложение будет вести себя непредсказуемо и весьма загадочно, быстродействие оставит желать много лучшего, да и соединение окажется неустойчивым. Успешному преодолению таких трудностей способствует выпущенная издательством “Питер” (www.piter.com) книга Йона Снейдера.
Стиль изложения книги нетрадиционен: материал представлен в виде “советов”, по существу являющихся параграфами главы. Оценить такую подачу знаний смогут прежде всего практики, стремящиеся по ходу дела получить надлежащую рекомендацию и таким образом быстро разобраться в непростых проблемах, на первый взгляд имеющих иногда лишь косвенное отношение к TCP/IP. Основной упор автор делает не на формальное изложение сложного материала, а на разъяснение существа той или иной интересной, с его точки зрения, проблемы, указывает на ошибки, часто допускаемые в сетевом программировании даже опытными профессионалами.
Книга включает четыре главы, два приложения и предметный указатель. Ценным дополнением к ним можно считать приводимый в конце издания довольно внушительный (на четырех страницах) список литературы, на который автор ссылается при рассмотрении того или иного вопроса.
В первой главе, представляющей собой введение, описаны некоторые термины и элементы API-сокетов, дан пример архитектуры клиент-сервер.
Вторая глава посвящена основам TCP/IP. В ней обсуждаются различия между протоколами, как требующими логического соединения, так и не нуждающимися в таковом. Читатель узнает об IP-адресации, подсетях, преобразовании сетевых адресов (NAT - Network Address Translation). Йон Снейдер показывает на примерах, что на самом деле потоковый протокол TCP не гарантирует доставку пересылаемых по сети данных, и при разработке программы нужно предусмотреть защиту от ввода некорректных данных или непрогнозируемого поведения приложения на другом конце соединения. То, что потерю связи TCP автоматически не устанавливает, автор расценивает как положительное свойство этого протокола и разъясняет, как в этом случае следует строить сетевое приложение. В частности, он показывает, что одна и та же сетевая программа может вести себя в глобальной и локальной сети по-разному. Читатель поймет, почему лучше применять в сетевых программах API-сокеты, а не API на основе TLI (Transport Layer Interface - интерфейс транспортного уровня) или XTI (X/Open Transport Interface - транспортный протокол). В этой же главе можно найти шаблоны для нескольких типов приложений TCP/IP и библиотеку функций, которые в дальнейшем используются в книге.
В третьей главе исследуются тонкости сетевого программирования. На первый взгляд они кажутся тривиальными, однако г-н Снейдер показывает, что это далеко не так, поскольку в протоколе TCP имеется непростой набор правил, устанавливающих, можно ли передавать данные немедленно и если есть разрешение на передачу, то как определяется объем информации. Он рекомендует обязательно усвоить эти правила, с тем чтобы разрабатываемое сетевое приложение было устойчивым, и рассматривает способы быстрого создания эффективных сетевых утилит.
В четвертой главе речь идет об инструментальных средствах, которыми должен пользоваться каждый сетевой программист: ping, sniffer, ttcp, lsof, netstat, ktrace и truss, и приводится пример создания утилиты для перехвата и отображения датаграмм протокола контроля сообщения в сети Интернет ICMP .
Книгой Йона Снейдера может воспользоваться как профессионал, так и программист, только начинающий осваивать сетевые программы, - и тот и другой найдут в ней много интересного и полезного.