Сидни Фейт - TCP/IP Архитектура, протоколы, реализация (включая IP версии 6 и IP Security)

Тут можно читать онлайн Сидни Фейт - TCP/IP Архитектура, протоколы, реализация (включая IP версии 6 и IP Security) - бесплатно полную версию книги (целиком) без сокращений. Жанр: comp-osnet, издательство Лори, год 2000. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.
  • Название:
    TCP/IP Архитектура, протоколы, реализация (включая IP версии 6 и IP Security)
  • Автор:
  • Жанр:
  • Издательство:
    Лори
  • Год:
    2000
  • Город:
    Москва
  • ISBN:
    5-85582-072-6
  • Рейтинг:
    3.5/5. Голосов: 101
  • Избранное:
    Добавить в избранное
  • Отзывы:
  • Ваша оценка:
    • 80
    • 1
    • 2
    • 3
    • 4
    • 5

Сидни Фейт - TCP/IP Архитектура, протоколы, реализация (включая IP версии 6 и IP Security) краткое содержание

TCP/IP Архитектура, протоколы, реализация (включая IP версии 6 и IP Security) - описание и краткое содержание, автор Сидни Фейт, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru

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

Книга написана увлекательно и доступно. Она содержит дополнительные материалы о нескольких протоколах Интернета, используемых серверами и браузерами WWW, а также рассматривает все последние изменения в этой области. В книгу включены главы о новом стандарте безопасности IP и протоколе IP следующего поколения, известном как IPng или IPv6. Рисунки и таблицы наглядно показывают влияние средств безопасности IP и IPng на существующие сетевые среды.

Издание содержит следующие дополнительные разделы:

• Безопасность IP и IPv6

• Описание средств WWW, новостей Интернета и приложений для работы с gopher

• Подробное описание серверов имен доменов (DNS), маски подсети и бесклассовой маршрутизации в Интернете

• Таблицы и протоколы маршрутизации

• Руководство по реализации средств безопасности для каждого из протоколов и приложений

• Примеры диалогов с новыми графическими инструментами

Новое издание бестселлера по TCP/IP станет незаменимым помощником для разработчиков сетей и приложений, для сетевых администраторов и конечных пользователей.

TCP/IP Архитектура, протоколы, реализация (включая IP версии 6 и IP Security) - читать онлайн бесплатно полную версию (весь текст целиком)

TCP/IP Архитектура, протоколы, реализация (включая IP версии 6 и IP Security) - читать книгу онлайн бесплатно, автор Сидни Фейт
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

21.6 Серверная программа TCP

Рассмотрим подробно пример серверной программы. Сервер предназначен для непрерывной работы. Он будет выполнять следующие действия:

1. Запрашивать у socket создание главного TCB и возвращать значение дескриптора socket, который будет идентифицировать этот TCB в последующих вызовах.

2. Вводить локальный адрес сервера socket в структуру данных программы.

3. Запрашивать связывание, при котором в TCB копируется локальный адрес socket.

4. Создавать очередь, которая сможет хранить сведения о пяти клиентах. Оставшиеся шаги повторяются многократно:

5. Ожидать запросов от клиентов. Когда появляется клиент, создавать для него новый TCB на основе копии главного TCB и записи в него адреса socket клиента и других параметров.

6. Создавать дочерний процесс для обслуживания клиента. Дочерний процесс будет наследовать новый TCB и обрабатывать все дальнейшие операции по связи с клиентом

(ожидать сообщений от клиента, записывать их и завершать работу).

Каждый шаг в программе объясняется в следующем разделе.

/* tcpserv.c

* Для запуска программ ввести "tcpserv". */

/* Сначала включить набор стандартных заголовочных файлов. */

#include

#include

#include

#include

#include

#include

