Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

СПО_1 / СПО / Sozdanie.setevyh.prilojenii.v.srede.Linux

.pdf
Скачиваний:
78
Добавлен:
11.04.2015
Размер:
2.94 Mб
Скачать

Создание сетевых приложений в среде

Linux

Руководство разработчика

Шон Уолтон

Москва•Санкт Петербург•Киев 2001

www.books-shop.com

ББК 32.973.26 018.2.75

УДК681.3.07

Издательский дом "Вильяме"

По общим вопросам обращайтесь в Издательский дом "Вильяме" поадресу:info@williamspublishing.com,http://www.williamspublishing.com

Уолтон, Шон.

Создание сетевых приложений в среде Linux. : Пер. с англ.— М. : Издательский дом "Вильяме", 2001. — 464 с.: ил. — Парал: тит. англ.

ISBN 5 8459 0193 6 (рус.)

Данная книга в основном посвящена программированию сокетов на языке С в среде Linux. В ней шаг за шагом рассказывается о том, как писать профессиональные сетевые клиентские, серверные и одноранговые приложения. Читатель узнает, как работать с су ществующими клиент серверными протоколами (в частности, HTTP), взаимодействовать с другими компьютерами по протоколу UDP и создавать свои собственные протоколы. В книге описываются все типы пакетов, поддерживаемых в семействе протоколов TCP/IP, их достоинства и недостатки.

Помимо базового материала представлены сведения о различных методиках многоза дачности, рассказывается о средствах управления вводом выводом и обеспечения безо пасности сетевых приложений. В книге также описываются объектно ориентированные подходы к сетевому программированию на языках Java и C++. Отдельные главы посвяще ны технологии RPC, протоколу SSL, работе в групповом и широковещательном режимах и стандарту IPv6.

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

ББК 32.973.26 018.2.75

Все названия программных продуктов являются зарегистрированнымиторговыми марками соответст вующих фирм.

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

Authorized translation from the English language edition published by Sams Publishing Copyright © 2001

All rights reserved. No part of this book may be reproduced or transmitted in any form or by any means, elec tronic or mechanical, including photocopying recording or by any information storage retrieval system, without permission from the Publisher.

Russian language edition published by Williams Publishing House according to the Agreement with R&I En terprises International, Copyright © 2001

ISBN 5 8459 0193 6 (рус.)

О Издательский дом "Вильяме", 2001

ISBN 0 672 31935 7 (англ.)

© Sams Publishing, 2001

www.books-shop.com

Оглавление

Часть I. Создание сетевых клиентских приложений

23

Глава 1.

Простейший сетевой клиент

24

Глава 2.

Основы TCP/IP

41

Глава 3.

Различные типы Internet пакетов

58

Глава 4.

Передача сообщений между одноранговыми компьютерами

79

Глава 5.

Многоуровневая сетевая модель

99

Часть II. Создание серверных приложений

115

Глава 6.

Пример сервера

116

Глава 7.

Распределение нагрузки: многозадачность

131

Глава 8.

Механизмы ввода вывода

167

Глава 9.

Повышение производительности

188

Глава 10. Создание устойчивых сокетов

213

Часть III. Объектно ориентированные сокеты

231

Глава 11. Экономия времени за счет объектов

232

Глава 12. Сетевое программирование в Java

248

Глава 13. Программирование сокетов в C++

263

Глава 14.

Ограничения объектно ориентированного программирования

279

Часть IV. Сложные сетевые методики

291

Глава 15. Удаленные вызовы процедур (RPC)

292

Глава 16. Безопасность сетевых приложений

308

Глава 17.

Широковещательная, групповая и магистральная передача сообщений 326

Глава 18.

Неструктурированные сокеты

336

Глава 19.

IPv6: следующее поколение протокола IP

345

Часть V. Приложения

357

Приложение А.

Информационные таблицы

358

Приложение Б.

Сетевые функции

379

Приложение В.

API функции ядра

407

Приложение Г.

Вспомогательные классы

434

www.books-shop.com

Введение

 

 

19

Часть I. Создание сетевых клиентских приложений

23

Глава 1. Простейший сетевой клиент

 

24

Связь с окружающим миром посредством сокетов

 

27

