русс | укр

Мови програмуванняВідео уроки php mysqlПаскальСіАсемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование


Linux Unix Алгоритмічні мови Архітектура мікроконтролерів Введення в розробку розподілених інформаційних систем Дискретна математика Інформаційне обслуговування користувачів Інформація та моделювання в управлінні виробництвом Комп'ютерна графіка Лекції


Основні положення


Дата додавання: 2014-11-28; переглядів: 879.


 

Взаємодія поміж віддаленими процесами передбачає передавання даних по мережі, тому використовуваним комунікаційним доменом сокетів є домен А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 та підтримують протокол ТСР/ІР.

 

Контрольні запитання

 

1 Які особливості має програмний інтерфейс сокетів, які підтримують протоколи ТСР/ІР?

2 За яким алгоритмом встановлюється з’єднання поміж клієнтом та сервером?

3 Які функції АРІ використовуються для встановлення з’єднання та обміну даними з боку сервера?

4 Які функції АРІ використовуються для встановлення з’єднання та обміну даними з боку клієнта?

5 Як забезпечується програмно взаємодія комп’ютерів з різними архітектурами в мережі?

6 Які АРІ-функції забезпечують мережний порядок байтів при роботі на комп’ютерах з різною архітектурою в мережі?

7 Які АРІ-функції забезпечують транслювання доменного імені хоста до його ІР-адреси й назад?

8 Які АРІ-функції забезпечують перетворювання ІР-адрес та їхніх складових частин відповідно до звичної нотації?

 


<== попередня лекція | наступна лекція ==>
Приклад використання сокета | Зміст протоколу


Онлайн система числення Калькулятор онлайн звичайний Науковий калькулятор онлайн