Як було вказано вище, Інтернет-протокол IP взаємодіє, з одного боку, з протоколом більш високого рівня, від якого отримує дані для передачі по мережі або якому передає отримані дані, і з протоколами локальної комп'ютерної мережі, яким передаються упаковані дані для передачі або від яких приходять пакети даних.
Схему дій для передачі дейтаграммы від однієї прикладної програми до іншої можна проілюструвати таким чином (см. рис. 14).
Припустимо, що перенесення включатиме проходження одного проміжного шлюзу. Відправляюча прикладна програма готує свої дані і викликає свій локальний Internet -модуль для відправки цих даних як дейтаграммы, а як аргументи цього виклику передає адресу одержувача і інші параметри.
Модуль Internet готує заголовок дейтаграммы і стикує з ним дані. У заголовку дейтаграммы вказуються - версія протоколу IP, тип сервісу (висока достовірність, висока пропускна спроможність, мала затримка), час життя пакету, протокол верхнього рівня, що використовує передавані дані, адресу відправника, адреса одержувача та ін. параметри. Модуль Internet визначає локальну мережеву адресу, відповідну цій адресі Internet. В даному випадку це адреса шлюзу.
Модуль передає цю дейтаграмму і адресу в локальній мережі в розпорядження інтерфейсу локальної мережі.
Інтерфейс локальної мережі створює відповідний цій мережі заголовок і сполучає з ним дейтаграмму. Потім він передає по локальній мережі отриманий таким чином результат.
Дейтаграмма достигает хост-компьютер, играющий роль шлюза и расположенный в вершине сети. Интерфейс локальной сети отделяет этот заголовок и передает дейтаграмму на модуль Internet. Модуль Internet определяет из Internet адреса, что дейтаграмма должна быть направлена на хост-компьютер во второй сети. Модуль Internet определяет адрес хоста-получателя в локальной сети. Он обращается к интерфейсу локальной сети с тем, чтобы она переслала данную дейтаграмму по назначению.
Інтерфейс створює заголовок локальної мережі і сполучає з ним дейтаграмму, а потім результат направляє на хост-получатель. При необхідності (якщо максимальний розмір пакету в мережі менший, ніж розмір дейтаграммы) дейтаграмма може бути розбита на частини. Кожна частина забезпечується ідентифікатором, що дозволяє потім зібрати їх в єдине ціле. На хосте-получателе інтерфейс локальної мережі видаляє заголовок локальної мережі і передає те, що залишилося на Internet модуль.
Модуль Internet визначає, що дейтаграмма, що розглядається вище, призначена для прикладної програми на цей хосте. Модуль передає дані прикладній програмі у відповідь на системний виклик. Як результат цього виклику передаються адреса одержувача і інші параметри.
Рисунок 3.2 − Шлях передачі дейтаграми
З вищесказаного ясно, що одним з найважливіших понять IP -протокола являється Інтернет-адреса (IP -адрес).
Кожен комп'ютер в мережі TCP/IP має IP - адрес, що складається з номера мережі і номера вузла. Усе IP -адреса мають довжину 32 біта і використовуються в полях Адреса одержувача і Адреса відправника IP -пакетів (дейтаграмм). IP -адрес зазвичай записується у вигляді чотирьох чисел (октетів), що представляють значення кожного байта в десятковій формі, і розділених точками, наприклад, 192.10.24.100
Номер мережі може бути вибраний адміністратором довільно, або призначений за рекомендацією спеціального підрозділу Internet (Network Information Center, NIC), якщо мережа повинна працювати як складова частина Internet. Зазвичай провайдери послуг Internet отримують діапазони адрес у підрозділів NIC, а потім розподіляють їх між своїми абонентами.
Вузол може входити в декілька IP -сетей. В цьому випадку вузол повинен мати декілька IP -адресов, по числу мережевих зв'язків. Таким чином, IP -адрес характеризує не окремий комп'ютер або маршрутизатор, а одне мережеве з'єднання.
Ділення IP -адреса на полі номера мережі і номера вузла - гнучке, і межа між цими полями може встановлюватися дуже довільно. Яка частина адреси відноситься до номера мережі, а яка - до номера вузла, визначається значеннями перших бітів адреси.
1 байт | 2 байт | 3 байт | 4 байт | |||||
Класс A | № сети | № узла | ||||||
Класс B | № сети | № узла | ||||||
Класс C | № сети | № узла | ||||||
Класс D | Адрес группы широковещания (multicast) | |||||||
Класс E | Зарезервировано для будущего использования | |||||||
Структура IP -адресів.
З таблиці видно:
· Мережа класу A має номери в діапазоні 1 - 126. Під адресу мережі відводиться 1 байт, під адресу вузла - 3 байти.
· Мережа класу B має номери в діапазоні 128 - 191. Під адресу мережі відводиться 2 байти, під адресу вузла - 2 байти.
· Мережа класу C має номери в діапазоні 192 - 223. Під адресу мережі відводиться 3 байти, під адресу вузла - 1 байт.
· Адреса класу D означає особливу, групову адресу. Якщо в пакеті як адреса призначення вказана адреса класу D (перший октет має діапазон 224 - 239), то такий пакет повинні отримати усі вузли, яким присвоєна ця адреса.
· Адреси з першим октетом в діапазоні 240 - 247 зарезервовані для майбутнього застосування.
У протоколі IP існує декілька угод про особливу інтерпретацію IP -адресов:
· Адреса 0.0.0.0 визначає адреса вузла, який згенерував пакет.
· IP -адрес з нульовим номером мережі означають поточну мережу. Ці адреси дозволяють спілкуватися хостам власної мережі, не знаючи номера мережі, а знаючи тільки клас мережі.
· Адреса 255.255.255.255 використовується для широкомовної передачі в межах власної мережі (limited broadcast).
· IP -адрес з певним номером мережі і одиницями в номері вузла використовується для широкомовної передачі в межах певної мережі (broadcast).
· Адреса 127.0.0.1 зарезервований для організації зворотного зв'язку при тестуванні роботи програмного забезпечення вузла без реальної відправки пакету по мережі. Ця адреса має назву loopback.
Окрім IP -адресов, хосты ідентифікуються доменними (символьними) іменами, легшими для запам'ятовування і відбиваючими логічну структуризацію мережі і, часто, функціональне призначення того або іншого хоста. Домен - це безліч хостов, об'єднаних в логічну групу. Доменне ім'я складається з символьних полів, розділених точками.
Для відображення доменного імені на IP -адрес використовується DNS (Domain Name System) - доменна служба імен. DNS - це розподілена база даних, підтримувальна ієрархічну систему імен для ідентифікації вузлів в мережі Internet. Служба DNS призначена для автоматичного пошуку IP -адреса по відомому символьному імені вузла. Специфікація DNS визначається стандартами RFC 1034 і 1035. DNS вимагає статичної конфігурації своїх таблиць, що відображують імена комп'ютерів в IP -адрес.
Протокол DNS є службовим протоколом прикладного рівня. Цей протокол несиметричний - в нім визначені DNS -серверы і DNS -клиенты. DNS -серверы зберігають частину розподіленої бази даних про відповідність символьних імен і IP -адресов. Ця база даних розподілена по адміністративних доменах мережі Internet. Клієнти сервера DNS знають IP -адрес сервера DNS свого адміністративного домена і по протоколу UDP передають запит, в якому повідомляють відоме символьне ім'я і просять повернути відповідний йому IP -адрес.
• Якщо дані про запитану відповідність зберігаються в базі цього DNS -сервера, то він відразу посилає відповідь клієнтові, якщо ж немає - те він посилає запит DNS -серверу іншого домена, який може сам обробити запит, або передати його іншому DNS -серверу. Усе DNS -серверы сполучені ієрархічно, відповідно до ієрархії доменів мережі Internet. Клієнт опитує ці сервери імен, поки не знайде потрібні відображення. Цей процес прискорюється через те, що сервери імен постійно кэшируют інформацію, що надається по запитах. Клієнтські комп'ютери можуть використовувати у своїй роботі IP -адреса декількох DNS -серверов, для підвищення надійності своєї роботи.
• База даних DNS має структуру дерева, званого доменним простором імен, в якому кожен домен (вузол дерева) має ім'я і може містити піддомени. Ім'я домена ідентифікує його положення в цій базі даних по відношенню до батьківського домена, причому точки в імені відділяють частини, відповідні вузлам домена.
• Корінь бази даних DNS управляється центром Internet Network Information Center. Домени верхнього рівня розділяються на дві групи - родові домени і домени держав. Для позначення країн використовуються трьохбуквені і двохбуквені абревіатури, а для різних типів організацій (родових імен) використовуються наступні абревіатури:
- com - комерційні організації (наприклад, microsoft.com);
- edu - освітні (наприклад, mit.edu);
- gov - урядові організації (наприклад, nsf.gov);
- org - некомерційні організації (наприклад, fidonet.org);
- net - організації, підтримувальні мережі (наприклад, nsf.net).
Повне ім'я домена подібно до повного імені файлу, складається з шляху від цього домена до вершини дерева. Крайнє праве поле означає домен верхнього рівня, далі, справа наліво, слідують піддомени в порядку ієрархічної вкладеності, крайнє ліве поле означає ім'я хоста. Наприклад, ім'я abcdef.hotmail.ru означає - хост abcdef знаходиться в домені hotmail, який у свою чергу знаходиться в домені ru.
Протокол TCP.
Як вже було сказано, протокол TCP є протоколом транспортного рівня. Він призначений для встановлення надійних прямих з'єднань між процесами в багатомережевій системі. Як було вказано раніше, протокол IP забезпечує передачу незалежних пакетів даних (дейтаграмм). При цьому в самому протоколі відсутні засоби забезпечення надійності з'єднань. Таким чином, з використанням Інтернет-протоколу неможливо відстежити втрату якої-небудь дейтаграммы. Це - завдання протоколу TCP.
Основні дії протоколу TCP:
Базова передача даних
Протокол TCP здатний передавати безперервні потоки октетів між своїми клієнтами в обох напрямах, пакуючи деяку кількість октетів в сегменти для передачі через системи Internet. У загальному випадку протоколи TCP вирішують на власний розсуд, коли проводити блокування і передачу даних.
Іноді користувачам буває необхідно переконатися в тому, що усі дані, передані ними протоколу TCP, вже відправлені. Для цієї мети визначена функція проштовхування (push). Щоб переконатися в тому, що дані, відправлені протоколу TCP, дійсно передані, відправник вказує, що їх слід проштовхнути до одержувача.
Проштовхування призводить до того, що програми протоколу TCP відразу здійснюють відправлення і, відповідно, отримання даних, що залишаються. Правильно здійснене проштовхування може бути невидимо для одержувача, а сама функція проштовхування може не мати маркера межі запису.
Достовірність
Протокол TCP повинен мати захист від руйнування даних, втрати, дублювання і порушення черговості отримання, що викликаються комунікаційною системою Internet. Це досягається привласненням чергового номера кожному передаваному сегменту, а також вимогою підтвердження (ACK) від програми TCP, що приймає дані. Якщо підтвердження не отримано протягом контрольного інтервалу часу, то дані посилаються повторно. З боку одержувача номера черги використовуються для відновлення черговості сегментів, які можуть бути отримані в неправильному порядку, а також для обмеження можливості появи дублікатів.
Ушкодження фіксуються за допомогою додавання до кожного передаваного сегменту контрольної суми, перевірки її при отриманні і наступній ліквідації дефектних сегментів.
До тих пір, поки програми протоколу TCP продовжують функціонувати коректно, а система Internet не розвалилася повністю на складові частини, помилки пересилки не впливатимуть на правильне отримання даних. Протокол TCP захищає від помилок комунікаційної системи Internet.
Управління потоком
Протокол TCP дає засоби одержувачеві управляти кількістю даних, посиланих йому відправником. Це досягається поверненням так званого "вікна" (window) разом з кожним підтвердженням, яке вказує діапазон прийнятних номерів, що йдуть за номером останнього успішно прийнятого сегменту. Вікно визначає кількість октетів, яку відправник може послати до отримання подальших вказівок.
Розподіл каналів
Щоб дозволити на окремо взятому комп'ютері багатьом процесам одночасно використовувати комунікаційні можливості рівня TCP, протокол TCP надає на кожному хост-компьютере набір адрес або портів. Разом з адресами мереж і хост-комп’ютеров на комунікаційному рівні Internet вони утворюють сокет (socket - роз'їм).
Кожне з'єднання унікальним чином ідентифікується парою сокетів. Таким чином, будь-який сокет може одночасно використовуватися в багатьох з'єднаннях.
Співвідношення портів і процесів здійснюється кожним хост-компьютером самостійно. Проте часто використовувані процеси зв'язуються з фіксованими документованими сокетами (HTTP - порт 80, FTP - 21 і так далі).
Цей сервіс можна згодом використовувати через відомі адреси. Установка і налаштування адрес портів для інших процесів може включати динамічніші механізми.
Робота із з'єднаннями
Механізми управління потоком і забезпечення достовірності, описані вище, вимагають, щоб програми протоколу TCP ініціалізували і підтримували певну інформацію про стан кожного потоку даних. Набір такої інформації, що включає сокети, номери черги, розміри вікон, називається з'єднанням. Кожне з'єднання унікальним чином ідентифікується парою сокетів на двох кінцях.
Якщо два процеси бажають обмінюватися інформацією, відповідні програми протоколу TCP повинні спершу встановити з'єднання (на кожній стороні ініціалізувати інформацію про статус). Після закінчення обміну інформацією з'єднання має бути розірване або закрите, щоб звільнити ресурси для надання іншим користувачам.
Оскільки з'єднання повинні встановлюватися між ненадійними хост-комп’ютерами і через ненадійну комунікаційну систему Internet, то щоб уникнути помилкової ініціалізації з'єднань використовується механізм підтвердження зв'язку з хронометрованими номерами черги.
Пріоритет і безпека
Користувачі протоколу TCP можуть зажадати для свого з'єднання пріоритет і безпеку. Передбачені характеристики з'єднань, що приймаються за умовчанням, коли такі параметри не вимагаються.
Для забезпечення усіх цих можливостей на рівні TCP до даних, переданих від протоколу верхнього рівня, або від прикладної програми, додається заголовок, в якому вказується порт відправника, порт одержувача (по 16 біт), номер посланого пакету, номер підтвердженого пакету, параметри, що управляють, і так далі. Сформований пакет передається Інтернет-протоколу, який додає свою інформацію, що управляє. При прийомі даних інформація витягається в зворотному порядку.
Протокол HTTP.
Протокол HTTP (Hypertext transfer protocol - протокол передачі гіпертексту) є представником протоколів Інтернет прикладного рівня. Цей протокол працює відповідно до моделі клієнт/сервер. При виконанні роботи два мережеві процеси працюють разом, пересилаючи один одному інформацію. При цьому один процес, що є ініціатором діалогу, є клієнтом. Процес, очікуючий запиту і оброблювальний запити клієнтів, є сервером.
Протокол HTTP - це протокол запитів/відповідей. Клієнт посилає запит серверу, який його обробляє і посилає відповідь.HTTP -соединение зазвичай відбувається шляхом TCP/IP -соединений. Заданий за умовчанням порт - 80, хоча може використовуватися і інші порти.
Таким чином, відповідно до моделі стека протоколів Інтернету, прикладна програма, що використовує протокол HTTP, повинна за певними правилами (вони будуть розглянуті нижче) сформувати запит, по протоколу TCP встановити з'єднання, передати серверу сформований запит, отримати по протоколу TCP відповідь, оформлену за правилами протоколу HTTP.
Оскільки протокол HTTP і інші протоколи прикладного рівня використовують поняття URI (Uniform Resource Identifier - універсальний ідентифікатор ресурсу), розглянемо детальніше, як він визначається. Заздалегідь помітимо, що нині поняття URI практично співпадає з поняттям URL (Universal Resource Locator -универсальный адреса ресурсу).
URI складається з наступних частин: тип, ім'я вузла (домена), номер порту,
шлях, рядок запиту і ідентифікатор фрагмента.
Тип - є протокол (це може бути також ftp, https).
Вузол - ідентифікує машину. Це може бути або доменне ім'я, або IP -адрес.
Порт - номер порту, по якому проходить робота протоколу. Може не вказуватися. У такому разі мається на увазі стандартний порт, використовуваний протоколом (80 для HTTP).
Шлях - є місце розташування запитаного ресурсу. Залежно від налаштувань цей шлях може відповідати деякому шляху на сервері, але може і не відповідати.
Запит - у разі використання сценаріїв в рядку запиту можуть передаватися параметри в сценарій. Є набір пар ім'я/значення. Пари розділяються знаком &, а ім'я і значення розділяються знаком =.
Фрагмент - вказує на певний розділ ресурсу.
URI може не містити рядка запиту і ідентифікатора фрагмента.
Для URI не має значення регістр букв (нечутливий до регістра).
URI може бути абсолютним і відносним. Абсолютний URI завжди починається з типу протоколу. Приклад абсолютного URI показаний вище. Відносний URI, без імені протоколу або номера порту, може містити повні шляхи (завжди вказуються з кореневого каталогу і починаються зі знаку слеша /) або відносні шляхи (починаються з символа, отличного от /).