Правила общения: основы адресации в TCP/IP

 

28

Прослушивание сервера: простейший алгоритм клиентской программы

29

Системный вызов socket()

 

 

30

Подключение к серверу

 

 

32

Получение ответа от сервера

 

 

35

Разрыв соединения

 

 

39

Резюме: что происходит за кулисами

.

 

40

Глава 2.

Основы TCP/IP

 

 

41

IP адресация

 

 

42

Идентификация компьютера

 

 

42

Структура адресов Internet

,

 

43

Маски подсети

 

 

45

Маршрутизаторы и преобразование адресов

 

46

Специальные и потерянные адреса

 

 

46

Номера IP портов

 

 

48

Порядок следования байтов

 

 

50

Функции преобразования данных

 

 

50

Расширение клиентского приложения

 

 

52

Различные виды пакетов

 

 

56

Именованные каналы в UNIX

 

 

56

Резюме: IP адреса и средства преобразования данных

 

57

Глава 3.

Различные типы Internet пакетов

 

58

Базовый сетевой пакет

 

 

59

Поле version

 

 

61

Поле header_len

 

 

61

Поле serve_type

 

 

62

Поле ID

 

 

62

Поля dont_frag, more_frag и frag_offset

 

62

Поле time_to_live (TTL)

 

 

63

Поле protocol

 

 

63

Поле

options

 

 

64

Поле data

 

 

64

Анализ различных типов пакетов

 

 

64

Характеристики пакетов

 

 

65

Типы пакетов

 

 

67

Взаимосвязь между протоколами

 

 

75

Анализ сетевого трафика с помощью утилиты tcpdump

 

76

Создание сетевого анализатора

 

 

77

Резюме: выбор правильного пакета

 

 

78

Глава 4.

Передача сообщений между одноранговыми компьютерами .

79

Сокеты, требующие установления соединения

 

80

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

 

80

Надежные соединения

 

 

80

Соединения по протоколам более низкого уровня

 

82

Содержание

www.books-shop.com

Пример: подключение к демону HTTP

 

,

84

Упрощенный протокол HTTP

 

 

84

Получение HTTP страницы

 

 

84

Сокеты, не требующие установления соединения

 

 

85

Задание адреса,

сокета

 

86

Упрощение процедуры квитирования

 

 

87

ПротоколТ/ТСР

 

 

88

 

 

 

Прямая доставка сообщений

 

 

89

Привязка порта к сокету

 

 

90

Обмен сообщениями

 

 

92

Прием сообщения

 

 

93

Подтверждение доставки UDP сообщения

 

 

94

Усиление надежности UDP

 

 

94

Упорядочение пакетов

 

 

95

Избыточность пакетов

.

 

96

Проверка целостности данных

 

 

96

Задержки при передаче данных

 

 

97

Переключение задач: введение в многозадачность

 

 

97

Резюме: модели взаимодействия с установлением и без установления соединения

 

98

Глава 5.

Многоуровневая сетевая модель

 

 

99

Решение сетевой задачи

 

 

100

Аппаратная среда

 

 

100

Передача данных в сети

 

 

102

Взаимодействие сети и операционной системы

 

 

103

. Взаимодействие сети и приложений

 

 

104

Сетевая модель OSI

 

 

105

Уровень 1: физический

 

 

105

Уровень 2: канальный

 

'

106

Уровень 3: сетевой

 

 

107

Уровень 4: транспортный

 

 

107

Уровень 5: сеансовый

'

 

107

Уровень 6: представительский

 

 

108

Уровень 7: прикладной

 

 

108

Набор протоколов Internet

 

 

108

Уровень 1: доступ к сети

 

 

108

Уровень 2: межсетевой (IP)

 

 

109

Уровень 2: управляющие расширения (ICMP)

 

 

110

Уровень 3: межузловой (UDP)

 

 

110

Уровень 3: потоки данных (TCP)

 

 

111

Уровень 4: прикладной

 

 

112

Фундаментальные различия между моделями OSI и IP

 

 

112

Что чему служит

 

 

113

Резюме: от теории к практике

 

 

113

Часть II. Создание серверных приложений

 

115

Глава 6.

Пример сервера

 

 

116

Схема работы сокета: общий алгоритм сервера

