Сети TCP/IP, том 3. Разработка приложений типа клиент/сервер для Linux/POSIX

Дуглас Камер, Дэвид Л. Стивенс

Internetworking with TCP/IP, Vol. 3: Client-Server Programming and Applications, Linux/Posix Sockets Version First Edition
Douglas Comer, David L. Stevens
книга Сети TCP/IP, том 3. Разработка приложений типа клиент/сервер для Linux/POSIX

Где купить книгу

Оглавление
Введение

Обсуждение книг по Unix и Linux в блоге Виктора Штонда

В блоге Виктора Штонда обсуждается новое издание книги Уэнделла Одома «Официальное руководство Cisco по подготовке к сертификационным экзаменам CCENT/CCNA ICND1 640- 822» (3-е издание)

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

592 стр., с ил.; ISBN 5-8459-0296-7, 0-1303-2071-4; формат 70x100/16; твердый переплетгазетная2002, 3 кв.; Вильямс.



Понравилась книга? Порекомендуйте её друзьям и коллегам:







Книги, рекомендуемые вместе с этой книгой:

Раздел каталога:



Оглавление книги "Сети TCP/IP, том 3. Разработка приложений типа клиент/сервер для Linux/POSIX"

Предисловие 24
Глава 1. Введение и краткий обзор 29
Глава 2. Модель взаимодействия типа клиент/сервер и проектирование программного обеспечения 37
Глава 3. Параллельная обработка в программном обеспечении клиента/сервера 51
Глава 4. Прикладной интерфейс к протоколам 65
Глава 5. API-интерфейс сокетов 73
Глава 6. Алгоритмы и задачи проектирования клиентского программного обеспечения 87
Глава 7. Примеры клиентского программного обеспечения 103
Глава 8. Алгоритмы и задачи проектирования серверного программного обеспечения 121
Глава 9. Последовательные серверы без установления логического соединения (UDP) 145
Глава 10. Последовательные серверы с установлением логического соединения (TCP) 153
Глава 11. Параллельные серверы с установлением логического соединения (TCP) 161
Глава 12. Применение потоков для обеспечения параллельной работы (TCP) 169
Глава 13. Однопотоковые параллельные серверы (TCP) 179
Глава 14. Мультипротокольные серверы (TCP, UDP) 187
Глава 15. Мультисервисные серверы (TCP, UDP) 195
Глава 16. Единообразное и эффективное управление параллельной работой сервера 215
Глава 17. Распараллеливание работы клиентских программ 229
Глава 18. Туннелирование на транспортном и прикладном уровнях 241
Глава 19. Шлюзы прикладного уровня 251
Глава 20. Внешнее представление данных (XDR) 271
Глава 21. Принципы дистанционного вызова процедур (RPC) 283
Глава 22. Построение распределенных программ (принципы использования программы rpcgen) 305
Глава 23. Построение распределенных программ (пример использования программы rpcgen) 317
Глава 24. Принципы работы сетевой файловой системы (NFS) 351
Глава 25. Протоколы сетевой файловой системы (протокол NFS и протокол монтирования) 381
Глава 26. TELNET (структура программы) 399
Глава 27. Клиент TELNET (практическая реализация) 433
Глава 28. Потоковая передача аудио- и видеоинформации (принципы организации и проект протокола RTP) 459
Глава 29. Потоковый транспортный протокол передачи аудио- и видеоинформации (пример реализации RTP) 481
Глава 30. Практические рекомендации и методы улучшения функционирования серверов Linux 505
Глава 31. Тупиковые ситуации и исчерпание ресурсов в системах клиент/сервер 523
Приложение 1. Системные вызовы и библиотечные процедуры, применяемые с сокетами 533
Приложение 2. Операции с дескрипторами файлов и сокетов в системе Linux 563
Список литературы 567


Предисловие

Мне выпала особая честь представить сторонникам принципов разработки систем с открытым исходным кодом третий том замечательной серии книг доктора Дугласа Э. Камера - "Сети TCP/IP".

