Готовый перевод Michael J. Donahoo "TCP/IP Sockets in C, 2nd Edition" / Michael J. Donahoo "Программирование TCP/IP сокетов в Си, 2-ое издание": Предисловие ко второму изданию

Предисловие ко второму изданию

Когда мы писали первое издание этой книги, среди университетских курсов по сетям изучение программирования комплектующих было не слишком распространенной практикой. В это трудно сейчас поверить, когда интернет стал такой важной частью нашего мира, и педагогические преимущества практического программирования и реальные примеры протоколов получили столь широкое признание. Несмотря на то, что сейчас есть другие языки программирования, обеспечивающие доступ к интернету, интерес к оригинальным сокетам Беркли, написанным на Си, очень высок.API (application programming interface - Интерфейс программирования приложений) сокетов для сетей был разработан в Калифорнийском Университете в Беркли в 1980-х годах для BSD (разновидность UNIX) - один из самых первых примеров того, что сейчас бы мы называли open-source проектом.

Что API сокетов, что интернет - оба развивались в мире множества конкурирующих семейств протоколов - IPX, Appletalk, DECNet, OSI и SNA в дополнение Transmission Control Protocol/Internet Protocol (TCP/IP) {Протокол управления передачей/Интернет протокол} - и сокеты были разработаны для поддержки их всех. Меньшее количество семейств протоколов было общеиспользуемыми в то время, как мы писали первую редакцию этой книги, а их число сегодня еще меньше. Тем не менее, как мы и предвидели в первом издании, API сокетов остается важным для тех, кто хочет создавать и настраивать распределенные приложения, которые используют интернет - это то, что использует TCP/IP. И интерфейс зарекомендовал себя достаточно устойчивым для поддержки новой версии интернет протокола (IPv6), который сейчас поддерживается фактически всеми основными компьютерными платформами.

Существует 2 причины, по которым было принято решение выпустить второе издание. Во-первых, исходя из собственного опыта и обратной связи от читателей, мы пришли к выводу, что некоторые темы необходимо расширять и погружаться в них глубже. Вторая причина - увеличение использования IPv6, которая теперь поддерживает практически все из существующих платформ. На момент написания первого издания отсутствовала возможность использовать IPv6 для обмена сообщениями с большими группами хостов в интернете, но адреса IPv6 присваивались многим из них.
Сейчас ещё слишком рано говорить о том, что IPv6 станет всемирным, но уже пора писать приложения.

Отличия от первого издания

Мы обновили и значительно расширили большую часть материала, добавив две главы.

Основные изменения по сравнению с первым изданием, включают:
Рассматривается IPv6. Мы включили три вида кодов: IPv4-specific, IPv6-specific и общий. Код в последних главах предназначен для работы с любой версией протокола для машин, поддерживающих обе разновидности.

Добавленная глава по программированию сокетов на C++ (предоставлена David B. Sturgill). Библиотека PracticalSocket обеспечивает классы для работы с сокетами. Это дает возможность преподавателю обучать студентов программированию сокетов без знания С и предоставляет библиотеку, что в свою очередь делает возможным для студентов немедленно начать разработку приложений после понимания понятий адрес/порт и клиент/сервер.

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

Убрано справочное приложение с листингом всех функций Socket API. Это позволило вставить во второе издание больше примеров; кроме того, большинство функций рассмотрено в самих главах. И кстати, никто не запрещает Вам поискать в интернете или воспользоваться командой "man".

Выделены важные, но малозаметные факты и предостережения. В отличие от 1-го издания, теперь вся важная информация и концепции, которые ранее можно было пропустить при первом чтении, хорошо выделены.
Несмотря на то, что размеры книги увеличились, мы не смогли включить все то, что мы хотели и о чем нас просили написать, в том числе "сырые" сокеты и работа с WinSock.

Целевая аудитория

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

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

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

Базовые знания

Мы предполагаем,что читатель обладает базовыми навыки программирования и имеет опыт работы с C и UNIX. Вы, как ожидается, должны быть знакомы с концепциями C, такими как указатели и приведение типов, так же вы должны иметь базовое понимание двоичного представления данных.
Некоторые из наших примеров подразумевают файлы, которые должны быть скомпилированы отдельно; мы предполагаем, что Вы можете с этим справиться.
Вот небольшой тест - если вы можете разобраться, что выполняет следующий фрагмент кода, то у вас не должно возникнуть проблем с кодом в этой книге:

typedef struct {
int a;
short s[2];
} MSG;

MSG *mp, m = {4, 1, 0};
char *fp, *tp;
mp = (MSG *) malloc(sizeof(MSG));
for (fp = (char *)m.s, tp = (char *)mp->s; tp < (char *)(mp+1);)
*tp++ = *fp++;

Если вы не понимаете, этот фрагмент - не отчаивайтесь (он не очень сложный), вы можете обратиться к вашей любимой книге программирования на C, чтобы разобраться, что выполняет фрагмент.

Вы должны также быть знакомы с UNIX понятиями: адресное пространство процесса, параметры командной строки, завершение программы и обычные файлы ввода и вывода.
Материал главы 4 и 6 предполагает несколько более продвинутые понимание UNIX. Настоятельно рекомендуем познакомиться с такими концепциями сетей передачи данных, как протоколы, адреса, клиенты и серверы.

