База знань
Протокол TCP/IP або як працює Інтернет (для початківців)
В основі роботи глобальної мережі Інтернет лежить набір (стек) протоколів TCP/IP. Але ці терміни лише з першого погляду здаються складними. Насправді стек протоколів TCP/IP — це простий набір правил обміну інформацією, і ці правила насправді вам добре відомі, хоч ви, ймовірно, про це і не здогадуєтеся.
Принципи роботи інтернет-протоколів TCP/IP за своєю суттю дуже прості та дуже нагадують роботу звичайної пошти.
Згадайте, як працює пошта. Спочатку ви на листку пишете лист, потім кладете його в конверт, заклеюєте, на звороті конверта пишете адреси відправника та одержувача, а потім відносите до найближчого поштового відділення. Далі лист проходить через ланцюжок поштових відділень до найближчого поштового відділення одержувача, звідки він листоношею доставляється до вказаної адреси одержувача і опускається до його поштової скриньки (з номером його квартири) або вручається особисто. Все, лист дійшов до отримувача. Коли одержувач листа захоче вам відповісти, то він у своєму листі у відповідь поміняє місцями адреси одержувача і відправника, і лист відправитися до вас по тому ж ланцюжку, але у зворотному напрямку.
На конверті листа буде написано приблизно таке:
Тепер ми готові розглянути взаємодію комп’ютерів та програм у мережі Інтернет (та й у локальній мережі теж). Зверніть увагу, що аналогія із звичайною поштою буде майже повною.
Кожен комп’ютер (він же: вузол, хост) у межах мережі Інтернет теж має унікальну адресу, яка називається IP-адреса (Internet Protocol Address), наприклад: 127.0.0.1.
IP адреса складається з чотирьох десяткових чисел (від 0 до 255), розділених крапкою. Але знати лише IP-адресу комп’ютера ще недостатньо, оскільки зрештою обмінюються інформацією не комп’ютери власними силами, а додатки, які працюють в них. А на комп’ютері може одночасно працювати одразу кілька програм (наприклад, поштовий сервер, веб-сервер тощо). Для доставки звичайного паперового листа недостатньо знати лише адресу будинку — ще необхідно знати номер квартири. Також кожен програмний додаток має подібний номер, іменований номером порту. Більшість серверних додатків мають стандартні номери, наприклад: поштовий сервіс прив’язаний до порту з номером 25 (ще говорять: «слухає» порт, приймає повідомлення), веб-сервіс прив’язаний до порту 80, FTP – до порту 21 тощо.
Таким чином маємо наступну практично повну аналогію з нашою звичайною поштовою адресою:
У комп’ютерних мережах, що працюють за протоколами TCP/IP, аналогом паперового листа в конверті є пакет, який містить дані, що передаються, та адресну інформацію — адресу відправника та адресу одержувача, наприклад:
Звичайно ж, у пакетах також є службова інформація, але для розуміння суті це не важливо.
Зверніть увагу, комбінація: “IP-адреса і номер порту” – називається “сокет”.
У прикладі ми з сокету 82.146.49.55:2049 надсилаємо пакет на сокет 195.34.32.116:53, тобто пакет піде на комп’ютер, що має IP адресу 195.34.32.116, порт 53. А порту 53 відповідає сервер розпізнавання імен (DNS-сервер), який прийме цей пакет. Знаючи адресу відправника, цей сервер зможе після обробки нашого запиту сформувати пакет у відповідь, який піде у зворотному напрямку на сокет відправника 82.146.49.55:2049, який для DNS-сервера буде сокетом одержувача.
Як правило, взаємодія здійснюється за схемою «клієнт-сервер»: “клієнт” запитує будь-яку інформацію (наприклад, сторінку сайту), сервер приймає запит, обробляє його і посилає результат. Номери портів серверних програм загальновідомі, наприклад: поштовий SMTP сервер «слухає» 25-й порт, POP3 сервер, що забезпечує читання пошти з ваших поштових скриньок «слухає» 110-порт, веб-сервер – 80-й порт тощо.
Більшість програм на домашньому комп’ютері є клієнтами – наприклад, поштовий клієнт Outlook, веб-браузери IE, FireFox тощо.
Номери портів на клієнті не фіксовані як сервер, а призначаються операційною системою динамічно. Фіксовані серверні порти зазвичай мають номери до 1024 (але є винятки), а клієнтські починаються після 1024.
Отже, IP – це адреса комп’ютера (вузла, хоста) в мережі, а порт – номер конкретної програми, що працює на цьому комп’ютері.
Однак людині запам’ятовувати цифрові IP-адреси важко – куди зручніше працювати з літерними іменами. Адже набагато легше запам’ятати слово, аніж набір цифр. Так і зроблено – будь-яку цифрову IP-адресу можна пов’язати з буквено-цифровим ім’ям. В результаті, наприклад, замість 82.146.49.55 можна використовувати ім’я www.ofnet.ua. А перетворенням доменного імені на цифрову IP-адресу займається сервіс доменних імен – DNS (Domain Name System).
Розглянемо докладніше як це працює. Ваш провайдер явно (на папері, для ручного налаштування з’єднання) або неявно (через автоматичне налаштування з’єднання) надає вам IP-адресу сервера імен (DNS). На комп’ютері з цією IP-адресою працює програма (сервер імен), яка знає всі доменні імена в Інтернеті та відповідні цифрові IP адреси. DNS-сервер «слухає» 53-й порт, приймає на нього запити та видає відповіді, наприклад:
Тепер розглянемо, що відбувається, коли у своєму браузері ви набираєте доменне ім’я (URL) цього сайту (www.ofnet.ua) і натиснувши <enter>, у відповідь від веб-сервера отримуєте сторінку цього сайту.
Наприклад:
Набираємо в адресному рядку браузера доменне ім’я www.ofnet.ua та тиснемо <enter>. Далі операційна система робить приблизно такі дії:
Надсилається запит (точніше пакет із запитом) DNS серверу на сокет 195.34.32.116:53. Як було розглянуто вище, порт 53 відповідає DNS-серверу – додатку, що займається розпізнаванням імен. А DNS-сервер, обробивши наш запит, повертає IP-адресу, яка відповідає введеному імені.
Діалог приблизно наступний:
Далі наш комп’ютер встановлює з’єднання з портом 80 комп’ютера 82.146.49.55 та надсилає запит (пакет із запитом) на отримання сторінки www.ofnet.ua. 80-й порт відповідає веб-серверу. У адресному рядку браузера 80-й порт зазвичай пишеться, оскільки використовується за замовчуванням, але його можна і явно вказати після двокрапки – http://www.ofnet.ua:80.
Прийнявши від нас запит, веб-сервер обробляє його і в декількох пакетах посилає нам сторінку на мові HTML – мові розмітки тексту, який розуміє браузер.
Наш браузер, отримавши сторінку, відображає її. В результаті, ми бачимо на екрані головну сторінку цього сайту.
Навіщо ці принципи треба розуміти?
Наприклад, ви помітили дивну поведінку свого комп’ютера – незрозуміла мережева активність, гальмування тощо. Що робити? Відкриваємо консоль (натискаємо кнопку «Пуск» – «Виконати» – набираємо cmd – «Ок»). У консолі набираємо команду netstat -anи тиснемо <Enter>. Ця утиліта відобразить список встановлених з’єднань між сокетами комп’ютера та сокетами віддалених вузлів. Якщо ми бачимо в колонці «Зовнішня адреса» якісь чужі IP-адреси, а через двокрапку 25-й порт, що це може означати? (Пам’ятайте, що 25-й порт відповідає поштовому серверу?) Це означає, що ваш комп’ютер встановив з’єднання з якимось поштовим сервером (серверами) і надсилає через нього якісь листи. І якщо ваш поштовий клієнт (Outlook, наприклад) у цей час не запущений, та якщо ще таких з’єднань на 25-й порт багато, то, ймовірно, у вашому комп’ютері завівся вірус, який розсилає від вашого імені спам або пересилає номери ваших кредитних карток разом з паролями зловмисникам.
Також розуміння принципів роботи Інтернету необхідне для правильного налаштування фаєрвола (простіше кажучи брандмауера). Ця програма (яка часто постачається разом з антивірусом), призначена для фільтрації пакетів – “своїх” та “ворожих”. Своїх пропускати, чужих не пускати. Наприклад, якщо ваш фаєрвол повідомляє вам, що хтось хоче встановити з’єднання з будь-яким портом вашого комп’ютера. Дозволити чи заборонити?
Ну і найголовніше — ці знання дуже корисні при спілкуванні з техпідтримкою.
Насамкінець наведу список портів, з якими вам, ймовірно, доведеться зіткнутися:
Декілька спеціальних IP адрес:
Що таке маска підмережі та шлюз за замовчуванням (роутер, маршрутизатор)?
(Ці параметри задаються у налаштуваннях мережевих підключень).
Все просто. Комп’ютери об’єднуються у локальні мережі. У локальній мережі комп’ютери безпосередньо «бачать» лише одне одного. Локальні мережі з’єднуються між собою через шлюзи (роутери, маршрутизатори). Маска підмережі призначена для визначення — належить комп’ютер-одержувач до цієї локальної мережі чи ні. Якщо комп’ютер-одержувач належить до цієї мережі, як і комп’ютер-відправник, то пакет передається йому безпосередньо, інакше пакет відправляється на шлюз за замовчуванням, який далі, за відомими йому маршрутами, передає пакет до іншої мережі, тобто до іншого поштового відділення (за аналогією з поштою).
Насамкінець розглянемо що ж означають незрозумілі терміни:
TCP/IP – це назва набору мережевих протоколів. Насправді пакет, що передається, проходить кілька рівнів. (Як на пошті: спочатку ви пишете лист, потім поміщаєте в конверт з адресою, потім поштою на ньому ставиться штамп і т.д.).
IP протокол – це протокол так званого мережевого рівня. Завданням цього рівня є доставка ip-пакетів від комп’ютера відправника до комп’ютера одержувача. Крім власне даних, пакети цього рівня мають ip-адресу відправника та ip-адресу одержувача. Номери портів на мережевому рівні не використовуються. Якому порту, тобто додатку адресовано цей пакет, чи був цей пакет доставлений чи втрачений, на цьому рівні невідомо — це не його завдання, це завдання транспортного рівня.
TCP та UDP – це протоколи так званого транспортного рівня. Транспортний рівень знаходиться над мережевим. На цьому рівні до пакету додається порт відправника та порт одержувача.
TCP — це протокол зі встановленням з’єднання та з гарантованою доставкою пакетів. Спочатку проводиться обмін спеціальними пакетами для встановлення з’єднання, відбувається щось на зразок рукостискання (-Привіт. -Привіт. -Побалакаємо? -Давай.). Далі по цьому з’єднанню туди і назад посилаються пакети (йде розмова), причому з перевіркою, чи пакет дійшов до одержувача. Якщо пакет не дійшов, він посилається повторно («повтори, не почув»).
UDP – це протокол без встановлення з’єднання та з негарантованою доставкою пакетів. (Типу: щось крикнув, а почують тебе чи ні — неважливо).
Над транспортним рівнем знаходиться прикладний рівень. На цьому рівні працюють такі протоколи, як http, ftp та інші. Наприклад HTTP і FTP використовують надійний протокол TCP, а DNS-сервер працює через ненадійний протокол UDP.
Як переглянути поточні з’єднання?
Поточні з’єднання можна переглянути за допомогою команди
netstat -an
(Параметр n вказує виводити IP адреси замість доменних імен).
Запускається ця команда таким чином:
«Пуск» – «Виконати» – набираємо cmd – «Ок». У консолі (чорне вікно), що з’явилася, набираємо команду netstat -an і тиснемо <Enter>. Результатом буде список встановлених з’єднань між сокетами нашого комп’ютера та віддалених вузлів.
Наприклад, отримуємо:
У цьому прикладі 0.0.0.0:135 означає, що наш комп’ютер на всіх своїх IP адресах слухає (LISTENING) 135-й порт і готовий приймати на нього з’єднання від будь-кого (0.0.0.0:0) за протоколом TCP.
91.76.65.216:139 – наш комп’ютер слухає 139-й порт на своїй IP-адресі 91.76.65.216.
Третій рядок означає, що зараз встановлено (ESTABLISHED) з’єднання між нашою машиною (91.76.65.216:1719) та віддаленою (212.58.226.20:80). Порт 80 означає, що наша машина звернулася із запитом до веб-сервера (у мене дійсно відкриті сторінки в браузері).