Сама история разработки с открытым исходным кодом и развития протоколов TCP/IP служит превосходным примером того, насколько взаимосвязаны эти два направления. Во-первых, только после появления средств обмена данными по сети сложились предпосылки совместной работы программистов из разных стран мира, а во-вторых, одни из самых первых разработок программного обеспечения с открытым исходным кодом были посвящены именно реализации протоколов TCP/IP. Многие еще помнят начало 80-х годов. Это было задолго до того, как разработки с открытым исходным кодом стали излюбленной темой компьютерной прессы. В те дни лишь немногие исследователи сумели понять, какие проблемы лежат в основе архитектуры и реализации сетей. Дуглас и тогда был в числе лидеров. Он возглавил работы по обширной программе исследований и внес огромный вклад в решение многочисленных проблем.

В начале 90-х годов впервые появились предпосылки широкомасштабного применения сетевых технологий на производстве, но стал ощущаться большой дефицит знаний и опыта. Тем, кому было поручено создать на предприятии вычислительную среду на основе протоколов объединенных сетей, приходилось решать нелегкие задачи. Дуглас взял на себя обязанности по обучению и подготовке специалистов по сетям. Он раскрывал перед ними все тайны профессии и делился своими знаниями, накопленными нелегким трудом.

И вот настал XXI век. На помощь ветеранам пришло новое поколение разработчиков, которые создают распределенные приложения для Internet. Сравнительно недавно были созданы такие замечательные приложения для Internet, как napster, gnutella и infrasearch. Но к сожалению, лишь немногие из современных программистов освоили фундаментальные принципы проектирования сетей. Откровенно говоря, слишком часто те, кому поручены столь важные разработки, не знают даже основ, и это неизбежно приводит к тому, что вновь созданные приложения недостаточно хорошо масштабируются или даже просто не работают.

Именно по этой причине для сообщества пользователей Internet имеет особо важное значение выпуск третьего тома, "Разработка приложений типа клиент/сервер для Linux/POSIX", написанного Дугласом совместно с Дэвидом Л. Стивенсом. По этой замечательной книге можно научиться проектировать и строить приложения типа клиент/сервер и, что важнее всего, оценивать преимущества и недостатки каждого проектного решения.

Я надеюсь, что уважаемый читатель сумеет по достоинству оценить педагогический талант доктора Камера.

 Маршалл Т. Роуз (Marshall T. Rose)

 Теоретик и агент-реализатор

 г. Петалума, шт. Калифорния

 Июнь 2000 года

Пролог

Операционная система Linux становится все более популярной и все чаще применяется как система с поддержкой большого количества серверов. Эта новая версия тома 3, в которой используется система Linux, предназначена для программистов, стремящихся изучить все тонкости создания сетевых приложений. В целом, эта книга отвечает на вопрос: "Как применяются протоколы TCP/IP для обеспечения взаимодействия прикладных программ по объединенной сети?" В ней в основном рассматриваются принципы взаимодействия типа клиент/сервер и приведены алгоритмы работы клиентских и серверных компонентов распределенных программ. Каждый проект проиллюстрирован практическим примером, а также описаны все необходимые методы, включая шлюзы прикладного уровня и туннелирование. Кроме того, в книге рассматривается несколько стандартных прикладных протоколов, на примере которых описаны алгоритмы и методы реализации.

Хотя этот том можно изучать и использовать отдельно, важным дополнением к нему служат два других тома данной серии. В томе 1 можно найти ответ на вопрос: "Что такое объединенная сеть TCP/IP?" Том 2 посвящен изучению темы "Как функционирует программное обеспечение TCP/IP". В нем представлены дополнительные подробности, описано практическое применение кода и даны более подробные сведения по рассматриваемой теме, чем в томе 1. Итак, хотя программист может научиться создавать сетевые приложения только на основе изучения тома 3, два других тома могут обеспечить более глубокое понимание основополагающих технологий.

