Як працює інтернет

Щоб краже зрозуміти, як працює інтернет, ми подивимось, що відбувається, коли Ви робите стандартну для тенет операцію – вказуєте браузерові на початкову сторінку цього документа на його домашній сторінці на сайті Проекту Документації Лінукс^1 . Адреса цієї сторінки: http://www.tldp.org/HOWTO/Unix-and-Internet-Fundamentals-HOWTO/index.html

Ця стрічка означає, що сторінка, яка нам потрібна, знаходиться у файлі «HOWTO/Unix-and-Internet-Fundamentals-HOWTO/index.html» у каталозі для тенет на комп’ютері www.tldp.org.

Імена та розташування

Перше, що повинен зробити браузер, це встановити мережене з’єднання з комп’ютером, на котрому знаходиться документ. Щоб зробити це він перш за все повинен визначити мережеве розташування госта^2 www.tldp.org (гост – це термін, що позначає мережевий комп’ютер; www.tldp.org є типовим іменем госта^3 ). Мережеве розташування — це номер, котрий називається ІР-адресою^4 комп’ютера (що таке ІР ми з’ясуємо згодом).

Щоб отримати IP-адресу, Ваш браузер робить запит до програми, котра називається сервером імен^5 . Хоча сервер імен може бути запущеним і на вашій машині, найвірогідніше він працює на іншій машині, до котрох Ваш комп’ютер здійснює запит. Зазвичай, коли оформляють нове підключення до Інернету, однин з пунктів процесу налаштування нового з’єднання є вписування IP-адреси сервера імен Вашого інтернет-провайдера^6 .

Сервери імен на різних машинах спілкуються один з одним, обмінюючись інформацією, що необхідна для з’ясування IP-адрес гостів за їхніми назвами, та якийсь час зберігають цю інформацію. Ваш сервер імен може опитати три або чотири різних сайти в процесі з’ясування адреси www.tldp.org, але це завжди відбувається дуже швидко (менше аніж за секунду). Детальніше цей процес ми розглянемо у наступному розділі.

Сервер імен скаже Вашому браузерові, що ІР адреса госта www.tldp.org є 152.19.254.81; лише знаючи IP-адресу потрібного госту, Ваш браузер зможе із ним зв’язатись.

Система доменних імен

Вся мережа програм та баз даних, що взаємодіє, щоб перетворювати імена гостів у іх ІР-адреси називається Системою Доменних Імен, або DNS^7 . Коли Ви бачите згадку про DNS-сервер, то йдеться власне про сервер імен.

Імена гостів в Інтернеті складаються з частин, розділених крапками. Домен^8 – це сукупність машин що мають спільний суфікс свого імені. Домен може знаходитись всередині іншого домену. Наприклад, машина www.tldp.org знаходиться в під-домені tldp.org домену .org.

Кожен домен визначається відповідальним сервером імен^9 , що знає ІР-адреси всіх машин підпорядкованого йому домену. Його також називають первинним^10 для цього домену. Первинний сервер може мати «помічників» на випадок, якщо він вийде з ладу. Якщо Ви бачите словосполучення вторинний сервер імен чи вторинний DNS^11 , то йдеться саме про цей сервер. Вторинні сервери оновлюють свою інформацію із первинних кожні кілька годин, отож будь-які зміни в реєстрі IP-адрес та імен гостів, за котрі відповідає первинний сервер автоматично скопіюються на вторинний.

Тут є дуже суттєвий момент. Сервери імен зовсім не зобов’язані знати про розташування (тобто IP-адреси) всіх машин у інших доменах (включаючи власні піддомени); все, що їм потрібно знати — IP-адреси відповідних серверів імен. В нашому прикладі первинний сервер імен домену .org знає ІР адреси серверів імен tldp.org, але не адреси інших гостів домену tldp.org.

Домени у системі DNS нагадують дуже розлоге дерево. У основі є кореневі сервери. Кожен знає ІР адреси кореневих серверів; вони є вшитими у ваші DNS-програми. Кореневі сервери знають адреси серверів імен доменів верхнього рівня на кшталт .com чи .org. Кожен сервер верхнього рівня знає адреси доменних серверів дочірнього рівня, і так далі.

