- •Конспект лекций по курсу: «Сетевые информационные системы»
- •1. Сокеты
- •Вызовы для передачи и получения информации
- •Основные элементы Клиент-серверного Приложения.
- •Сетевые технологии
- •Адресация (требования)
- •3 Схемы адресации хостов
- •Модель взаимодействия открытых систем. Osi / iso
- •3 Типа канала :
- •Формула Найквиста
- •Преобразование фурье
1. Сокеты
Сокет -коммуникационный узел (коммуникационный домен) – набор х-к взаимодействия TCP/IP протокол.
Типы сокетов:
Сокет датаграмм (доступ к протоколу UDP)
Сокет потока(TCP)-надежная передача потока байт без сохранения границ сообщения
Сокет пакетов- надежная послед. Передача данных с сохранением границ сообщения
Сокет низкого уровня(«Сырые» сокеты) –непосредственный доступ к коммуникационному протоколу
# include<sys/types.h>
# include<sys/types.h>
Int socket (int domain, int type, int protocol)
Коммуникационный домен
AF_UNIX –межпроцессорное взаимодействие в рамках одного хоста
D a
R m
E i
S l
S y
AF_NET – удаленные системы
PF_... PF=AF (PF – protocol family)
Тип сокета:
SOCK_DGRAM в UNIX, INET
(использует UDP)
SOCK_STREAM (TCP) в UNIX, INET
SOCK_RAW (IP) только в INET
Для того чтобы создать канал передачи информации, на каждый хост необходимо установить параметры:
Коммутационный протокол
Локальный адрес хоста IP
Локальный процесс Порты
Удаленный адрес хоста IP
Удаленный процесс Порт
Для связывания сокета с его параметрами:
Системный вызов: int bind (int socfd, struct sockaddr * lockaddr, int addlen);
struct sockaddr { struct sockaddr_un {
u_short sa_family; short sun_family;
char sa_data; char sun_path[108];
}; };
структура данных общего вида UNIX
struct sockaddr_in {
short sin_family;
u_short sin_port;
struct in_addr sin_addr;
char sin_zero[0];
};
INET
int connect (int sockfd, struct sockaddr* servaddr, int addrlen);
Где sockfd дескриптор сокета клиента
TCP – с предварительной доставкой соединения и надёжной передачей сообщений. Чтобы передавать информацию по TCP, используется системный вызов connect.
Для UDP connect использовать не надо.
В UDP отправка сообщения осуществляется в никуда.
Системный вызов со стороны сервера:
Серверный системный вызов:
int listen (int sockfd, int bscklog);
задание параметра очереди соединения
int accept (int sockfd, ctuct sockaddr* claddr, int* addrlen);
предназначен для выполнения большого количества соединений
Создаёт новый socket, характеристики которого не отличаются от сокета указанного в качестве первого параметра.
Последовательность системных вызовов для сервера.
sockfd = socket (…);
bind (sockfd, … );
listen (sockfd, … );
for ( ; ; )
{
new sock = accept (sockfd, … );
if (fork == 0 )
{
close (sockfd);
…
exit(0);
}
else
close(new sockfd);
}
Вызовы для передачи и получения информации
int send (int sockfd, const char* msg, int len, int flags);
int sendto (int sockfd, const char* msg, int len, int flags,
const struct sockaddr* toaddr, int tolen);
1, 2. Флаги: MSG_OOB, MSG_PEEK.
Данный системный вызов используется только для сокетов типа socket stream, реализующих протокол TCP.
int recv (int sockfd, char* buf, int len, int flags);
int recvfrom (int sockfd, char* buf, int len, int flags,
struct sockaddr* fromaddr, int fromlen);
2 порядка следования байт:
─ сетевой,
─ серверный.
21429635 ─ 0х 0С С5 57 В3
Адрес 00 01 02 03 обратный
Данные 0С С5 57 В3 сетевой
В3 57 С5 0С прямой (серверный порядок следования байт)
Для преобразования номеров портов используются следующие функции:
htons – host → net для short int
htonl – host → net для long int
ntohs – net → host для short int
ntohl – net → host для long int
Функции преобразования IP-адресов:
inet_aton (char* addr, struct sockaddr_in, sin_addr* addr_in);
inet_ntoa ( - || - ) преобразует двоичный IP-адрес в символьное представление.
gethostbyname (“www.mail.ru”) - Получать IP-адрес на основе доменного имени.
Системные вызовы:
write (int fd, const void x buf, size_t const);
read (int fd, const void x buf, size_t const).