Сімейство протоколів TCP/IP
1. Введення
Сімейство протоколів TCP/IP широко застосовується в усьому світі для об'єднання
комп'ютерів в мережу Internet. Єдина мережа Internet складається з безлічі мереж
різної фізичної природи, від локальних мереж типу Ethernet і Token Ring, до
глобальних мереж типу NSFNET. Основна увага в книзі приділяється принципам
організації міжмережевої взаємодії. Багато технічні деталі, історичні
питання опущені. Більш докладну інформацію про протоколи TCP/IP можна знайти в
RFC (Requests For Comments) - спеціальних документах, що випускаються Мережевим
Інформаційним Центром (Network Information Center - NIC). Додаток 1 містить
путівник по RFC, а додаток 2 відображає стан справ в області
стандартизації протоколів сімейства TCP/IP на початок 1991 року.
У книзі наводяться приклади, засновані на реалізації TCP/IP в ОС UNIX. Однак
основні положення застосовуються до всіх реалізацій TCP/IP.
Сподіваюся, що ця книга буде корисна тим, хто професійно працює або
збирається почати працювати в середовищі TCP/IP: системним адміністраторам, системним
програмістам і менеджерам мережі.
2. Основи TCP/IP
Термін "TCP/IP" зазвичай означає все, що пов'язано з протоколами TCP і IP. Він
охоплює ціле сімейство протоколів, прикладні програми і навіть саму мережу. В
складу сімейства входять протоколи UDP, ARP, ICMP, TELNET, FTP і багато інших.
TCP/IP - це технологія міжмережевої взаємодії, технологія internet. Мережа,
що використовує технологію internet, називається "internet". Якщо мова йде про
глобальної мережі, що поєднує безліч мереж з технологією internet, то її
називають Internet. 2.1. Модуль IP створює єдину логічну мережу
Архітектура протоколів TCP/IP призначена для об'єднаної мережі, що складається з
з'єднаних один з одним шлюзами окремих різнорідних пакетних підмереж, до
яким підключаються різнорідні машини. Кожна з підмереж працює в
відповідності зі своїми специфічними вимогами і має свою природу засобів
зв'язку. Однак передбачається, що кожна підмережа може прийняти пакет інформації
(дані з відповідним мережевим заголовком) і доставити його за вказаною
адресою в цій конкретній під мережі. Не потрібно, щоб підмережа гарантувала
обов'язкову доставку пакетів і мала надійний наскрізний протокол. Таким чином,
дві машини, підключені до однієї підмережі можуть обмінюватися пакетами.
Коли необхідно передати пакет між машинами, підключеними до різних підмережах,
то машина-відправник посилає пакет у відповідний шлюз (шлюз підключений до
підмережі також як звичайний вузол). Звідти пакет направляється за певним
маршрутом через систему шлюзів і підмереж, поки не досягне шлюзу, підключеного
до тієї ж підмережі, що й машина-одержувач; там пакет направляється до одержувача.
Об'єднана мережа забезпечує датаграммним сервіс.
Проблема доставки пакетів в такій системі вирішується шляхом реалізації у всіх
вузлах і шлюзах мережевого протоколу IP. Межсетевой рівень є по суті
базовим елементом у всій архітектурі протоколів, забезпечуючи можливість
стандартизації протоколів верхніх рівнів. 2.2. Структура зв'язків протокольних
модулів
Введемо ряд базових термінів, які ми будемо використовувати надалі.
Драйвер - це програма, що безпосередньо взаємодіє з мережним адаптером.
Модуль - це програма, що взаємодіє з драйвером, мережними прикладними
програмами або іншими модулями. Драйвер мережевого адаптера і, можливо, інші
модулі, специфічні для фізичної мережі передачі даних, надають мережевий
інтерфейс для протокольних модулів сімейства TCP/IP.
Назва блоку даних, що передається по мережі, залежить від того, на якому рівні
стека протоколів він знаходиться. Блок даних, з яким має справу мережевий
інтерфейс, називається кадром; якщо блок даних знаходиться між мережевим
інтерфейсом і модулем IP, то він називається IP-пакетом, і якщо він - між модулем
IP і модулем UDP, то - UDP-датаграм; якщо між модулем IP і модулем TCP, то
- TCP-сегментом (або транспортним повідомленням); нарешті, якщо блок даних
знаходиться на рівні мережевих прикладних процесів, то він називається прикладним
повідомленням.
Ці визначення, звичайно, недосконалі і неповні. До того ж вони змінюються від
публікації до публікації. Більш докладні визначення можна знайти в RFC-1122,
розділ 1.3.3. 2.4. Потоки даних
Розглянемо потоки даних, що проходять через стек протоколів, який ви бачите на
рис.1. У разі використання протоколу TCP (Transmission Control Protocol -
протокол управління передачею), дані передаються між прикладним процесом і
модулем TCP. Типовим прикладним процесом, що використовують протокол TCP, є
модуль FTP (File Transfer Protocol протокол передачі файлів). Стек протоколів в
цьому випадку буде FTP/TCP/IP/ENET. При використанні протоколу UDP (User
Datagram Protocol - протокол призначених для користувача датаграм), дані передаються
між прикладним процесом і модулем UDP. Наприклад, SNMP (Simple Network
Management Protocol - простий протокол управління мережею) користується
транспортними послугами UDP. Його стек протоколів виглядає так: SNMP/UDP/IP/ENET.
Модулі TCP, UDP і драйвер Ethernet є мультиплексорами nx 1. Діючи як
мультиплексори, вони перемикають кілька входів на один вихід. Вони також
є демультиплексор 1 x n. Як демультіплексори, вони перемикають одна
вхід на один з багатьох виходів у відповідності з полем типу в заголовку
протокольного блоку даних (рис.2).
Коли Ethernet-кадр потрапляє в драйвер мережевого інтерфейсу Ethernet, він може
бути направлений або в модуль ARP (Address Resolution Protocol адресний
протокол), або в модуль IP (Internet Protocol - міжмережевий протокол). На те,
куди повинен бути спрямований Ethernet-кадр, вказує значення поля типу в
заголовку кадру.
Якщо IP-пакет потрапляє в модуль IP, то що містяться в ньому дані можуть бути
передані або модулю TCP або UDP, що визначається полем "протокол" в
заголовку IP-пакету.
Якщо UDP-датаграма потрапляє в модуль UDP, то на підставі значення поля "порт"
в заголовку датаграми визначається прикладна програма, якою має бути
передано прикладне повідомлення. Якщо TCP-повідомлення потрапляє в модуль TCP, то
вибір прикладної програми, якою має бути передано повідомлення,
здійснюється на основі значення поля "порт" у заголовку TCP-повідомлення.
Мультиплексування даних у зворотний бік здійснюється досить просто,
тому що з кожного модуля існує тільки один шлях вниз. Кожен протокольний
модуль додає до пакету свій заголовок, на підставі якого машина,
яка прийняла пакет, виконує демультиплексування.
Дані від прикладного процесу проходять через модулі TCP або UDP, після чого
потрапляють в модуль IP і звідти - на рівень мережевого інтерфейсу.
Хоча технологія internet підтримує багато різних середовищ передачі даних,
тут ми будемо припускати використання Ethernet, тому що саме це середовище
найчастіше слугує фізичною основою для IP-мережі. Машина на рис.1 має одну
точку з'єднання з Ethernet. Шестібайтний Ethernet-адреса є унікальним для
кожного мережевого адаптера і розпізнається драйвером.
Машина має також четирехбайтний IP-адресу. Ця адреса позначає точку доступу
до мережі на інтерфейсі модуля IP з драйвером. IP-адреса має бути унікальним в
межах всієї мережі Internet.
Працююча машина завжди знає свою IP-адресу і Ethernet-адресу. 2.5. Робота з
декількома мережевими інтерфейсами
[1] У документації по TCP/IP терміни шлюз (gateway) і IPмаршрутізатор
(IP-router) часто використовуються як синоніми. Ми вважали за можливе використовувати
більш поширений термін "шлюз". вихідний в мережі, і приймає адресовані
йому Ethernet-кадри, а також Ethernet-кадри з адресою "FF: FF: FF: FF: FF: FF" (в
16-річної системі), що означає "всім", і використовується при
широкомовної передачі.
Ethernet реалізує метод МДКН/ОС (множинний доступ з контролем несучої і
виявленням зіткнень). Метод МДКН/ОС припускає, що всі пристрої
взаємодіють в одному середовищі, в кожний момент часу може передавати тільки
один пристрій, а приймати можуть всі одночасно. Якщо два пристрої
намагаються передавати одночасно, то відбувається зіткнення передач, і обидва
пристрою після випадкового (короткого) періоду очікування намагаються знову виконати
передачу. 3.1. Аналогія з розмовою
Доброю аналогією взаємодій у середовищі Ethernet може служити розмова групи
ввічливих людей в невеличкій темній кімнаті. При цьому аналогією електричним
сигналами в коаксіальному кабелі служать звукові хвилі в кімнаті.
Кожна людина чує мова інших людей (контроль несучої). Всі люди в кімнаті
мають однакові можливості вести розмову (множинний доступ), але ніхто не
говорить занадто довго, тому що всі ввічливі. Якщо людина буде невежлів, то його
попросять вийти (тобто видалять з мережі). Всі мовчать, поки хто-то говорить. Якщо два
людини починають говорити одночасно, то вони відразу виявляють це,
оскільки чують один одного (виявлення зіткнень). У цьому випадку вони
замовкають і чекають деякий час, після чого один з них знову починає
розмову. Інші люди чують, що ведеться розмова, і чекають, поки він скінчиться, а
потім можуть почати говорити самі. Кожна людина має власне ім'я (аналог
унікального Ethernet-адреси). Кожного разу, коли хтось починає говорити, він
називає на ім'я того, до кого звертається, і своє ім'я, наприклад, "Слухай Петя,
це Андрій, ... ля-ля-ля ... "Якщо хтось хоче звернутися до всіх, то він
каже: "Слухайте всі, це Андрій, ... ля-ля-ля ..." (широкомовна
передача).
4. Протокол ARP
У цьому розділі ми розглянемо те, як під час здійснення IP-пакета визначається
Ethernet-адреса призначення. Для відображення IP-адрес в Ethernetадреса
використовується протокол ARP (Address Resolution Protocol - адресний протокол).
Відображення виконується лише для відправляються IP-пакетів, тому що тільки в
момент відправлення створюються заголовки IP та Ethernet. 4.1. ARP-таблиця для
перетворення адрес
Прийнято всі байти 4-байтного IP-адреси записувати десятковими числами,
розділеними крапками. Під час запису 6-байтного Ethernet-адреси кожен байт
вказується у 16-річної системі і відокремлюється двокрапкою.
ARP-таблиця необхідна тому, що IP-адреси та Ethernet-адреси вибираються
незалежно, і немає якого-небудь алгоритму для перетворення одного в інший.
IP-адресу вибирає менеджер мережі з урахуванням положення машини в мережі internet. Якщо
машину переміщують в іншу частину мережі internet, то її IP-адреса має бути
змінений. Ethernet-адресу вибирає виробник мережного інтерфейсного
обладнання з виділеного для нього за ліцензією адресного простору. Коли у
машини замінюється плата мережного адаптера, то змінюється і її Ethernet-адресу. 4.2.
Порядок перетворення адрес
В ході звичайної роботи мережна програма, така як TELNET, відправляє прикладне
повідомлення, користуючись транспортними послугами TCP. Модуль TCP посилає
відповідне транспортне повідомлення через модуль IP. У результаті
складається IP-пакет, який має бути переданий драйверу Ethernet. IP-адреса
місця призначення відома прикладній програмі, модулю TCP та модулю IP.
Необхідно на його основі знайти Ethernet-адреса місця призначення. Для визначення
шуканого Ethernet-адреси використовується ARP-таблиця. 4.3. Запити та відповіді
протоколу ARP
Як же заповнюється ARP-таблиця? Вона заповнюється автоматично модулем ARP, за
міру необхідності. Коли за допомогою існуючої ARP-таблиці не вдається
перетворити IP-адресу, то відбувається наступне: 1) По мережі передається
широкомовна ARP-запит. 2) Вихідний IP-пакет ставиться в чергу.
4.4. Продовження перетворення адрес
Новий запис в ARP-таблиці з'являється автоматично, через кілька
мілісекунд після того, як вона була потрібна. Як ви пам'ятаєте, раніше на кроці 2
вихідний IP-пакет був поставлений в чергу. Тепер з використанням оновленої
ARP-табліцивиполняется перетворення IPадреса в Ethernet-адресу, після чого
Ethernet-кадр передається по мережі. Повністю порядок перетворення адрес
виглядає так: 1) По мережі передається широкомовна ARP-запит. 2) Вихідний
IP-пакет ставиться в чергу. 3) Повертається ARP-відповідь, що містить інформацію про
відповідно IP-і
Ethernet-адрес. Ця інформація заноситься в ARP-таблицю. 4) Для перетворення
IP-адреси в Ethernet-адресу у IP-пакету, постав
ленного в чергу, використовується ARP-таблиця. 5) Ethernet-кадр передається по мережі
Ethernet.
Коротше кажучи, якщо за допомогою ARP-таблиці не вдається відразу здійснити
перетворення адрес, то IP-пакет ставиться в чергу, а необхідна для
перетворення інформація виходить за допомогою запитів і відповідей протоколу ARP,
після чого IP-пакет передається за призначенням.
Якщо в мережі немає машини з шуканим IP-адресою, то ARP-відповіді не буде і не буде
записи в ARP-таблиці. Протокол IP буде знищувати IP-пакети, що направляються за
цією адресою. Протоколи верхнього рівня не можуть відрізнити випадок пошкодження
мережі Ethernet від випадку відсутності машини з шуканим IP-адресою.
Деякі реалізації IP та ARP не ставлять у чергу IP-пакети на той час, поки
вони чекають ARP-відповідей. Замість цього IP-пакет просто знищується, а його
відновлення покладається на модуль TCP або прикладний процес, що працює
через UDP. Таке відновлення виконується за допомогою таймаутів і повторних
передач. Повторна передача повідомлення проходить успішно, тому що перша спроба
вже викликала заповнення ARP-таблиці.
Слід зазначити, що кожна машина має окрему ARP-таблицю для кожного
свого мережевого інтерфейсу.
5. Межсетевой протокол IP
Модуль IP є базовим елементом технології internet, а центральною частиною
IP є його таблиця маршрутів. Протокол IP використовує цю таблицю при
прийнятті всіх рішень про маршрутизації IP-пакетів. Зміст таблиці маршрутів
визначається адміністратором мережі. Помилки при установці маршрутів можуть
заблокувати передачі.
Щоб зрозуміти техніку міжмережевої взаємодії, потрібно зрозуміти те, як
використовується таблиця маршрутів. Це розуміння необхідне для успішного
адміністрування та супроводження IP-мереж.
5.1. Пряма маршрутизація
Менеджер мережі присвоює кожній мережі Ethernet унікальний номер, званий
IP-номером мережі. На рис.7 IP-номера не показані, замість них використовуються імена
мереж.
Коли машина A посилає IP-пакет машині B, то процес передачі йде в межах
однієї мережі. При всіх взаємодіях між машинами, підключеними до однієї
IP-мережі, використовується пряма маршрутизація, що обговорювалися у попередньому прикладі.
Коли машина D взаємодіє з машиною A, то це інтерфейс. Коли
машина D взаємодіє з машиною E, то це інтерфейс. Коли машина
D взаємодіє з машиною H, то це інтерфейс. Це так, оскільки
кожна пара цих машин належить одній IP-мережі.
Проте, коли машина A взаємодіє з машинами, включеними в іншу IP-мережу,
то взаємодія вже не буде прямим. Машина A повинен використовувати шлюз D для
ретрансляції IP-пакетів в іншу IP-мережу. Така взаємодія називається
"непрямим".
Маршрутизація IP-пакетів виконується модулями IP і є прозорою для
модулів TCP, UDP і прикладних процесів.
Отже, при прямій маршрутизації IP-та Ethernet-адреса відправника відповідають
адресами того вузла, який послав IP-пакет, а IP-та Ethernet-адреси місця
призначення відповідають адресами одержувача. При непрямої маршрутизації IP-і
Ethernet-адреси не утворюють таких пар.
У даному прикладі мережа internet є дуже простою. Реальні мережі можуть бути
набагато складніше, тому що можуть містити кілька шлюзів і кілька типів
фізичних середовищ передачі. У наведеному прикладі кілька мереж Ethernet
об'єднуються шлюзом для того, щоб локалізувати широкомовна трафік в
кожної мережі. 5.3. Правила маршрутизації в модулі IP
Вище ми показали, що відбувається при передачі повідомлень, а тепер розглянемо
правила або алгоритм маршрутизації.
Для відправляються IP-пакетів, що надходять від модулів верхнього рівня, модуль IP
повинен визначити спосіб доставки - прямий або непрямий - і вибрати мережевий
інтерфейс. Цей вибір робиться на підставі результатів пошуку в таблиці
маршрутів.
Для прінімаемих IP-пакетів, що надходять від мережевих драйверів, модуль IP повинен
вирішити, чи потрібно ретранслювати IP-пакет з іншої мережі або передати його на
верхній рівень. Якщо модуль IP вирішить, що IP-пакет повинен бути передавати,
то подальша робота з ним здійснюється також, як з відправляються
IP-пакетами.
Вхідний IP-пакет ніколи не ретранслюється через той же мережевий інтерфейс,
через який він був прийнятий.
Рішення про маршрутизації приймається до того, як IP-пакет передається мережному
драйверу, і до того, як відбувається звернення до ARP-таблиці. 5.4. IP-адреса
Менеджер мережі присвоює IP-адреси машин відповідно до того, до яких
IP-мережах вони підключені. Старші біти 4-х байтного IP-адреси визначають номер
IP-мережі. Частина IP-адреси - номер вузла (хостномер). Для машини з
табл.1 з IP-адресою 223.1.2.1 мережевий номер рівний 223.1.2, а хост-номер - 1.
Нагадаємо, що IP-адреса вузла ідентифікує точку доступу модуля IP до мережевого
інтерфейсу, а не всю машину.
Існують 5 класів IP-адрес, що відрізняються кількістю біт у мережному номері і
хост-номері. Клас адреси визначається значенням його перший октету.
Адреси класу A призначені для використання у великих мережах загального
користування. Вони допускають велику кількість номерів вузлів. Адреси класу B
використовуються в мережах середнього розміру, наприклад, мережах університетів і великих
компаній. Адреси класу C використовуються в мережах з невеликим числом комп'ютерів.
Адреси класу D використовуються при зверненнях до груп машин, а адреси класу E
зарезервовані на майбутнє.
Перш ніж ви почнете використовувати мережу з TCP/IP, ви повинні одержати один або
декілька офіційних мережевих номерів. Виділенням номерів (як і багатьма іншими
питаннями) займається DDN Network Information Center (NIC) [2]. Виділення
номери проводиться безкоштовно і займає близько тижня. Ви можете отримати
мережевий номер незалежно від того, для чого призначена ваша мережа. Навіть
якщо ваша мережа не має зв'язку з об'єднаною мережею Internet, отримання
унікального номера бажано, тому що в цьому випадку є гарантія, що в
майбутньому при включенні в Internet або при підключенні до мережі іншої організації
не виникне конфлікту адрес.
Одне з найважливіших рішень, яке необхідно прийняти при встановленні мережі,
полягає у виборі способу присвоєння IP-адрес вашим машинам. Цей вибір
повинен враховувати перспективу зростання мережі. Інакше надалі вам доведеться міняти
адреси. Коли до мережі підключено кілька сотень машин, зміна адрес
стає майже неможливим.
Організації, які мають невеликі мережі з кількістю вузлів до 126, повинні запитувати
мережеві номери класу C. Організації з великою кількістю машин можуть отримати
кілька номерів класу C або номер класу B. Зручним засобом структуризації
мереж в рамках однієї організації є підмережі. 5.6. Підмережі
Адресний простір мережі internet може бути розділене на непересічні
підпростори - "подсети", з кожною з яких можна працювати як зі звичайною
мережею TCP/IP. Таким чином єдина IP-мережа організації може будуватися як
об'єднання підмереж. Як правило, підмережа відповідає однієї фізичної мережі,
наприклад, однієї мережі Ethernet.
[2] SRI International, Room EJ210, 333 Ravenswood Avenue, Menlo Park, California
94025, USA. Тел. 1-800-235-3155. E-mail:
[email protected] класу C. Однак таке
рішення має два недолік. Перший, і менш істотний, полягає в
марної трати мережевих номерів. Більш серйозний недолік полягає в тому, що якщо
ваша організація має кілька мережевих номерів, то машини поза її повинні
підтримувати запису про маршрути доступу до кожної з етіхIP-мереж. Таким чином,
структура IP-мережі організації стає видимою для всього світу. При будь-яких
зміни в IP-мережі інформація про них повинна бути врахована в кожній з машин,
підтримують маршрути доступу до цієї IP-мережі.
Підмережі дозволяють уникнути цих недоліків. Ваша організація має отримати
один мережевий номер, наприклад, номер класу B. Стандарти TCP/IP визначають
структуру IP-адрес. Для IP-адрес класу B перші два октету є номером
мережі. Частина IP-адреси може використовуватися як завгодно. Наприклад, ви
можете вирішити, що третій октет буде визначати номер підмережі, а четверо октет
- Номер вузла в ній. Ви повинні описати конфігурацію підмереж у файлах,
визначають маршрутизацію IP-пакетів. Цей опис є локальним для вашої
організації і не видно поза нею. Всі машини поза вашої організації бачать одну
велику IPсеть. Отже, вони повинні підтримувати тільки маршрути доступу до
шлюзів, що з'єднує вашу IP-мережа з рештою світу. Зміни, що відбуваються в
IP-мережі організації, що не видно поза нею. Ви легко можете додати нову підмережа,
новий шлюз і т.п. 5.7. Як призначати номери мереж і підмереж
Після того, як вирішено використовувати підмережі або безліч IP-мереж, ви повинні
вирішити, як призначати їм номери. Зазвичай це досить просто. Кожній фізичної
мережі, наприклад, Ethernet або Token Ring, призначається окремий номер підмережі або
номер мережі. У деяких випадках має сенс призначати однієї фізичної мережі
кілька подсетевих номерів. Наприклад, припустимо, що є мережа Ethernet,
що охоплює три будівлі. Ясно, що при збільшенні кількості машин, підключених до
цій мережі, доведеться її розділити на кілька окремих мереж Ethernet. Для
того, щоб уникнути необхідності міняти IP-адреси, коли це відбудеться, можна
наперед виділити для цієї мережі три подсетевих номери - по одному на будинок. (Це
корисно і в тому випадку, коли не планується фізичний поділ мережі. Просто
така адресація дозволяє відразу визначити, де знаходиться та чи інша машина.)
Однак перш, ніж виділяти три різних подсетевих номера одному фізичному
мережі, ретельно перевірте, що всі ваші програми здатні працювати в такій
середовищі.
Ви також повинні вибрати "маску підмережі". Вона використовується мережевим програмним
забезпеченням для виділення номера підмережі з IP-адрес. Бити IP-адреси,
визначають номер IP-мережі, в масці підмережі повинні бути рівні 1, а біти,
визначають номер вузла, в масці підмережі повинні бути рівні 0. Як вже
зазначалося, стандарти TCP/IP визначають кількість октетів, що задають номер мережі.
Часто в IP-адресах класу B третього октет використовується для створення номера
підмережі. Це дозволяє мати 256 підмереж, у кожній з яких може бути до 254
вузлів. Маска підмережі в такій системі дорівнює 255.255.255.0. Але, якщо у вашій мережі
повинно бути більше підмереж, а в кожній підмережі не буде при цьому більше 60
вузлів, то можна використовувати маску 255.255.255.192. Це дозволяє мати 1024
підмережі і до 62 вузлів у кожній. (Нагадаємо, що номери вузлів 0 і "всі одиниці"
використовуються особливим чином.)
Зазвичай маска підмережі вказується у файлі стартової конфігурації мережевого
програмного забезпечення. Протоколи TCP/IP дозволяють також запитувати цю
інформацію по мережі.
5.8. Імена
У більшості випадків файли "hosts" можуть бути однакові на всіх вузлах. Зауважимо,
що про вузлі delta в цьому файлі є всього один запис, хоча він має три
IP-адреси (рис.11). Вузол delta доступний з будь-якого з цих IP-адрес. Який з
них використовується, не має значення. Коли вузол delta одержує IP-пакет і
перевіряє IP-адреса місця призначення, то він впізнає будь-який з трьох своїх
IP-адрес.
Ці три рядки файлу hosts задають кожному IP-адресою вузла delta символьні імена.
Фактично, перший IP-адреса має два імені: "devnetrouter" і "delta", які
є синонімами. На практиці ім'я "delta" використовується як
загальновживане ім'я машини, а інші три імені - для адміністрування
мережі.
Файли hosts і networks використовуються командами адміністрування та прикладними
програмами. Вони не потрібні власне для роботи мережі internet, але полегшують її
використання.
5.9. IP-таблиця маршрутів
Як модуль IP дізнається який саме мережевий інтерфейс потрібно використовувати для
відправлення IP-пакету? Модуль IP здійснює пошук в таблиці маршрутів. Ключем
пошуку служить номер IP-мережі, виділений з IP-адреси місця призначення IP-пакету.
Таблиця маршрутів містить по одному рядку для кожного маршруту. Основними
стовпцями таблиці маршрутів є номер мережі, прапор прямої або непрямої
маршрутизації, IP-адреса шлюзу і номер мережевого інтерфейсу. Ця таблиця
використовується модулем IP при обробці кожного відправленого IP-пакету.
У більшості систем таблиця маршрутів може бути змінена за допомогою команди
"route". Зміст таблиці маршрутів визначається менеджером мережі, оскільки
менеджер мережі присвоює машин IP-адреси. 5.10. Подробиці прямий
маршрутизації
Вузол alpha посилає IP-пакет вузла beta. Цей пакет знаходиться в модулі IP вузла
alpha, та IP-адреса місця призначення дорівнює IP-адресою beta (223.1.2.2). Модуль IP з
допомогою маски підмережі виділяє номер мережі з IP-адреси і шукає відповідну
йому рядок у таблиці маршрутів. У даному випадку підходить перший рядок.
Інша інформація в знайденої рядку вказує на те, що машини цієї мережі
безпосередньо доступні через інтерфейс номер 1. За допомогою ARPтабліци виконується
перетворення IP-адреси до відповідного Ethernetадрес, і через інтерфейс 1
Ethernet-кадр надсилається вузла beta.
Якщо прикладна програма намагається послати дані по IP-адресу, який не
належить мережі development, то модуль IP не зможе знайти відповідну
запис у таблиці маршрутів. У цьому випадку модуль IP відкидає IP-пакет.
Деякі реалізації протоколу повертають повідомлення про помилку "Мережа не
доступна ". 5.12. Подробиці непрямої маршрутизації
Вузол alpha посилає IP-пакет вузла epsilon. Цей пакет знаходиться в модулі IP вузла
alpha, та IP-адреса місця призначення дорівнює IP-адресою вузла epsilon (223.1.3.2).
Модуль IP виділяє мережевий номер з IP-адреси (223.1.3) і шукає відповідну
йому рядок у таблиці маршрутів. Відповідність знаходиться в другому рядку.
Запис у цьому рядку вказує на те, що машини необхідної мережі доступні через
шлюз devnetrouter. Модуль IP у вузлі alpha здійснює пошук в ARP-таблиці, з
допомогою якого визначає Ethernet-адресу, відповідний IP-адресою
devnetrouter. Потім IP-пакет, який містить IP-адреса місця призначення epsilon,
надсилається через інтерфейс 1 шлюзу devnetrouter.
IP-пакет приймається мережевим інтерфейсом у вузлі delta і передається модулю IP.
Перевіряється IP-адреса місця призначення, і, оскільки він не відповідає ні
одному з власних IP-адрес delta, шлюз вирішує ретранслювати IP-пакет.
Вузол epsilon приймає IP-пакет, і його модуль IP перевіряє IP-адреса місця
призначення. Він відповідає IP-адресою epsilon, тому що міститься в IP-пакеті
повідомлення передається протокольному модулю верхнього рівня.
6. Встановлення маршрутів
До цих пір ми розглядали те, як використовується таблиця маршрутів для
маршрутизації IP-пакетів. Але звідки береться інформація у самій таблиці
маршрутів? У цьому розділі ми розглянемо методи, що дозволяють підтримувати
коректність таблиць маршрутів. 6.1. Фіксовані маршрути
Найпростіший спосіб проведення маршрутизації полягає в установці маршрутів при
запуску системи за допомогою спеціальних команд. Цей метод можна застосовувати в
щодо маленьких IP-мережах, особливо, якщо їх конфігурації не часто
змінюються.
На практиці більшість машин автоматично формує таблиці маршрутів.
Наприклад, UNIX додає записи про IP-мережах, до яких є безпосередній
доступ. Стартовий файл може містити команди
ifconfig ie0 128.6.4.4 netmask 255.255.255.0
ifconfig ie1 128.6.5.35 netmask 255.255.255.0 Вони показують, що існують дві
мережевих інтерфейсу, і встановлюють їх IP-адреси.
У стартовому файлі можуть бути команди, що визначають маршрути доступу до інших
IP-мереж. Наприклад,
route add 128.6.2.0 128.6.4.1 1
route add 128.6.6.0 128.6.5.35 0 Ці команди показують, що в таблицю маршрутів
повинні бути додані два записи. Перша адреса в командах є IP-адресою
мережі, друга адреса вказує шлюз, який повинен використовуватися для доступу до
даної IPсеті, а третій параметр є метрикою. Метрика показує, на якому
"відстані" знаходиться описувана IP-мережу. У даному випадку метрика це
кількість шлюзів на шляху між двома IP-мережами. Маршрути з метрикою 1 і більше
визначають перший шлюз на шляху до IP-мережі. Маршрути з метрикою 0 показують, що
ніякої шлюз не потрібен - даний маршрут задає додатковий мережевий номер
локальної IP-мережі.
Можна визначити маршрут за замовчуванням, який використовується в тих випадках, коли
IP-адреса місця призначення не зустрічається в таблиці маршрутів явно. Зазвичай
маршрут за замовчуванням вказує IP-адреса шлюзу, який має достатньо
інформації для маршрутизації IP-пакетів з усіма можливими адресами призначення.
Якщо ваша IP-мережа має всього один шлюз, тоді все, що потрібно зробити, - це
встановити єдину запис в таблиці маршрутів, вказавши цей шлюз як маршрут
за умовчанням. Після цього можна не дбати про формування маршрутів в інших
вузлах. (Звичайно, сам шлюз вимагає більше уваги.)
Наступні розділи присвячені IP-мереж, де є кілька шлюзів. 6.2.
Перенаправлення маршрутів
Більшість експертів з міжмережевої взаємодії рекомендують залишати
вирішення проблем маршрутизації шлюзів. Погано мати на кожній машині велику
таблицю маршрутів. Справа в тому, що при будь-які зміни в IP-мережі
доводиться змінювати інформацію в усіх машинах. Наприклад, при відключенні
якогось каналу зв'язку для відновлення нормальної роботи потрібно чекати,
поки хтось помітить це зміна в конфігурації IPсеті і внесе виправлення в
всі таблиці маршрутів.
Найпростіший спосіб підтримки адекватності маршрутів полягає в тому, що
зміна таблиці маршрутів кожної машини виконується за командами тільки одного
шлюзу. Цей шлюз повинен бути встановлений як маршрут за замовчуванням. (В ОС UNIX це
робиться командою "route add default 128.6.4.27 +1", де 128.6.4.27 є
IP-адресою шлюзу.) Як було описано вище, кожна машина посилає IP-пакет шлюзу
за умовчанням в тому випадку, коли не знаходить кращого маршруту. Однак, коли в
IP-мережі є кілька шлюзів, цей метод працює не так добре. Крім того,
якщо таблиця маршрутів має тільки один запис про маршрут за умовчанням, то як
використовувати інші шлюзи, якщо це вигідніше? Відповідь полягає в тому, що
більшість шлюзів здатні виконувати "перенаправлення" у тих випадках, коли вони
отримують IP-пакети, для яких існують більш вигідні маршрути.
"Перенаправлення" є спеціальним типом повідомлення протоколу ICMP (Internet
Control Message Protocol - протокол міжмережевих керуючих повідомлень). Повідомлення
про перенаправлення містить інформацію, яку можна інтерпретувати так: "В
майбутньому для IP-адреси XXXX використовуйте шлюз YYYY, а не мене ". Коректні
реалізації TCP/IP повинні використовувати повідомлення про перенаправлення для додавання
записів до таблиці маршрутів. Припустимо, таблиця маршрутів на початку виглядає
наступним чином:
Ця таблиця містить запис про локальну IP-мережі 128.6.4 і маршрут за замовчуванням,
вказує шлюз 128.6.4.27. Припустимо, що існує шлюз 128.6.4.30, який
є кращим шляхом доступу до IP-мережі 128.6.7. Як ним скористатися?
Припустимо, що потрібно посилати IP-пакети по IPадресу 128.6.7.23. Перший
IP-пакет піде на шлюз за замовчуванням, тому що це єдиний підходящий
маршрут, описаний в таблиці. Проте шлюз 128.6.4.27 знає, що існує
кращий маршрут, що проходить через шлюз 128.6.4.30. (Як він дізнається про це, ми
зараз не розглядаємо. Існує досить простий метод визначення кращого
маршруту.) У цьому випадку шлюз 128.6.4.27 повертає повідомлення
перенаправлення, де вказує, що IP-пакети для вузла 128.6.7.23 повинні
посилатися через шлюз 128.6.4.30. Модуль IP на машині-відправника повинен
додати запис в таблицю маршрутів:
До цих пір ми розглядали способи додавання маршрутів у IPтабліцу, але не
способи їх вилучення. Що трапиться, якщо шлюз буде вимкнено? Хотілося б мати
спосіб повернення до маршруту за замовчуванням після того, як будь-який маршрут
зруйнований. Однак, якщо шлюз вийшов з ладу або був вимкнений, то він вже не може
відправити повідомлення перенаправлення. Тому повинен існувати метод визначення
працездатності шлюзів, з якими ваша машина пов'язана н?? посередньо. Кращий
спосіб виявлення непрацюючих шлюзів заснований на виявленні "поганих" маршрутів.
Модуль TCP підтримує різні таймери, які допомагають йому визначити
розрив з'єднання. Коли трапляється збій, то можна помітити маршрут як "поганий"
і повернутися до маршруту за замовчуванням. Аналогічний метод може використовуватися при
обробці помилок шлюзу за замовчуванням. Якщо два шлюзу відзначені як шлюзи по
умовчанням, то машина може використовувати їх по черзі, перемикаючись між ними
при виникненні збоїв. 6.3. Слідкування за маршрутизацією
Зауважимо, що повідомлення перенаправлення не можуть використовуватися самими шлюзами.
Перенаправлення - це просто спосіб оповіщення звичайного вузла про те, що потрібно
використовувати інший шлюз. Самі шлюзи повинні мати повну картину про стан справ
в мережі internet і вміти обчислювати оптимальні маршрути доступу до кожної підмережі.
Звичайно вони підтримують цю картину, обмінюючись інформацією між собою. Для
цього існують кілька спеціальних протоколів маршрутизації. Один з
способів, за допомогою якого вузли можуть визначати діючі шлюзи, полягає в
стеження за обміном повідомленнями між ними. Для більшості протоколів
маршрутизації існує програмне забезпечення, що дозволяє звичайним вузлів
здійснювати таке стеження. При цьому на вузлах підтримується повна картина
стану справ в мережі internet точно також, як це робиться в шлюзах.
Динамічна коригування таблиці маршрутів дозволяє посилати IP-пакети по
оптимальними маршрутами.
Таким чином, спостереження за маршрутизацією в певному сенсі "вирішує" проблему
підтримання коректності таблиць маршрутів. Однак існують кілька причин,
по яких цей метод застосовувати не рекомендується. Найбільш серйозною проблемою
є те, що протоколи маршрутизації поки що піддаються частим
перегляду та змін. З'являються нові протоколи маршрутизації. Ці
зміни повинні враховуватися в програмному забезпеченні всіх машин.
Кілька більш спеціальна проблема пов'язана з бездискових робочими станціями.
За своєю природою бездискові машини сильно залежать від мережі і від файл-серверів, з
яких вони здійснюють завантаження програм, і де розташовується їх область
своппінга. Виконання програм, що стежать за широкомовними передачами в
мережі, на бездискових машинах пов'язано з великими труднощами. Протоколи
маршрутизації побудовані в основному на широкомовних передачах. Наприклад, усі
мережеві шлюзи можуть широкомовно передавати зміст своїх таблиць
маршрутів через кожні 30 секунд. Програми, які стежать за такими
передачами, повинні бути завантажені на бездискові станції через мережу. На
досить зайнятої машині програми, які не використовуються протягом
декількох секунд, зазвичай відправляються в область своппінга. Тому програми,
стежать за маршрутизацією, більшу частину часу перебувають у своппінг