В этой версии тома 3 описаны новейшие сетевые технологии. Например, в одной главе показано, как использовать в программе Linux средства потоков POSIX для создания параллельного сервера. В главе, посвященной протоколу NFS, описана версия 3, которая, по нашему мнению, должна получить широкое признание среди разработчиков Linux. Кроме того, в эту книгу включены разделы с описанием принципов работы таких программ, как slirp, предоставляющих доступ к Internet по коммутируемому телефонному соединению без наличия на каждом компьютере уникального IP-адреса.

Две главы, которые можно охарактеризовать как особенно своевременные, посвящены описанию потоковых и смежных с ними технологий, применяемых для передачи аудио- и видеоинформации по Internet. В главе 28 описаны такие фундаментальные понятия, как протокол RTP (Real-time Transport Protocol - Транспортный протокол передачи в реальном времени), кодирование и флуктуационные буферы. В главе 29 описана реализация протокола RTP, применимая для приема и воспроизведения аудиоинформации в формате MP3.

Код всех примеров книги доступен в оперативном режиме. Для получения его копии через Web найдите ссылку на том 3 в списке книг по сетям на узле:

http://www.cs.purdue.edu/homes/comer/netbooks.html

Для получения этого кода по FTP воспользуйтесь URL:

ftp://ftp.cs.purdue.edu/pub/Xinu/TCPIP-vol3.linux.dist.tar.Z

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

Изучение этой книги позволяет понять, что бесчисленное множество возможных проектов сетевых приложений возникло не случайно. Эти проекты подчиняются строгим закономерностям, которые можно постичь, рассмотрев все разнообразие средств организации параллельной работы и сетевого транспорта. Например, в одной главе описан проект непараллельного сервера, в котором используется транспортный протокол с установлением логического соединения (например, TCP), а в другой - аналогичный проект, основанный на использовании транспортного протокола без установления логического соединения (например, UDP).

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

В книге приведены примеры программ, которые демонстрируют практическое воплощение каждого проекта. В большинстве примеров реализуются стандартные прикладные протоколы TCP/IP. В каждом случае сделана попытка выбрать прикладной протокол, позволяющий довести до читателя рассматриваемую идею проекта без дополнительной сложной информации, затрудняющей понимание. Поэтому каждый пример программы иллюстрирует важное понятие, а некоторые из них превосходны сами по себе. В этой версии тома 3 во всех примерах программ используется механизм сокетов Linux (т.е. API-интерфейс сокетов); две другие версии этого тома содержат часть тех же примеров, выполненных с использованием интерфейса сокетов системы Windows компании Microsoft и интерфейса TLI компании AT&T.

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

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

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

Студенты не смогут оценить важность излагаемого материала до тех пор, пока не приступят к его практическому применению. Поэтому любой курс, основанный на этой книге, должен начинаться с упражнений по программированию, которые поставят студентов перед необходимостью применять излагаемые идеи в практических программах. Студенты старших курсов могут изучать излагаемые основы, повторяя описанные проекты в программах реализации других прикладных протоколов. Аспиранты должны строить более сложные распределенные программы, в которых сделан акцент на некоторых более сложных методах (например, методах управления параллельной работой, которые рассматриваются в главе 16, и методах межсоединения, описанных в главах 18 и 19).

Авторы хотели бы выразить свою благодарность многим людям за их помощь. Члены исследовательской группы по Internet университета Пардью предоставили техническую информацию и внесли предложения по улучшению рукописи книги. Майкл Эвангелиста (Michael Evangelista) прочитал корректуру книги и разработал код реализации протокола RTP. Густаво Родригес-Ривера (Gustavo Rodriguez-Rivera) исправил отдельные главы, провел эксперименты для проверки некоторых сведений и отредактировал Приложение 1. Деннис Брилоу (Dennis Brylow) прокомментировал часть глав. Кристина Камер (Christine Comer) отредактировала весь текст, уточнила формулировки и устранила неточности.

 Дуглас Э. Камер

 Дэвид Л. Стивенс

 Июль 2000 года