,'

 

117

Простой эхо сервер

 

 

118

Привязка порта к сокету

 

 

119

Создание очереди ожидания

 

 

121

Прием запросов от клиентов

 

 

122

Взаимодействие с клиентом

 

 

123

Общие правила определения протоколов

 

 

124

Содержание

www.books-shop.com

Какая программа должна начинать передачу первой?

 

 

125

Какая программа должна управлять диалогом?

 

 

125

Какой уровень сертификации требуется?

 

 

125

Какой тип данных используется?

 

 

125

Как следует обрабатывать двоичные данные?

 

 

126

Как обнаружитьвзаимоблокировку?

 

 

126

Необходима ли синхронизация по таймеру?

 

 

126

Как и когда переустанавливать соединение?

 

 

126

Когда завершать работу?

 

 

127

Более сложный пример: сервер HTTP

 

 

127

Резюме: базовые компоненты сервера

 

 

130

Глава 7.

Распределение нагрузки: многозадачность

 

131

Понятие о многозадачности: процессы и потоки

 

 

132

Когда следует применять многозадачный режим

 

 

134

Характеристики многозадачного режима

 

 

135

Сравнение процессов и потоков

 

 

136

Создание процесса

 

 

136

Создание потока

 

 

139

Системный вызов _clone()

 

 

142

Взаимодействие заданий

 

 

145

Обгоняя время: исключающие семафоры и гонки

 

 

155

Гонки за ресурсами

 

 

155

Исключающий семафор

 

 

156

Проблемы с исключающими семафорами в библиотеке Pthreads

 

158

Предотвращение взаимоблокировки

 

.

158

Управление дочерними заданиями и задания зомби

 

 

159

Приоритеты и планирование дочерних заданий

 

 

159

Уничтожение зомби: очистка после завершения

 

 

160

Расширение существующих версий клиента и сервера

 

 

162

Вызов внешних программ с помощью функций семейства ехес()

 

163

Резюме

 

 

 

166

Глава 8.

Механизмы ввода вывода

 

 

167

Блокирование ввода вывода: зачем оно необходимо?

 

 

168

Когда следует переходить в режим блокирования?

 

 

170

Альтернативы блокированию

 

 

170

Сравнение различных методик ввода вывода

 

 

171

Опрос каналов ввода вывода

 

172

Чтение данных по методике опроса

 

 

173

Запись данных по методике опроса

 

 

175

Установление соединений по методике опроса .

 

 

176

Асинхронный ввод вывод

 

 

177

Чтение данных по запросу

'

 

179

Асинхронная запись данных

 

 

180

Подключение по запросу

 

 

181

Устранение нежелательного блокирования с помощью функций poll() и select()

 

182

Реализациятайм аутов

 

 

185

Резюме: выбор методик ввода вывода

 

 

186

Глава 9.

Повышение производительности

 

 

188

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

 

 

189

• Ограничение числа клиентских соединений

 

 

189

Предварительное ветвление сервера

 

 

191

Адаптация к различным уровням загруженности

 

 

193

Содержание

www.books-shop.com

Расширение возможностей сервера с помощью функции select()

, ,

195

Лавиноподобная загрузка планировщика

,. •

 

195

Чрезмерное использование функции

select()

 

196

Разумное использование функции

select()

 

197

Проблемы реализации

 

 

198

Перераспределение нагрузки

 

 

199

Анализ возможностей сокета

 

 

200

Общие параметры

 

 

201

Параметры протокола IP

 

 

203

Параметры стандарта IPv6

 

 

205

Параметры протокола TCP

 

 

206

Восстановление дескриптора сокета

 

 

206

Досрочная отправка: перекрытие сообщений

.

 

207

Проблемы файлового ввода вывода

 

 

208

Ввод вывод по запросу: рациональное использование ресурсов процессора

208

Ускорение работы функции send()

 

 

208

Разгрузка функции

recv()

 

209

Отправка приоритетных сообщений

 

 

209

Резюме

 

 

212

Глава 10. Создание устойчивых сокетов

 

 

213

Методы преобразования данных

 

 

214

Проверка возвращаемых значений

 

 

215

Обработка сигналов

 

 

217

SIGPIPE

 

 

218

