Продолжая традиции Рика Стивенса (но в противоположность общепринятым технологиям), мы подготовили оригинал-макет книги, используя замечательный пакет
groff
, написанный Джеймсом Кларком (James Clark), создали иллюстрации с помощью программы
gpic
(используя многие из макросов Гари Райта), сделали таблицы с помощью программы
gtbl
, составили предметный указатель и подготовили окончательный макет страниц. Программа Дейва Хансона (Dave Hanson)
loom
и некоторые сценарии Гари Райта (Gary Wright) использовались для включения кода программ в книгу. Набор сценариев на языке
awk
, написанный Джоном Бентли (Jon Bentley) и Брайаном Керниганом (Brian Kernighan), помогал в создании предметного указателя.
Авторы с нетерпением ждут комментарии, предложения и сообщения о замеченных опечатках.
http://www.unpbook.com
Ваши замечания, предложения, вопросы отправляйте по адресу электронной почты
[email protected]
(издательство «Питер», компьютерная редакция).
Мы будем рады узнать ваше мнение!
Исходные коды всех программ, приведенных в книге, вы можете найти по адресу
http://www.piter.com
.
На веб-сайте издательства
http://www.piter.com
вы найдете подробную информацию о наших книгах.
Часть 1
Введение. TCP/IP
Глава 1
Введение в сетевое программирование
1.1. Введение
Чтобы писать программы, рассчитанные на взаимодействие в компьютерных сетях, необходимо сначала изобрести протокол — соглашение о порядке взаимодействия таких программ. Прежде чем углубляться в детальное проектирование протокола, нужно принять некоторые высокоуровневые решения о том, какая программа будет инициировать передачу данных и в каких случаях можно ожидать ответной передачи. Например, веб-сервер обычно рассматривается как долгоживущая программа (или
Рис. 1.1. Сетевое приложение: клиент и сервер
Клиенты обычно устанавливают соединение с одним сервером за один раз, хотя, если в качестве примера говорить о веб-браузере, мы можем соединиться со множеством различных веб-серверов, скажем, в течение 10 минут. Сервер, напротив, в любой момент времени может быть соединен со множеством клиентов. Это отражено на рис. 1.2. Далее в этой главе будут рассмотрены различные возможности взаимодействия сервера одновременно со множеством клиентов.
Рис. 1.2. Сервер, который одновременно обслуживает множество клиентов
Не будет большой ошибкой сказать, что клиентское и серверное приложения взаимодействуют по сетевому протоколу, однако фактически в большинстве случаев используется несколько протоколов различных уровней. В этой книге мы сосредоточимся на наборе (стеке) протоколов TCP/IP, также называемом набором протоколов Интернета. Так, например, клиенты и веб-серверы устанавливают соединения, используя протокол управления передачей (Transmission Control Protocol, TCP). TCP, в свою очередь, использует протокол Интернета (Internet Protocol, IP), а протокол IP устанавливает соединение с тем или иным протоколом канального уровня. Если и клиент, и сервер находятся в одной сети Ethernet, взаимодействие между ними будет осуществляться по схеме, изображенной на рис. 1.3.
Рис. 1.3. Клиент и сервер в одной сети Ethernet, соединенные по протоколу TCP
Хотя клиент и сервер устанавливают соединение с использованием протокола уровня приложений, транспортные уровни устанавливают соединение, используя TCP. Обратите внимание, что действительный поток информации между клиентом и сервером идет вниз по стеку протоколов на стороне клиента, затем по сети и, наконец, вверх по стеку протоколов на стороне сервера.
Заметьте, что клиент и сервер являются типичными пользовательскими процессами, в то время как TCP и протоколы IP обычно являются частью стека протоколов внутри ядра. Четыре уровня протоколов обозначены на рис. 1.3 справа.