Рекомендованная платформа и переносимость

Мы презентуем книгу на основе UNIX. Когда мы разрабатывали эту книгу, некоторые люди убеждали нас включить код как для Windows, как и UNIX. К сожалению, не было возможности сделать это по разным причинам, в том числе - итоговый объем (и цена) данной книги.

Для тех, у кого есть доступ к Windows, обратите внимание, что примерам, приведенные в первых главах, необходимы минимальные изменения для работы с WinSock. (Вам необходимо изменить заголовочные файлы и добавить setup call в начале программы и cleanup call в конце). Кроме того , большинство других примеров требуют незначительных изменений. Тем не менее, некоторые так сильно зависят от модели программирования в UNIX, что их нет смысла переносить их на WinSock.

Версии примеров, работающих на WinSock, доступны на сайте книги www.mkp.com/socket. Отметим также, что почти все примеры кода работают с минимальными изменениями под Cygwin, который Вы можете найти в свободном доступе. Для второго издания мы сделали адаптацию для стандарта C99.

Эту версию языка поддерживает большинство компиляторов; об отличиях от предыдущего стандарта С90 вы можете прочитать на http://ru.wikipedia.org/wiki/C99

Наш код использует "Basic Socket Interface Extensions for IPv6". Из-за того, что мы полагаемся на эти новые интерфейсы (getaddrinfo()), наш код может не запускаться на некоторых старых платформах. Несмотря на это, мы ожидаем, что на большинстве современных систем наш код будет исполняться без проблем.

Примеры программ, включенные в эту книгу, протестированы (и должны компилироваться и запускаться без изменений) как в *NIX, так и в Mac OS. Увы, но расположения и зависимости заголовочных файлов (*.h), не полностью стандартизированы и возможно придется покопаться в вашей системе. Также поддержка опции сокета широко варьируется в системах; мы пытались сфокусироваться на тех системах, которые наиболее широко поддерживаются. Просмотрите API документацию для Вашей системы. (Под документацие API мы подразумеваем "man pages" для Вашей системы. Чтобы узнать об этом, наберите "man man" или воспользуейтесь своим любимым поисковиком.)

Имейте в виду, что хотя и мы старались сделать код устойчивым, основная цель приведенных примеров - педагогическая, и данный код не для выпуска конечных приложений. Мы принесли в жертву некоторую устойчивость ради лаконичности и ясности, особенно в основном коде сервера. (Оказывается, что не просто написать сервер, который работает под всеми комбинациями конфигураций IPv4 и IPv6 и также максимизирует вероятность успешного подсоединения клиента при любых обстоятельствах.)

Эта книга не сделает Вас экспертом!

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

Первая глава предназначена дает ровно столько, сколько нужно чтобы Вы начили писать код. Вторая глава глава показывает Вам, как написать клиент и сервер TCP используя или IPv4, или IPv6. Глава 3 показывает, как использовать в Вашем клиенте и сервеое сетевую службу имен, а также объясняет, как сделать их независимыми от версии IP-протокола (v4 или v6).

В 4-ой главе рассматривает протокол пользовательских дейтаграмм (User Datagram Protocol - UDP). Главы 5 и 6 дают знания, необходимые для написания еще большего количества программ, в то время как 7-ая глава рассказывает, что происходит при реализации сокетов в вызовы API; эти три главы взаимонезависимы и могут быть представлены в любом порядке. Наконец, 8-ая глава представляет библиотеку классов на С++, которая обеспечивает упрощенный доступ к функциональности сокетов.

На протяжении всей книги, некоторые заявления будут выделены следующим образом: "Эта книга не сделает вас специалистом!"
Наша цель - довести до вашего внимания, не заметные, но очень важные факты
и идеи, которые можно пропустить при первом чтении.
Знаки на полях говорят вам "обрати внимание" не то, что выделено жирным шрифтом.

Благодарности

Многие люди внесли свой вклад, чтобы сделать эту книгу реальностью. В дополнение ко всем тем, кто помог нам с первым изданием (Michel Barbeau, Steve Bernier, Arian Durresi, Gary Harkin, Ted Herman, LeeHollaar, David Hutchison, Shunge Li, Paul Linton, Ivan Marsic, WillisMarti, Kihong Park, Dan Schmitt, Michael Scott, Robert Strader, Ben Wah, and Ellen Zegura), мы особенно благодарим David
B. Sturgill, который разработал код и текст для 8-ой главы, а так же Bobby Krupczak за помощь в разработке проекта второго издания.
И, наконец, сотрудникам из Morgan Kaufmann/Elsevier: Rick Adams - наш редактор, помощник редактора Maria Alonso, и руководитель проекта Melinda Ritchie -
Благодарю вас за ваше терпение, помощь и заботу о качестве нашей книге.

Обратная связь

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

M.J.D.jeff_donahoo@baylor.edu
K.L.C.calvert@netlab.uky.edu

Переведено на Нотабеноиде
http://notabenoid.org/book/29398/99691

Переводчики: prefer211, GorelovaV, IamSadist

Настройки

Готово:

100.00% КП = 1.1