SIGURG

 

 

219

SIGCHLD

 

 

219

SIGHUP

 

 

220

SIGIO

 

 

220

SIGALRM

 

 

220

Управление ресурсами

 

 

221

Управление файлами

 

 

221

Динамическая память ("куча")

 

 

221

Статическая память

 

 

223

Ресурсы процессора, совместно используемая память и процессы

 

223

Критические серверы

 

 

223

Что называется критическим сервером

 

 

224

Коммуникационные события и прерывания

 

 

224

Особенности возобновления сеанса

 

 

225

Способы возобновления сеанса

 

 

226

Согласованная работа клиента и сервера

 

 

227

Сетевые взаимоблокировки

 

 

228

Сетевое зависание

 

 

228

Отказ отобслуживания

 

 

229

Резюме: несокрушимые серверы

 

 

230

Часть III. Объектно ориентированные сокеты

231

Глава 11. Экономия времени за счет объектов

 

232

Эволюция технологий программирования

 

 

233

Функциональное программирование: пошаговый подход

 

233

Модульное программирование: структурный подход

 

234

Абстрактное программирование: отсутствие ненужной детализации

 

235

Объектно ориентированное программирование: естественный способ общения с миром

235

Рациональные методы программирования

 

 

236

Содержание

www.books-shop.com

Повторное использование кода

 

 

 

236

Создание подключаемых компонентов

 

 

237

Основы объектно ориентированного

программирования

 

 

238

Инкапсуляция кода

 

 

 

238

Наследование поведения

 

 

 

239

Абстракция

данных

 

 

240

Полиморфизм методов

 

 

 

241

Характеристики объектов

 

 

 

241

Классы и объекты

 

 

 

241

Атрибуты

 

 

 

 

 

241

Свойства

 

 

 

 

 

242

Методы

 

 

 

 

 

242

Права доступа

 

 

 

 

242

Отношения

 

 

 

 

242

Расширение объектов

 

 

 

243

Шаблоны

 

 

' .

 

 

243

Постоянство

 

 

 

 

243

Потоковая передача данных

 

 

 

243

Перегрузка

 

 

 

 

 

244

. Интерфейсы

 

 

 

 

244

События и исключения

 

 

 

244

Особые случаи

 

 

 

 

 

245

Записи и структуры

 

 

 

245

Наборы функций

 

 

 

245

Языковая поддержка

 

 

 

246

Классификация объектно ориентированных языков

 

 

246

Работа с объектами в процедурных языках

 

 

246

Резюме: объектно ориентированное

мышление

 

 

247

Глава 12. Сетевое программирование в Java

 

 

248

Работа с сокетами

 

 

 

 

249

Программирование клиентов и серверов

 

 

250

Передача

UDP сообщений

 

 

 

253

Групповая передача дейтаграмм

 

 

 

254

Ввод вывод в Java

 

 

 

 

256

Классификация классов ввода вывода

 

 

256

Преобразование потоков

 

 

 

257

Конфигурирование

сокетов

. .

.

 

258

Общие методы конфигурирования

 

 

258

Конфигурирование групповых сокетов

.

 

259

Многозадачные

программы

 

 

 

259

Создание потокового класса

 

 

 

259

Добавление потоков к классу

 

 

 

260

Синхронизация

методов

 

 

 

261

Существующие ограничения

 

 

 

262

Резюме

 

 

 

'

,

262

Глава 13. Программирование сокетов в C++

 

 

263

Зачем программировать сокеты в C++?

 

 

264

Упрощение работы ссокетами

 

 

 

264

Отсутствие ненужной детализации

 

 

264

Создание многократно используемых компонентов '

265

Моделирование по необходимости

 

 

265

Создание библиотеки сокетов

 

 

 

265

Определение общиххарактеристик

 

 

266

10

 

 

 

 

Содержание

www.books-shop.com

Соседние файлы в папке СПО
  • #
    11.04.201527.19 Mб68Cpp4Unix.pdf
  • #
    11.04.201516.44 Mб51IP Arhitektura, protokoly, realizatsiya (vklyuchaya IP versii s IP Security).djvu
  • #
  • #
    11.04.201510.72 Mб50Стивенс. UNIX. Разработка сетевых приложений.djvu