Що за протокол такий tftp ~ мережеві заморочки
Знову здрастуйте дорогі друзі! За вікном не по весняному холодна погода, пробивається сніжок, але я думаю це не завадить нам сьогодні, разом з вами познайомитися з одним дуже цікавим протоколом прикладного рівня - протоколом TFTP.
Протокол TFTP (Trivial File Transfer Protocol. Простий протокол передачі файлів) як би це по кепскі звучить, призначений для передачі файлів =) У звичайний життя рядового користувача він зустрічається досить рідко, так як в основному застосовується для вирішення завдань пов'язаних з обслуговуванням і експлуатацією мережевого обладнання, а саме:
- завантаження бездискових робочих станцій;
- оновлення та резервного копіювання конфігураційних файлів і образів ОС (прошивок) на найрізноманітніші мережеві пристрої.
Звичайно, ніхто не заважає вам за допомогою даного протоколу завантажувати різні файли з комп'ютера свого друга, але це в наш час вже пахне збоченнями.
Формат повідомлень протоколу TFTP досить простий і має такий вигляд:
Формат повідомлень протоколу TFTP
Поле тип визначає призначення повідомлення (запит на читання, запис, передача даних, підтвердження або ж помилки) і може містити наступні значення:
- RRQ (Read Request) - запит на читання файлу. Дане значення з'являється в повідомлення TFTP. в тому випадку якщо ми збираємося скачати з TFTP сервера деякий файл;
- WRQ (Write Request) - запит на запис файлу. Дане значення з'являється в повідомлення TFTP. в тому випадку якщо ми збираємося записати на TFTP сервер деякий файл;
- DATA - дані, що передаються через TFTP. Дане значення з'являється в повідомлення TFTP. в тому випадку якщо це повідомлення містить безпосередньо дані передаються від клієнта до сервера або ж навпаки.
- ACK (Acknowledgment) - підтвердження блоку даних. Дане значення з'являється в повідомлення TFTP. в тому випадку якщо попередній передається блок даних був успішно прийнятий одержувачем (або ж якщо сервер може здійснити запис файлу).
- ERR (Error) - помилка. Дане значення з'являється в повідомлення TFTP. в тому випадку якщо на попередньому етапі роботи протоколу сталася помилка, наприклад був відсутній запитуваний файл, або ж був відсутній дозвіл на його читання.
Поле ім'я файлу містить у собі рядок, яка як не дивно відповідає імені файлу, який клієнт хоче записати / завантажити на / c сервер (а).
Поля кінець рядка, служать для поділу полів несучих інформацію між собою.
Поле режим передачі відповідає, знову ж як не дивно, за режим передачі, і може містити в собі одне з двох значень, представлених у вигляді ASCII рядка:
- netascii - вказує на те, що файл перед початком передачі повинен бути перекодований в ASCII (використовується за умовчанням);
- octet - вказує на те, що файл повинен передаватися без змін.
Поля номер блоку служать для нумерації переданих блоків інформації.
Поле дані містить блоки інформації, що передається розміром від 0 до 512 байт. Якщо розмір переданого файлу перевищує 512 байт, то все блоки, на які розбивається файл, крім останнього мають фіксований розмір дорівнює 512 байт, останній передається блок даних може мати розмір від 0 до 511 байт.
Після того як ми ознайомилися з форматом повідомлень протоколу TFTP. подивимося як ці повідомлення застосовуються при запису або читання файлу з сервера. Для початку розглянемо процес читання файлу з сервера.
Читання файлу з сервера використовуючи протокол TFTP
У початковий момент часу сервер TFTP очікує запитів від своїх клієнтів. Якщо одному з клієнтів необхідно отримати доступ до файлів, що знаходяться на TFTP сервері, то він відправляють запит RRQ до TFTP сервера. Якщо даний файл є на сервері і до нього можна отримати доступ, то починається процес передачі і сервер відправляє клієнту перший блок, що містить 512 байт даних (якщо ж запитаний файл не доступний, то сервер генерує повідомлення про помилки, передає його клієнту. На цьому процес передачі припиняється). Клієнт отримавши блок даний з номером 1 генерує підтвердження отримання ACK даного блоку, і так само дає йому номер 1. Отримавши дане підтвердження сервер починає передачу наступного блоку даних. (В разі, якщо підтвердження про отримання блоку даних не було отримано до закінчення часу очікування, сервер здійснює повторну передачу втраченого блоку.) Даний процес передачі відбувається до тих пір, поки всі блоки даних, на які був розбитий файл, що не будуть передані.
Тепер розглянемо процес запису файлу на TFTP сервер, він схожий з процесом читання, але має свої відмінності.
Запис файлу на TFTP сервер
У початковий момент часу сервер TFTP очікує запитів від своїх клієнтів. Якщо одному з клієнтів необхідно записати файл на TFTP сервер, то він відправляють запит WRQ до TFTP сервера. Якщо сервер може здійснити запис даного файлу, то він генерує повідомлення ACK з номером блоку рівним 0, і відправляє його запити клієнтів, це повідомлення означає згоду сервера на запис (якщо сервер не може здійснити запис даного файлу, то генерується повідомлення про помилку, яке відправляється клієнту. На цьому процес запису завершується.). Клієнт отримавши повідомлення ACK з номером блоку рівним 0, починає передачу перших 512 байт файлу на сервер, пересилаючи їх в повідомлення DATA з номером блоку 1. Якщо сервер отримує даний блок, то він генерує повідомлення ACK з номером блоку 1. Так відбувається до тих пір поки сервер не отримує блок даних розміром менше 512 байт. В такому випадку він підтверджує отримання останнього блоку даних і запис на цьому завершується.
Незалежно від того, який тип повідомлення TFTP відправляється (WRQ, RRQ, ACK і т.д.) при пересилання від клієнта до сервера (або в зворотному напрям), дані повідомлення упаковуються в UDP датаграми з портом призначення 69 (порт клієнта вибирається динамічно) , які инкапсулируются в IP пакети. Як вже вище було сказано при роботі протоколу TFTP використовується не гарантує доставку протокол транспортного рівня UDP. але це не викликає проблем у роботі протоколу TFTP. так як підтвердження доставки повідомлень здійснюється засобами прикладного рівня (самого протоколу TFTP).
На закінчення хотілося б звернути вашу увагу на те, що протокол TFTP не містить вбудованих засобів безпеки, наприклад таких як перевірка логіна або пароля. Тому при його використання потрібно бути особливо акуратним.
Дякую за увагу до нових зустрічей.