
- •1. Профили протоколов internet
- •1.1. Определения
- •1.2. Тракт телеобработки данных (тод).
- •1.3 Функции тракта тод
- •2. Базовые профили протоколов internet и семиуровневая модель открытых систем
- •2.1 Наборы функций тракта тод
- •2.2 Тракт тод и модель osi
- •2.2 Модель osi и Internet
- •2.4 Базовые профили протоколов Internet
- •3.Канальные протоколы распределенных сетей
- •3.1 Технология Ethernet
- •3.2 Форматы кадров Ethernet
- •3.3 Схема протокола логического контроля соединения (llc)
- •4. Протокол arp и rarp
- •4.1 Протокол arp
- •4.3 Формат сообщения arp
- •4.4. Порядок преобразования адресов в arp- таблице
- •4.5 Протокол rarp
- •5. Адресация в internet
- •5.1 Базовая адресация в Internet.
- •5.2 Имена сетей и узлов.
- •5.3. Подсети
- •5.4 Маска подсети
- •6. Заголовок дейтаграммы iPv4
- •7. Заголовок дейтаграммы ip V.6
- •8 Функции сетевой маршрутизации
- •8.1 Таблицы маршрутизации.
- •8.2. Прямая ip-маршрутизация.
- •8.3. Косвенная маршрутизация
- •8.4 Формирование таблиц ip-маршрутизации
- •9. Маршрутизация протокола ip
- •9.1. Сетевая маршрутизация
- •9.2 Протокол rip
- •10. Протокол ospf
- •11. Заголовок и протокол udp
- •11.1 Протокол udp
- •12. Протокол tcp
- •12.1 Формат заголовка тср
- •12.2. Протокол tcp. Установление соединения
- •12.3 Протокол tcp. Передача данных.
- •12.4 Механизм окна tcp. Управление потоком данных
- •13. Сокеты
- •13.1 Основы сокетов
- •13.2 Серверы
- •13.3 Локальные сокеты
- •13.4 Internet-Domain сокеты
- •13.5 Пары сокетов
- •14.1. Концепция Word Weide Web (Web или www) .
- •14.2 Гипертексты
- •14.3 Html
- •14.5 Url (Universal Resource Locator).
- •14.6 Протокол http
13.4 Internet-Domain сокеты
Cокеты UNIX-domain использоваться только для взаимодействия двух процессов только на одном компьютере. Сокеты Internet, используются для соединения нескольких процессов на различных машинах, подключенных к сети.
Для соединения процессов через Интернет сокеты используют пространство имен Интернет указываемое с помощью PF_INET . Большинство протоколов являются TCP/IP . Интернет протокол ( IP), протокол нижнего уровня, отправляет пакеты через Интернет, разбивая на меньшие пакеты, в случае необходимости. Он гарантирует только доставку "лучшего усилия", так что пакеты могут быть потеряны или переупорядочены во время транспортировки. Каждый компьютер имеет IP адрес. Протокол управления передачей ( TCP ), который следует за IP протоколом, обеспечивает надежное подключение. Это позволяет установить между компьютерами соединение, наподобие телефонного и гарантирует доставку данных в правильном порядке.
Интернет адрес сокета состоит из двух частей: номера компьютера и номера порта. Эта информация хранится в переменной структуры sockaddr_in . Для идентификации того, что это адрес Интернет пространства имен, необходимо установить поле sin_family в AF_INET . В поле Sin_addr хранится Интернет адрес компьютера, как 32-разрядное целое число IP . Каждому сокету на одном компьютере присваивается номер порта. Поскольку различные машины сохраняют многобайтовые значения в различном порядке байта, используют htons , чтобы преобразовать число порта к сетевому порядку байтов.
Команда gethostbyname преобразовывает удобочитаемые имена хоста, числа со стандартной точечной нотацией (типа 10.0.0.1) или DNS имена (такие как www.codesourcery.com) в 32-разрядные IP адреса. В качестве результата возвращается указатель на структуру struct hostent ; в поле h_addr хранится IP адрес главного компьютера.
Листинг 13.3 иллюстрирует использование Internet-domain сокетов. Программа получает домашнюю страницу от Web сервера, имя хоста которого определено в командной строке.
Листинг 13.3 (socket-inet.c)
#include <stdlib.h>
#include <stdio.h>
#include <netinet/in.h>
#include <netdb.h>
#include <sys/socket.h>
#include <unistd.h>
#include <string.h>
/* Печать содержимого домашней страницы.
* В качестве результата передать флаг успешного завершения процесса.*/
void get_home_page (int socket_fd)
{
char buffer[10000];
ssize_t number_characters_read;
/* Передать команду HTTP GET для домашней страницы */
sprintf (buffer, "GET /\n");
write (socket_fd, buffer, strlen (buffer));
/* Читать данные из сокета. Не все данные могут быть возвращены одновременно,
* продолжать попытку до завершения процесса */
while (1) {
number_characters_read = read (socket_fd, buffer, 10000);
if (number_characters_read == 0)
return;
/* Записать данные в стандартный вывод */
fwrite (buffer, sizeof (char), number_characters_read, stdout);
}
}
int main (int argc, char* const argv[])
{
int socket_fd;
struct sockaddr_in name;
struct hostent* hostinfo;
/* Создать сокет */
socket_fd = socket (PF_INET, SOCK_STREAM, 0);
/* Сохранить адрес сервера в адрессе сокета */
name.sin_family = AF_INET;
/* Преобразовать строку в число */
hostinfo = gethostbyname (argv[1]);
if (hostinfo == NULL)
return 1;
else
name.sin_addr = *((struct in_addr *) hostinfo->h_addr);
/* Web сервер использует 80 порт */
name.sin_port = htons (80);
/* Установить соединение с Web сервером */
if (connect (socket_fd, &name, sizeof (struct sockaddr_in)) == -1) {
perror ("connect");
return 1;
}
/* Получить домашнюю страницу */
get_home_page (socket_fd);
return 0;
}
Имя хоста Web сервера задается в командно строке (без "http: //"). Команда gethostbyname преобразовывает имя хоста в числовой IP адрес и затем подключает поток (TCP) сокета к порту 80 на главном компьютере. Серверы используют Гипертекстовый Транспортный Протокол ( HTTP ), поэтому передается команда HTTP GET , сервер в качестве ответа передает текст домашней страницы.
Для отображения страницы www.codesourcery.com, необходимо задать следующую команду
% ./socket-inet www.codesourcery.com
<html>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
...