main() {

int sockMain, sockClient, length, child;

struct sockaddr_in servAddr;

/* 1. Создать главный блок управления пересылкой. */

if ((sockMain = socket(AF_INET, SOCK_STREAM, 0)) < 0) {

perror("Сервер не может открыть главный socket.");

exit(1);

}

/* 2. Создать структуру данных для хранения локальных IP-адресов

* и портов, которые будут использованы. Предполагается прием

* клиентских соединений от любых локальных IP-адресов

* (INADDR_ANY). Поскольку данный сервер не применяет

* общеизвестный порт, установить port = 0. Это позволит

* связать вызов с присвоением порта серверу и записать

* порт в TCB. */

bzero((char *)&servAddr, sizeof(servAddr));

servAddr.sin_family = AF_INET;

servAddr.sin_addr.s_addr = htonl(INADDR_ANY);

servAddr.sin_port = 0;

/* 3. Связать запрос, выбор номера порта и

* запись его в TCB. */

if (bind(sockMain, &servAddr, sizeof(servAddr))) {

perror("Связывание сервера неудачно.");

exit(1);

}

/* Чтобы увидеть номер порта, следует использовать

* функцию getsockname(), чтобы скопировать порт в servAddr. */

length = sizeof(servAddr);

if (getsockname(sockMain, &servAddr, &length)) {

perror("Вызов getsockname неудачен.");

exit(1);

}

printf("СЕРВЕР: номер порта - %d\n", ntohs(servAddr.sin_port));

/* 4. Создать очередь для хранения пяти клиентов. */

listen(sockMain, 5);

/* 5. Ожидать клиента. При разрешении возвратить новый

* дескриптор socket, который должен использоваться клиентом. */

for(;;) {

if ((sockClient = accept(sockMain, 0, 0)) < 0) {

perror ("Неверный socket для клиента.");

exit(1);

}

/* 6. Создать дочерний процесс для обслуживания клиента. */

if ((child = fork()) < 0) {

perror("Ошибка создания дочернего процесса.");

exit(1);

} else if (child == 0) /* Это код для исполнения дочернего процесса. */

{

close(sockMain); /* Дочерний процесс неинтересен для sockMain.*/

childWork(sockClient);

close(sockClient);

exit(0);

}

/* 7. Это родительский процесс. Его более не интересует

* socket клиента, поскольку его обслуживание передано

* дочернему процессу. Родительский процесс закрывает свой элемент для

* socket клиента и переходит на цикл приема новых accept(). */

close(sockClient);

}

}

/* Дочерний процесс читает один поступивший буфер, распечатывает

* сообщение и завершается. */

#define BUFLEN 81

int childWork(sockClient)

int sockClient;

{

char buf[BUFLEN];

int msgLength;

/* 8. Опустошить буфер. Затем вывести recv для получения сообщения от клиента. */

bzero(buf, BUFLEN);

if ((msgLength = recv(sockClient, buf, BUFLEN, 0)) < 0) {

perror("Плохое получение дочерним процессом.");

exit(1);

}

printf ("SERVER: Socket для клиента - %d\n", sockClient);

printf ("SERVER: Длина сообщения - %d\n", msgLength);

printf ("SERVER: Сообщение: %s\n\n", buf);

}

21.6.1 Вызовы в серверной программе TCP

1. sockMain = socket (AF_INET, SOCK_STREAM, 0); Вызов socket имеет форму:

дескриптор_socket = socket(адрес_домена, тип_коммуникации, протокол)

Напомним, что интерфейс socket может использоваться для других видов коммуникаций, например XNS. AF_INET указывает на семейство адресов Интернета. SOCK_STREAM запрашивает socket TCP. Эта переменная должна иметь значение SOCK_DGRAM, чтобы создать socket UDP, a SOCK_RAW служит для непосредственного обращения к IP.

Не нужно явно определять никакую другую информацию протокола для TCP (или для UDP). Однако параметр protocol необходим для интерфейса с необработанными данными, а также для некоторых протоколов из других семейств, использующих socket.

2. struct sockaddr_in servAddr;

...

bzero((char *)&servAddr, sizeof(servAddr));

servAddr.sin_family = AF_INET;

servAddr.sin_addr.s_addr = htonl(INADDR_ANY);

servAddr.sin_port = 0;

Программная структура servAddr используется для хранения адресной информации сервера. Вызов bzero () инициализирует servAddr, помещая нули во все параметры. Первая переменная в структуре servAddr указывает, что остальная часть значений содержит данные семейства адресов Интернета.

Следующая переменная хранит локальный IP-адрес сервера. Например, если сервер подключен к локальной сети Ethernet и к сети X.25, может потребоваться ограничить доступ клиентов через интерфейс Ethernet. В данной программе об этом можно не беспокоится. INADDR_ANY означает, что клиенты могут соединяться через любой интерфейс.

Функция htonl () имеет полное название host-to-network-long. Она применяется для преобразования 32-разрядных целых чисел локального компьютера в формат Интернета для 32-разрядного адреса IP. Стандарты Интернета предполагают представление целых чисел с наиболее значимым байтом слева. Такой стиль именуется Big Endian (стиль "тупоконечников"). Некоторые компьютеры хранят данные, располагая слева менее значимые байты, т.е. в стиле Little Endian ("остроконечников"). Если локальный компьютер использует стиль Big Endian, htonl () не будет выполнять никакой работы.

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

3. bind(sockMain, &servAddr, sizeof(servAddr)); getsockname(sockMain, &servAddr, &length);

Вызов bind имеет форму:

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


Сидни Фейт читать все книги автора по порядку

Сидни Фейт - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




TCP/IP Архитектура, протоколы, реализация (включая IP версии 6 и IP Security) отзывы


Отзывы читателей о книге TCP/IP Архитектура, протоколы, реализация (включая IP версии 6 и IP Security), автор: Сидни Фейт. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x