Система доменних імен спроектована дуже акуратно. Кожен комп’ютер володіє лише необхідним мінімумом знань про вузли дерева, таким чином локальні зміни у гілках дерева можна легко здійснити лише змінюючи відповідні записи у реєстрі відповідального за цю гілку сервера імен.

Коли ви робите запит на отримання ІР адреси сайту www.tldp.org, запит обробляється за такою схемою: спочатку Ваш сервер імен (той, до якого безпосередньо звернулася Ваша машина) запитує кореневий сервер адресу сервера імен домену .org. Після цього він запитує у сервера імен домену .org адресу сервера імен домену .tldp.org. І вже у цього сервера Ваш сервер запитує адресу сайту www.tldp.org.

Більшість часу Ваш сервер імен здатен вирішувати запити швидше і легше. Сервери імен роблять дуже багато кешувань; коли Ви з’ясовуєте IP-адресу того чи іншого госта, Ваш сервер імен зберігає в пам’яті на деякий час те, про що його попросили. Ось чому, коли Ви вводите адресу нового сайту, Ви бачите повідомлення броузера на кшталт «Шукаю» та ім’я введеного госта. Це свідчить про те, що час зберігання IP-адреси подтрібного Вам госта на Вашому сервері імен вичерпався, і він з’ясовує її наново. Інформація про гости у серверах імен повинна постійно оновлюватись, щоб користувач завжди отримував правдиву інформацію про IP-адреси машин, навіть коли вони міняються.

Пакети та маршрутизатори

Далі броузер хоче відправити команду-запит до веб-сервера на www.tldp.org, що виглядає приблизно ось так:

GET /HOWTO/Unix-and-Internet-Fundamentals-HOWTO/index.html HTTP/1.0

Подивимось, як він це робить. Команда вкладається у так званий пакет^12 , блок бітів, подібних до телеграми, що доповнюється трьома важливими речами: адресою джерела^13 (ІР-адресою вашої машини), адресою одержувача^14 (152.19.254.81) та номером сервісу чи номером порта (в нашому випадку 80, що позначає запит для веб-сторінок).

Далі Ваша машина відправляє утворений пакет по дротах (до вашого провайдера чи по локальній мережі), поки він не дістанеться до спеціального комп’ютера, що називається маршрутизатором^15 . Маршутизатор має карту Інтернету у своїй пам’яті – не повну, звісно, але вона повністю описує ваше мережеве оточення та знає як дістатись до інших маршрутизаторів у Інтернеті.

Ваш пакет може пройти крізь декілька маршрутизаторів на своєму шляху до цілі. Маршрутизатори є розумними. Вони дивляться, скільки часу пакет йтиме до інших маршрутизаторів і використовують цю інформацію щоб відправляти пакети найшвидшими з наявних маршрутів. Вони також спостерігають, коли інший маршрутизатор чи кабель виходять з ладу, і стараються знайти обхідний маршрут для пакетів.

Існує легенда, що Інтернет було спроектовано, щоб вижити у ядерній війні. Це неправда, але все ж дизайн Інтернету дуже добре пристосований до примхливого обладнання у ненадійному світі. Все це завдяки тому, що його «інтелект» розподілений по сотнях тисяч маршрутизаторів замість сконцентруватись у кількох масивних та вразливих комутаторах (як у телефонній мережі). А це означає, що несправності у мережі будуть автоматично локалізовані та використані альтернативні маршрути.

Як тільки ваш пакет дістанеться до пункту призначення, машина-отримувач, опираючись на номер порта відправить його до програми веб-сервера. Веб-сервер знатиме, куди відправляти відповідь, опираючись на адресу відправника пакета. Коли він віддасть документ, той буде розділений на певну кількість пакетів. Розмір тих пакетів залежить від середовища передачі даних у мережі та від типу програми-сервера.

ТСР та ІР

Щоб зрозуміти, як підтримуються передачі, що складаються з кількох і більше пакетів, Ви повинні знати, що Інтернет вживає два протоколи, розташовані один над одним.