Об авторах

Доктор Дуглас Камер (Douglas Comer) - признанный в мире специалист по протоколам TCP/IP и сети Internet. Он стоял у истоков Internet и внес огромный вклад в развитие и становление глобальной сети в конце 70-х и начале 80-х годов XX века. Он был членом архитектурного совета по Internet (Internet Architecture Board - IAB) - группы специалистов, определявших стратегию развития глобальной сети. Дуглас также являлся председателем технического комитета и членом исполнительного совета CSNET.

Доктор Дуглас Камер консультирует различные компании по вопросам разработки и развертывания сетей, а также проводит по всему миру семинары по протоколам TCP/IP и созданию сетей на их основе. Его лекции рассчитаны как на профессионалов, так и на рядовых пользователей Internet. Дуглас написал операционную систему Xinu и создал собственную реализацию протоколов TCP/IP. Все это он отразил в своих книгах. Написанное им программное обеспечение используется во многих коммерческих продуктах.

Доктор Камер является профессором компьютерных наук университета Пардью (Purdue University), где он преподает и занимается научно-исследовательской работой в области локальных и глобальных компьютерных сетей и операционных систем. Кроме написания серии научно-технических книг, ставших бестселлерами во всем мире, Дуглас редактирует североамериканский журнал Software - Practice and Experience. Доктор Камер является также действительным членом ассоциации ACM (Association of Computing Machinery - Ассоциация пользователей вычислительных машин).

Дополнительную информацию о нем вы можете получить в Internet по адресу:

www.cs.purdue.edu/people/comer

Дэвид Стивенс получил степень бакалавра наук (1985) и магистра наук (1993) по информатике в университете Пардью. С 1983 года он был системным программистом UNIX и работал в основном с версиями ядра BSD UNIX. Он подготовил варианты реализации основной части набора протоколов для Internet и выпустил несколько учебников по компьютерным наукам совместно с доктором Камером. Область его профессиональных интересов включает операционные системы, компьютерные сети и проектирование крупномасштабных программных систем.

В последние годы Стивенс работал в области масштабируемых сетей на базе высокоэффективных многопроцессорных систем по поручению компании Sequent Computer Systems и корпорации IBM. Он также является почетным членом ACM и IEEE (Institute of Electrical and Electronics Engineers - Институт инженеров по электротехнике и электронике).

Мнения специалистов по поводу версии Linux/POSIX тома 3 серии "Сети TCP/IP"

Дастин Босуэлл (Dustin Boswell), компания Caltech:

- Безусловно, это самая лучшая книга по данной теме, которую я когда-либо читал. Спасибо авторам за то, что теперь можно легко понять, как действуют сокеты.

Джон Лин (John Lin), компания Bell Labs:

- Превосходная книга для тех, кто изучает разработку клиентских и серверных приложений TCP/IP. В ней наглядно описаны важные понятия и приведены примеры действующих программ; такое сочетание становится чрезвычайно эффективным способом изучения данной темы.

Джейкоби Свэйтс (Jacoby Thwaites):

- Ваша книга оказалась для меня исключительно ценной. Примите мою искреннюю благодарность.

Роб Молони (Rob Moloney):

- Наслаждаюсь ясностью и глубиной изложения!

Маршалл Роуз (Marshall Rose):

- Для сообщества пользователей Internet имеет особо важное значение выпуск третьего тома (Разработка приложений типа клиент/сервер для Linux/POSIX), написанного Дугласом совместно с Дэвидом Л. Стивенсом. По этой замечательной книге можно научиться проектировать и строить приложения типа клиент/сервер и, что важнее всего, понять, в чем состоят преимущества и недостатки каждого проектного решения.


Copyright © 1992-2015 Издательская группа "Диалектика-Вильямс"

Rambler  Top100