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


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

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

Здесь можно скачать бесплатно "Сидни Фейт - TCP/IP Архитектура, протоколы, реализация (включая IP версии 6 и IP Security)" в формате fb2, epub, txt, doc, pdf. Жанр: Программное обеспечение, издательство Лори, год 2000. Так же Вы можете читать книгу онлайн без регистрации и SMS на сайте LibFox.Ru (ЛибФокс) или прочесть описание и ознакомиться с отзывами.
Сидни Фейт - TCP/IP Архитектура, протоколы, реализация (включая IP версии 6 и IP Security)
Рейтинг:
Название:
TCP/IP Архитектура, протоколы, реализация (включая IP версии 6 и IP Security)
Автор:
Издательство:
Лори
Год:
2000
ISBN:
5-85582-072-6
Скачать:

99Пожалуйста дождитесь своей очереди, идёт подготовка вашей ссылки для скачивания...

Скачивание начинается... Если скачивание не началось автоматически, пожалуйста нажмите на эту ссылку.

Вы автор?
Жалоба
Все книги на сайте размещаются его пользователями. Приносим свои глубочайшие извинения, если Ваша книга была опубликована без Вашего на то согласия.
Напишите нам, и мы в срочном порядке примем меры.

Как получить книгу?
Оплатили, но не знаете что делать дальше? Инструкция.

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

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



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

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

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

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

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

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

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

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

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

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






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

Ниже приведен листинг для более простого сервера. К этому серверу клиенты также могут обращаться через рассмотренную выше программу tcpclient.

/* tcpsimp.c

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


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

#include <sys/types.h>

#include <sys/socket.h>

#include <stdio.h>

#include <netinet/in.h>

#include <netdb.h>

#include <errno.h>


main() {

 int sockMain, sockClient, length, child;

 struct sockaddr_in servAddr;


 /* 1. Создать главный socket. */

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

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

  exit(1);

 }


 /* 2. Ввести информацию в структуру данных, используемую для

  * хранения локального IP-адреса и порта, "sin" в именах

  * переменных — это сокращение от "socket internet". */

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

 servAddr.sin_family = AF_INET;

 servAddr.sin_addr.s_addr = htonl(INADDR_ANY);

 servAddr.sin_port = 0;


 /* 3. Вызвать bind, которая запишет используемый номер порта

  * в servAddr. */

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

  perror("Вызов bind от сервера неудачен.");

  exit(1);

 }


 /* 4. Чтобы узнать номер порта, следует использовать функцию

  * getsockname() для копирования порта в servAddr. */

 length = sizeof(servAddr);

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

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

  exit(1);

 }

 printf ("SERVER: Номер порта %d\n", ntohs(servAddr.sin_port));


 /* 5. Установить очередь на пять клиентов.*/

 listen(sockMain, 5);


 /* 6. Ожидать поступления клиентов. Вызов accept возвратит

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

 for(;;) {

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

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

   exit(1);

  }


  /* 7. Обслужить клиента и закрыть соединение с ним. */

  doTask(sockClient);

  close(sockClient);

 }

}


/* Читать один поступивший буфер, распечатать некоторую информацию

 * и завершить работу. */

#define BUFLEN 81

int doTask(sockClient)

int sockClient;

{

 char buf[BUFLEN];

 int msgLength;


 /* 8. Опустошение буфера и вызов recv

 * для получения сообщения от клиента. */

 bzero(buf, BUFLEN);

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

  perror("Неверное получение." );

  exit(1);

 }

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

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

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

}

21.9 Интерфейс программирования socket для UDP

Мы познакомились с наиболее общим интерфейсом программирования TCP. Теперь рассмотрим программирование сервера и клиента UDP. На рис. 21.3 показана схема диалога UDP между клиентом и сервером. Вызовы socket() и bind() быстро выполняются и немедленно возвращают ответ. Вызов recvfrom предполагает режим блокирования по умолчанию, который можно изменить на неблокированный (т.е. асинхронный) режим.

Рис. 21.3. Типичные программные вызовы в socket UDP

21.10 Программа сервера UDP

Показанная ниже программа создает socket для UDP, связывает вызов с портом, а затем получает и распечатывает сообщения, которые посылаются на этот порт:

/* udpserv.c

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

 *

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

#include <sys/types.h>

#include <sys/socket.h>

#include <stdio.h>

#include <netinet/in.h>

#include <netdb.h>

#include <errno.h>

#define BUFLEN 81


main() {

 int sockMain, addrLength, msgLength;

 struct sockaddr_in servAddr, clientAddr;

 char buf[BUFLEN];


 /* 1. Создать socket для UDP. */

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

  perror("Сервер не может открыть socket для UDP.");

  exit(1);

 }


 /* 2. Ввести информацию в структуру данных, используемую для хранения локальных

  * IP-адресов и порта. Возложить на bind получение свободных портов. */

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

 servAddr.sin_family = AF_INET;

 servAddr.sin_addr.s_addr = htonl(INADDR_ANY);

 servAddr.sin_port = 0;


 /* 3. Вызвать bind, которая запишет номер используемого порта

  * в TCB. */

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

  perror("Вызов bind от сервера неудачен.");

  exit(1);

 }


 /* 4. Извлекаем номер порта и используем функцию

  * getsockname() для копирования порта в servAddr. */

 addrLength = sizeof(servAddr);

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

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

  exit(1);

 }

 printf("SERVER: Номер порта is %d\n", ntohs(servAddr.sin_port));


 /* 5. Бесконечный цикл ожидания сообщений от клиентов. */

 for (;;) {

  addrLength = sizeof(clientAddr);

  bzero(buf, BUFLEN);

  if ((msgLength = recvfrom(sockMain, buf, BUFLEN, 0, &clientAddr, &addrLength)) < 0) {

   perror("Плохой socket клиента.");

   exit(1);

  }


  /* 6. Распечатать клиентские IP-адрес и порт вместе с сообщением. */

  printf("SERVER: IP-адрес клиента: %s\n",

   inet_ntoa(clientAddr.sin_addr));

  printf("SERVER: Порт клиента: %d\n",

   ntohs(clientAddr.sin_port));

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

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

 }

}

21.10.1 Вызовы в серверной программе UDP

1. sockMain = socket(AF_NET, SOCK_DGRAM, 0);

Семейство адресов — снова Интернет.

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

servAddr.sin_family = AF_INET;

servAddr.sin_addr.s_addr = htonl(INADDR_ANY);

servAddr.sin_port = 0;

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

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

Как и прежде, bind получает порт для сервера и записывает значения в TCB. Конечно, по сравнению с TCP, UDP содержит очень мало информации.

4. getsockname(sockMain, &servAddr, &length);

Использовать getsockname, чтобы извлечь присвоенный socket порт.

5. msgLength = recvfrom(sockMain, buf, BUFLEN, 0, &clientAddr, &length);

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

recvfrom(дескриптор_socket, входной_буфер, длина_буфера, флаги, исходная_адресная_структура, указатель_на_длину_исходной_адресной_структуры)

Флаги позволяют вызывающей стороне просмотреть сообщение без его фактического получения. После возвращения исходная адресная структура заполняется IP-адресом и номером порта клиента. Необходим указатель на длину исходного адреса, поскольку она может быть изменена при вставке в поле фактического адреса клиента.

6. inet_ntoa(clientAddr.sin_addr);

Этот вызов преобразует 32-разрядный адрес Интернета клиента в знакомую нам нотацию этого адреса с точками и десятичными значениями.

21.11 Клиентская программа UDP

Клиент соединяется с сервером, посылает одно сообщение и закрывает соединение. При запуске программы конечный пользователь должен ввести имя хоста, порт сервера и отправляемое на сервер сообщение. Например:

udpclient plum.cs.yale.edu 2315 "Это сообщение."


/* udpclient.с

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

 * Далее нужно получить порт сервера.

 * Для запуска клиента ввести:

 * udpclient имя_хоста порт сообщение */

#include <sys/types.h>

#include <sys/socket.h>

#include <netinet/in.h>

#include <netdb.h>

#include <stdio.h>

#include <errno.h>


main(argc, argv)

 int argc;

 char *argv[]; /* Это вводимые пользователем аргументы. */

               /* argv[0] - имя программы. argv[1] указывает на имя хоста. */

               /* argv[2] ссылается на порт, */

               /* а argv [3] ссылается на текстовое сообщение. */


На Facebook В Твиттере В Instagram В Одноклассниках Мы Вконтакте
Подписывайтесь на наши страницы в социальных сетях.
Будьте в курсе последних книжных новинок, комментируйте, обсуждайте. Мы ждём Вас!

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

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


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

Все книги автора Сидни Фейт

Сидни Фейт - все книги автора в одном месте на сайте онлайн библиотеки LibFox.

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

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

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

А что Вы думаете о книге? Оставьте Ваш отзыв.