UDP/TCP File System, Trivial Remote File System

Сьогодні вихідний, так що напишу коротко про дрібниці, до яких, як правило, руки не доходять.

TCP FS



Є ще одна річ, якої немає в сучасному Юниксе і яку я хочу мати в unix box фантома. Вона проста, як мукання, і чому її ніхто не зробив — незбагненно:

#cat /tcp/host/port > local_file


Правда, я хочу використовувати інший синтаксис імені файлу, URL style — tcp://host:port, але це вже деталі. Природно, нарівні з TCP проситься UDP, і там взагалі проблем немає.

Заголовок спойлераВзагалі unix-підсистема Фантома «їсть» як традиційні Юниксовые імена, /usr/include/stdio.h, так і URL-і, tcp://ya.ua:80.


Для TCP є очевидна проблема — чи потрібен нам listen або connect, але її можна вирішити через вказівку імені файлу» певного суфікса.

Сказати на цю тему настільки більше нічого, що перейдемо без зупинки до наступної.

TRFS — тривіальна дистанційна файлова система.



В одному з тестових середовищ Фантом працював на машині без диска і хотілося організувати дистанційний пейджинг по мережі. Для цього я зробив мінімальну мережеву ФС.

Посилання:



Протокол нагадує дубовостью tftp, але допускає асинхронність — запит не зобов'язаний синхронно чекати відповіді, натомість клієнт відправляє запити без очікування і сорому, може отримувати відповіді вроздріб і перезапрашивает неотримане по таймауту.

Обмін йде секторами. Фактично, сам використовує протокол Фантом саме як remote disk.

Звернення до файлу йде за ідентифікатором сесії і ідентифікатора файлу. Це дозволяє при необхідності опустити розіменування і працювати з файлами за фіксованим номерами — знову ж таки, в цій реалізації так і зроблено, Фантом завжди просить файл номер нуль, сервер сам знає, де його шукати. Але є і запит «отримати номер по імені».

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

Протокол легкий у плані реалізації настільки, що навіть сервер можна заштовхати в слабкий мікроконтролер. А вже клієнта і поготів.

Протокол працює поверх UDP. Користуйтеся на здоров'я, коли буде потрібно. При всій простоті в силу асинхронності та out of order resend-а протокол досить ефективний. Тільки якщо потрібно впорядковане виконання запитів — це потрібно забезпечувати зовні. Сам TRFS щасливо відпрацює в порядку приходу відповідей по мережі.

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.