Нижчий рівень — ІР (Internet Protocol) відповідає за позначення індивідуальних пакетів адресами відправника й одержувача двох комп’ютерів, що обмінюються інформацією у мережі. Наприклад, якщо Ви звертаєтесь до <http://www.tldp.org>, пакети, котрі Ви відправляєте, будуть мати ІР адресу вашого комп’ютера, скажімо, 192.168.1.101, та ІР адресу www.tldp.org — 152.2.210.81. Ці адреси працюють подібним чином, як у випадку із звичайною паперовою поштою. На пошті можуть прочитати адресу та визначити яким чином найкраще відправити Вам листа, точно так само як маршрутизатор у Інтернеті робить з Інтернет-трафіком.

На верхньому рівні, TCP (Transmission Control Protocol – Протокол контролю передачі) забезпечуює Вам надійність. Коли дві машини узгоджують ТСР-з’єднання (задопомогою ІР), одержувач знає, що він повинен відіслати підтверджувальні пакети відправнику. Якщо відправник не бачить підтверджувального пакета на протязі певного часу, він відсилає пакет повторно. До того ж, відправник присвоює кожному пакету послідовний номер, задопомогою котрих одержувач може відсортувати пакети у правильному порядку, якщо котрісь із них були несвоєчасно отримані (пакети запросто можуть помінятись місцями наприклад, якщо мережеве з’єднання пропало на деякий час, а потім знову з’явилось).

Пакети ТСР/ІР містять також так звані контрольні суми^16 для того, щоб мати змогу перевірити правильність даних у пакетах (контрольна сума вираховується таким чином, що, коли пакет чи контрольна сума пошкоджені, повторне їх вирахування на боці одержувача дуже легко виявить помилку). Отож, з точки зору будь-кого, хто використовує ТСР/ІР та сервери імен, це — надійний шлях обміну потоків байтів між гостами та програмами-серверами, що на них запущені. Люди, котрі пишуть мережеві протоколи, майже ніколи не повинні задумуватись над поділом на пакети, зворотною збіркою пакетів, перевіркою помилок та контрольних сум, та повторною передачею – це все робиться на нижчих рівнях.

НТТР — прикладний протокол

Тепер давайте повернемось до нашого прикладу із відкривання веб-сторінки. Дві програми —броузер та сервер спілкуються за прикладним протоколом^17 , що працює над ТСР/ІР, використовуючи його як простий метод передачі даних туди й назад. Цей протокол називається НТТР (Hyper-Text Transfer Protocol — протокол передачі гіпертексту) і ми вже бачили одну його команду – GET у попередньому прикладі.

Коли команда GET потрапляє до веб-сервера машини www.tldp.org із 80-м номером сервісу, вона буде перенаправлена демону, що слухає відповідний (80-й) мережевий порт. Більшість Інтернет-послуг реалізовані у вигляді демонів, котрі слухають мережеві порти в очікуванні на вхідні команди.

Якщо б структура Інтернету мала одне глобальне правило, воно б звучало так: всі його складові частини мають бути настільки простими й зрозумілими, наскільки це взагалі можливо. НТТР та його родичі (наприклад, SMTP — Simple Mail Transport Protocol — простий протокол передачі пошти) прагнуть використовувати короткі текстові команди, що завершуються символом нового рядка. Це гранично неефективно; в деяких випадках Ви можете отримати значно більшу швидкість, використовуючи щільно закодований бінарний протокол. Але досвід показує, що вигода від команд, котрі людина може легко зрозуміти, значно більша, аніж якщо б ми робили щось швидко й незрозуміло.

Таким чином, відповідь демона вашому браузеру також буде простим текстом, переданим через ТСР/ІР. Початок відповіді виглядатиме приблизно так (кілька заголовків ми пропустили):

HTTP/1.1 200 OK
Date: Sat, 10 Oct 1998 18:43:35 GMT
Server: Apache/1.2.6 Red Hat
Last-Modified: Thu, 27 Aug 1998 17:55:15 GMT
Content-Length: 2982
Content-Type: text/html

Після них буде порожній рядок, а далі – текст веб-сторінки, після чого з’єднання закривається. Ваш браузер просто відображає сторінку. Заголовки скажуть йому, як саме це зробити (зокрема, заголовок Content-Type повідомить, сторінка записана у форматі HTML).