
- •Лабораторна робота № 15 взаємодія процесів в ос unix за допомогою іменованих каналів
- •1 Мета роботи
- •2 Основні положення
- •2.1 Способи забезпечення взаємодії процесів в ос unix
- •2.2 Взаємодія поміж процесами за допомогою іменованих каналів
- •2.3 Функції та системні виклики ос unix,
- •3 Контрольні запитання
- •4 Домашнє завдання
- •5 Лабораторне завдання
- •6 Зміст протоколу
- •7 Список рекомендованої літератури
- •Взаємодія процесів в ос unix за допомогою інтерфейсу сокетів
- •1 Мета роботи
- •2 Основні положення
- •2.1 Загальні вимоги до міжпроцесної взаємодії
- •2.2 Програмний інтерфейс сокетів
- •2.3 Приклад використання сокета
- •3 Контрольні запитання
- •4 Домашнє завдання
- •5 Лабораторне завдання
- •6 Зміст протоколу
- •3 Контрольні запитання
- •4 Домашнє завдання
- •5 Лабораторне завдання
- •6 Зміст протоколу
- •7 Список рекомендованої літератури
- •Лабораторна робота № 18
- •2.1 Утиліта ping
- •2.2 Програма traceroute
- •2.3 Програма ttcp
- •2.4 Програма tcpdump
- •2.5 Програма netstat
- •3 Контрольні запитання
- •4 Домашнє завдання
- •5 Лабораторне завдання
- •6 Зміст протоколу
- •7 Список рекомендованої літератури
- •Створення системи обліку трафіка
- •1 Мета роботи
- •2 Ключові положення
- •2.1 Принципи обліку трафіка
- •2.2 Мова програмування Shell
- •2.2.1 Структура команд
- •2.2.2. Структура команд
- •2.2.3 Групування команд
- •2.2.4 Переспрямовування команд
- •2.3 Брандмауер firewall
- •2.3.1 Можливості ipfw
- •2.3.2 Формат правил ipfw
- •2.4 Мова програмування awk
- •3 Контрольні запитання
- •4 Домашнє завдання
- •5 Лабораторне завдання
- •6 Зміст протоколу
- •7 Список рекомендованої літератури
- •Тексти програм serverfifo та clientfifo
- •Тексти програм socketserver та socketclient
- •Тексти програм servertcp та clienttcp
- •Тексти програм simpletcpserv та simpletcpclient
- •Лістинг програми обліку трафіку
6 Зміст протоколу
Протокол лабораторної роботи “Взаємодія процесів в ОС UNIX за допомогою інтерфейсу сокетів” оформлюється в робочому зошиті в послідовності, котра визначається стандартом підприємства з основ лабораторного практикуму. Протокол має містити назву лабораторної роботи та її мету; результати виконання домашнього завдання згідно з вимогами пункту 1 домашнього завдання, тексти програм socketserver та socketclient з коментарями, результати виконання пунктів 6...11 лабораторного завдання, висновки.
7 Список рекомендованої літератури
1 Робачевский А. М. Операционная система UNIX. — СПб.: БХВ-Петербург, 2002.
2 Ивановский С. Операционная система UNIX. — М.: Познавательная книга плюс, 2000.
3 Дегтярев Е. К. Введение в UNIX. — М.: МП "Память", 1991.
4 http://www.freebsd.org.ru
5 http://www.anriintern.com/computer/freebsd/
6 http://www.linuxrsp.ru/freebsd/
Лабораторна робота № 17
ПРОГРАМНА РЕАЛІЗАЦІЯ ПРОТОКОЛІВ ТСР/ІР
1 Мета роботи
Метою роботи є поглиблення знань щодо взаємодії додатків за протоколами ТСР/ІР та набуття навичок написання, налагодження та ведення парних програм додатків клієнт-сервер, які підтримують протоколи ТСР/ІР.
2 Основні положення
Взаємодія поміж віддаленими процесами передбачає передавання даних по мережі, тому використовуваним комунікаційним доменом сокетів є домен АF_ІNET. Згідно зі схемою адресування протоколів ТСР/ІР комунікаційний вузол однозначно ідентифікується двома значеннями: адресою хоста (ІР-адреса) та адресою процесу (адреса порту). Це відбиває структура sockaddr_in, яка є конкретним видом загальної структури адреси сокета sockaddr. Структура sockaddr_in має вигляд
struct sockaddr_in {
short sin family; Комунікаційний домен — АF_INET
u_short sin_port; номер порту
struct in_addr sin_addr; IP-адреса хоста
char sin_sero[8];
};
Адреса порту повинна бути відома клієнтові та серверові. Транспортний протокол, використовуваний у мережі найчастіше — це ТСР, він передбачає попереднє з’єднання клієнта з сервером перед передаванням прикладних даних. Сервер зв’язується з портом, номер якого відомий клієнтам за допомогою системного виклику bind(2), та повідомлює про готовність до приймання запитань за допомогою системного виклику listen(2). При отриманні запиту він за допомогою функції accept(2) створює новий socket, який обслуговує обмін даними поміж клієнтом та сервером. Для того щоб сервер міг продовжувати опрацьовувати запити, що вони надходять, він породжує окремий процес на кожний запит, котрий надійшов. Дочірній процес, своєю чергою, приймає повідомлення від клієнта за допомогою системного виклику recv(2) та передає їх назад до клієнта за допомогою системного виклику send(2). Клієнт не виконує сполучування, тому що йому є байдуже, яку адресу матиме його комунікаційний вузол. Цю операцію виконує ОС, яка обирає вільну адресу порту та встановлену адресу хоста. Далі клієнт спрямовує запит на встановлювання з'єднання connect(2), зазначаючи ІР-адресу та номер порту клієнта. Після встановлення з’єднання (“потрійне ручкання”) клієнт передає повідомлення за допомогою send(2), приймає від серверу відповідь за допомогою recv(2) та виводить його на екран. На рис. 2.1 подано схему встановлення зв’язку та передавання даних поміж клієнтом та сервером за протоколом TCP/IP.
Рисунок 2.1 — Схема встановлення з’вязку та передавання даних
поміж клієнтом та сервером
Системний виклик АРІ-сокетів, який забезпечує встановлення з’єднання за протоколом ТСР, connet(2), має вигляд
#include <sys/socket.h>
int connect (s, const struct sockaddr *peer, int peer_lеn);
У разі помилки функція повертає значення -1. Параметр s — дескриптор сокета, який повернув виклик socket(2). Параметр peer вказує на структуру, в якій зберігається адреса віддаленого хоста. Для домена AF_INET — це структура типу sockaddr_in. Параметр peer_lеn вміщує розмір структури у байтах, на яку вказує peer. Після встановлення з’єднання дані можна передавати, окрім системних викликів recv(2) та send(2), за допомогою викликів read(2) та write(2). Системні виклики recv(2) та send(2) мають вигляд
#include <sys/socket.h>
int recv (s, void *buf, size_t len, int flags);
int send (s, const void *buf, size_t len, int flags);
Значення, що повертається, є кількість прийнятих чи то переданих байтів у разі успіху, або -1 —у разі помилки.
У наведених далі програмах ТСР-сервера та ТСР-клієнта використовується ще кілька АРІ-функцій, які автоматизують процес написання програми.
Функція gethostbyname(3N) транслює доменне ім’я до його ІР-адреси.
Функція getservbynamе(3N) робить обернене перетворювання. Функція htonl(3N) зводить до потрібного порядок слідування байтів у структурах даних, які можуть відрізнятись для хосту та мережі.
Функція inet_ntoa(3N) перетворює ІР-адреси та їхні складові частини на звичну форму, наприклад 127.0.0.1. Більш докладно про ці функції можна дізнатися в електронному довідникові man(1).
Зупинімось лише на таких обставинах. Якщо додаток підтримує протоколи ТСР/ІР, то така інформація, як адреса джерела та приймача, номери портів, довжина пакетів тощо — це цілі числа; необхідно, щоби клієнт та сервер інтерпретували їх однаково. Аби забезпечити взаємодію комп’ютерів, які працюють на різних мікропроцесорах з різними архітектурами, всі цілі дані, що належать до протоколів, треба передавати в мережному порядку байтів, який називається “тупокінцевим”. Він збігається з порядком адресування байтів, притаманним, приміром, мікропроцесорам фірми Motorola: старший байт у багатобайтових даних адресується молодшою адресою, а молодший — старшою (big endian). На відміну від такого порядку, мікропроцесори фірми Intel адресують багатобайтові дані у “гострокінцевому” порядку: старший байт — старшою адресою, молодший — молодшою (little endian). Системні виклики htonl(2) та htons(2) повертають ціле число в мережному порядку. Літери l та s наприкінці імен функцій означають long (довге) та short (коротке). l-функції призначено для перетворювання довгих полів у заголовках протоколу, а s-функції — коротких.
#include <netinet/in.h>
uint 32_t htonl(uint 32_t host 32);
uint 16 _t htons(uint 32_t host 16);
Обидві функції повертають ціле число в мережному порядку.
Функції ntohl та ntohs виконують зворотне перетворювання:
uint 32_t ntohl (uint 32_t network 32);
uint 16_t ntohs (uint 16_t network 16);
Обидві функції повертають ціле число у машинному порядку.
При виконанні цих функцій на комп’ютерах з “тупокінцевим” порядком ці функції жодного перетворювання не здійснюють.
Функції дозволу імен gethostbyname(2) та getservbyname(2) повертають значення, подані в мережному порядку.
Наведені в додатку В тексти мережних програм повністю відповідають рис. 2.1 та підтримують протокол ТСР/ІР.