Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

VPS в России, Европе и США

Бесплатная поддержка и администрирование

Оплата российскими и международными картами

🔥 VPS до 5.7 ГГц под любые задачи с AntiDDoS в 7 локациях

💸 Гифткод CITFORUM (250р на баланс) и попробуйте уже сейчас!

🛒 Скидка 15% на первый платеж (в течение 24ч)

Скидка до 20% на услуги дата-центра. Аренда серверной стойки. Colocation от 1U!

Миграция в облако #SotelCloud. Виртуальный сервер в облаке. Выбрать конфигурацию на сайте!

Виртуальная АТС для вашего бизнеса. Приветственные бонусы для новых клиентов!

Виртуальные VPS серверы в РФ и ЕС

Dedicated серверы в РФ и ЕС

По промокоду CITFORUM скидка 30% на заказ VPS\VDS

Книги: [Классика] [Базы данных] [Internet/WWW] [Сети] [Программирование] [UNIX] [Windows] [Безопасность] [Графика] [Software Engineering] [ERP-системы] [Hardware]

     

Unix: разработка сетевых приложений

Стивенс У.

Издано: 2003, "Питер"
ISBN: 5-318-00535-7
Твердый переплет, 1088 стр.

Начало
Краткое содержание
Полное содержание
[Заказать книгу в магазине "Мистраль"]

Введение

Сетевое программирование подразумевает написание программ, взаимодействующих через сеть. Одна из этих программ обычно называется клиентом, а другая — сервером. В большинстве операционных систем имеются предварительно скомпилированные программы, взаимодействующие через сеть — в мире TCP/IP наиболее типичным примером таких программ являются web-клиенты (браузе-ры) и web-серверы, а также клиенты и серверы FTP и Telnet, — однако в этой книге рассказывается о том, как писать собственные сетевые приложения.

Сетевые приложения пишутся с использованием программного интерфейса приложений, или API (Application Program Interface). В этой книге мы рассматриваем два API для сетевого программирования:

  1. Сокеты, иногда называемые Беркли-сокетами (Berkeley), что указывает на их связь с Berkeley Unix.
  2. XTI (X/Open Transport Interface — транспортный интерфейс группы X/Open), являющийся модификацией TLI (Transport Layer Interface — интерфейс транспортного уровня), разработанного группой AT&T.

Все примеры в этой книге относятся к операционной системе Unix, хотя основные понятия и концепции сетевого программирования практически нс зависят от операционной системы. В примерах используется набор протоколов TCP/IP, причем рассматривается как IP версии 4, так и IP версии 6.

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

  • Advanced Programming in the Unix Environment [93J;
  • TCP/IP Illustrated, vol. 1 [94];
  • TCP/IP Illustrated, vol. 2 [105];
  • TCP/IP Illustrated, vol. 3 [95].

Это книга, являющаяся вторым изданием книги «UNIX Network Programming», содержит также сведения по операционной системе Unix и по протоколам TCP/IP, но для получения более подробной информации по различным темам в этих областях следует обращаться к четырем перечисленным выше книгам, используя многочисленные ссылки, включенные в текст. В большей степени это относится к книге [105], в которой представлена реализация 4.4BSD функций сетевого программирования для API сокетов (socket, b1 nd, connect и т.д.). При понимании того, как реализована та или иная функциональная возможность, ее применение в приложениях становится более осмысленным.

Изменения по сравнению с первым изданием

Второе издание этой книги содержит очень много изменений. Все они стали результатом моего опыта преподавания данного материала и чтения материалов сетевых конференций Usenet в период с 1990 по 1996 год — это дало мне возможность выявить те темы и концепции сетевого программирования, которые регулярно оказываются неверно понятыми. Ниже перечислены основные изменения, внесенные во второе издание:

  • Для всех примеров в этом издании используется ANSI С.
  • Старые главы 6 («Berkeley Sockets» — «Сокеты Беркли») и 8 («Library Rou-tins» — «Библиотечные функции») были расширены, и теперь соответствующий материал занимает 25 глав. Это семикратное увеличение (из расчета количества слов), вероятно, является самым значительным изменением со времени первого издания. Большинство разделов прежней главы 6 теперь выросли в отдельные главы, при этом было увеличено количество примеров.
  • Части прежней главы 6, посвященные TCP и UDP, теперь разделены. Сначала мы рассматриваем функции TCP и все, что относится к клиент-серверному взаимодействию TCP, а затем — функции UDP и взаимодействие клиента и сервера UDP. Для новичков в этой области такой подход будет проще, чем, например, подробное изучение всех особенностей функции connect с различной семантикой в случае UDP и TCP.
  • Старая глава 7 («System V Transport Layer Interface» — «Интерфейс транспортного уровня System V») была расширена, и теперь соответствующий материал занимает 7 глав. Мы также рассматриваем более новую технологию ХТ1, пришедшую на смену технологии TLI, о которой шла речь в первом издании.
  • Глава 2 первого издания («The Unix Model» — «Модель Unix») не вошла во второе издание. В этой главе содержался обзор системы Unix, и занимала она 75 страниц. В 1990 году эта глава была необходима, поскольку было не так много книг, адекватно описывающих основной программный интерфейс Unix (в частности, существовавшие на тот период различия между реализациями Беркли и System V). В настоящее время гораздо больше читателей имеют представление о Unix, и поэтому такие понятия, как идентификатор пользователя, файлы паролей, каталоги и идентификаторы групп пользователей, уже не нуждаются в особом пояснении. (Для читателей, которым необходима дополнительная информация в области программирования под Unix, предназначена моя книга [93], содержащая 700 страниц материала по этим вопросам.)
  • Некоторые более сложные темы из прежней главы 2, предназначенные для опытных программистов, вошли и во второе издание, но они рассматриваются параллельно с применением соответствующей функциональности. Например, при рассмотрении нашего первого параллельного сервера (раздел 4.8) мы подробно описываем функцию fork. Когда мы описываем обработку сигнала SIGCHLD, мы рассказываем о многих дополнительных функциональных возможностях обработки сигналов Posix (зомбированные процессы, прерванные системные вызовы и т. д.).
  • Везде в книге мы стремились по возможности использовать стандарт Posix. (Более подробно о семействе стандартов Posix говорится в разделе 1.10.) Сюда относятся не только стандарт Posix. 1 для основных функций Unix (управление процессами, сигналы и т. п.), но и более новый стандарт Posix. lg для соке-тов и ХТ1 и стандарт Posix. 1 1996 года для потоков.
    При описании таких функций, как socket и connect, термин «системный вызов» был заменен на термин «функция» Это связано с принятым в Posix соглашением о том, что различие между системным вызовом и функцией — это подробность реализации, как правило, не имеющая значения для программиста.
  • Прежние главы 4 («A Network Primer» — «Сетевой букварь») и 5 («Communication Protocols» — «Протоколы передачи данных») заменены приложением А, в котороштисываются протоколы IP версии 4 (IPv4) и версии 6 (IPv6), и главой 2, в которой рассказывается о протоколах TCP и UDP. Этот новый материал в основном посвящен тем аспектам сетевых протоколов, с которыми наиболее часто встречается разработчик сетевых приложений. В книге также приводится описание протокола IPv6. Хотя на момент написания книги этот протокол только начал применяться, он, вероятно, станет наиболее широко используемым протоколом, когда книга дойдет до читателя,
    В процессе преподавания сетевого программирования я пришел к выводу, что около 80% всех возникающих в этой области проблем на самом деле не имеет ничего общего с собственно сетевым программированием. Я имею в виду, что эти проблемы связаны не с функциями API, такими как accept или sel ect, а с непониманием лежащих в их основе сетевых протоколов. Например, я обнаружил, что как только студенту удается разобраться с трехэтапным рукопожатием (three-way handshake) и последовательностью обмена четырьмя пакетами при завершении соединения, ему становятся понятны и многие аспекты сетевого программирования.
    Из второго издания удалены разделы, посвященные XNS, SNA, NetBIOS, протоколам OSI и UUCP, так как уже в начале 1990-х стало очевидно, что они уступили место протоколам TCP/IP. (Хотя UUCP не устарел и до сих пор пользуется популярностью, в контексте сетевого программирования мало что можно рассказать об этом протоколе.)
  • Во втором издании освещены следующие новые темы:
    • Совместимость IPv4 и IPv6 (глава 10).
    • Независимые от протокола преобразования имен (глава II).
    • Маршрутизирующие сокеты (глава 17).
    • Многоадресная передача (глава 19).
    • Потоки (глава 23). D Параметры IP (глава 24).
    • Доступ к канальному уровню (глава 26).
    • Альтернативное устройство клиента и сервера (глава 27),
    • Виртуальные сети и туннелирование (приложение Б).
    • Технологии отладки сетевых программ (приложение В).

    К первому изданию было сделано столько добавлений, что, к сожалению, получившийся материал не может войти в одну книгу. Поэтому планируется выпустить еще как минимум два тома.
  • Второй том получит подзаголовок «Взаимодействие процессов» (IPC: Interprocess Communications) и станет расширением главы 3 первого издания. В него также войдет описание механизмов IPC реального времени по стандарту Posix.l.
  • Третий том будет иметь подзаголовок - «Приложения» («Applications») и будет представлять собой расширение глав 9-18 первого издания.
    Большинство сетевых приложений будет рассматриваться в третьем томе, но некоторые специальные приложения рассматриваются в этом томе, а именно программы Ping, Traceroute и демон Inetd.

Кому адресована эта книга

Эту книгу можно использовать и как учебное пособие по сетевому программированию, и как справочник для более опытных программистов. При использовании его как учебника или для ознакомления с сетевым программированием следует уделить особое внимание второй части («Элементарные сокеты», главы 3-9), после чего можно переходить к чтению тех глав, которые представляют наибольший интерес. Во второй части рассказывается об основных функциях сокетов — как для TCP, так и для UDP; кроме того, рассматриваются мультиплексирование ввода-вывода, параметры сокетов и основные преобразования имен и адресов. Всем читателям следует прочесть главу 1, в особенности раздел 1.4, так как в нем описаны некоторые функции-обертки, используемые далее во всей книге. Глава 2 и, возможно, приложение А могут быть использованы по мере необходимости для получения справочных сведений в зависимости от уровня подготовки читателя. Большинство глав в третьей части («Дополнительные возможности сокетов») могут быть прочитаны независимо от других содержащихся в этой же части.

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

Хотя API сокетов стал фактическим стандартом сетевого программирования, наравне с ним используется и ХТ1, иногда с отличным от TCP/IP набором протоколов. Интерфейсу ХТ1 посвящена четвертая часть. Он описан нс так подробно, как интерфейс сокетов во второй и третьей частях. Это объясняется тем, что основные концепции интерфейса сокетов применимы и к ХТ1. Например, все кон-

Этот том также переведен и выпущен издательством «Питер»: У. Стивене. UNIX: взаимодействие процессов. — СПб.: Питер, 2002.

Концепции интерфейса сокетов, относящиеся к использованию неблокируемого ввода-вывода, широковещательной и многоадресной передачи, управляемого сигналом ввода-вывода, внеполосных данных и потоков, остаются в силе и для интерфейса ХТ1. Действительно, многие аспекты сетевого программирования схожи в своей основе независимо от того, сокеты или ХТ1 вы используете в своих программах, и вряд ли есть какие-то задачи, которые один API позволяет решить, а другой нет. Концепции остаются неизменными — меняются лишь имена функций и их аргументы.

Исходный код и замеченные опечатки

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

Список найденных опечаток по этой книге также находится на моей домашней странице.

Начало
Краткое содержание
Полное содержание
[Заказать книгу в магазине "Мистраль"]

 

VPS/VDS серверы. 30 локаций на выбор

Серверы VPS/VDS с большим диском

Хорошие условия для реселлеров

4VPS.SU - VPS в 17-ти странах

2Gbit/s безлимит

Современное железо!

Бесплатный конструктор сайтов и Landing Page

Хостинг с DDoS защитой от 2.5$ + Бесплатный SSL и Домен

SSD VPS в Нидерландах под различные задачи от 2.6$

✅ Дешевый VPS-хостинг на AMD EPYC: 1vCore, 3GB DDR4, 15GB NVMe всего за €3,50!

🔥 Anti-DDoS защита 12 Тбит/с!

Новости мира IT:

Архив новостей

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 7861149
Пресс-релизы — pr@citforum.ru
Обратная связь
Информация для авторов
Rambler's Top100 TopList This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2019 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...