franta-hg@0
|
1 |
STDIO-FS
|
franta-hg@0
|
2 |
--------
|
franta-hg@0
|
3 |
|
franta-hg@0
|
4 |
Souborový systém (FUSE) komunikující přes standardní vstup/výstup (STDIO).
|
franta-hg@0
|
5 |
Tzn. jeden kanál, který lze posílat buď mezi dvěma procesy lokálně (nemá moc velký smysl)
|
franta-hg@0
|
6 |
nebo po síti – tunelovaně např. unitř SSH, nebo nešifrovaně přes obyčejné TCP.
|
franta-hg@0
|
7 |
|
franta-hg@0
|
8 |
Skládá se ze dvou částí:
|
franta-hg@0
|
9 |
- server – zpřístupňuje skutečný souborový systém pomocí STDIO zvláštním protokolem
|
franta-hg@0
|
10 |
- klient – FUSE souborový systém, který se připojuje k serveru
|
franta-hg@0
|
11 |
|
franta-hg@0
|
12 |
|
franta-hg@0
|
13 |
Požadavky
|
franta-hg@0
|
14 |
---------
|
franta-hg@0
|
15 |
|
franta-hg@0
|
16 |
- pouze jeden kanál pro všechny operace → multiplexování (lze např. kopírovat dva soubory současně)
|
franta-hg@0
|
17 |
- efektivní binární protokol
|
franta-hg@0
|
18 |
- zpřístupnit co nejvíce informací o souborech včetně rozšířených atributů a pravdivého údaje o obsazeném místě na disku
|
franta-hg@0
|
19 |
- pomocí rozšířených atributů zpřístupnit další nestandardní informace a funkce – např. umožnit výpočet hashe souboru na serveru → po síti (STDIO) se pak přenese pouze otisk, ne celý soubor
|
franta-hg@0
|
20 |
|
franta-hg@1
|
21 |
Příklad použití
|
franta-hg@1
|
22 |
---------------
|
franta-hg@1
|
23 |
|
franta-hg@1
|
24 |
Typické použití bude pro sdílení souborového systému směrem z desktopu na vzdálený server.
|
franta-hg@1
|
25 |
Uživatel na desktopu zadá něco jako:
|
franta-hg@1
|
26 |
$ socat EXEC:"stdio-fs-server /home/…/sdílený-adresář" EXEC:"ssh example.com stdio-fs-klient /home/…/bod-připojení"
|
franta-hg@1
|
27 |
|
franta-hg@0
|
28 |
|
franta-hg@0
|
29 |
Implementatce
|
franta-hg@0
|
30 |
-------------
|
franta-hg@0
|
31 |
|
franta-hg@0
|
32 |
- klient i server by měly být ve finální verzi v C++ případně v C
|
franta-hg@0
|
33 |
- prototyp může být v libovolném jazyce – Java, Perl?
|
franta-hg@0
|
34 |
- server může mít více implementací – pracuje pouze se standardním vstupem/výstupem a soubory, nemá nic spolenčného s FUSE
|
franta-hg@0
|
35 |
- neřešíme bezpečnost – případné šifrování si řeší uživatel o úroveň níž (SSH, TLS) podle svých potřeb
|
franta-hg@0
|
36 |
- vrstvu, která se stará o multiplexování by bylo dobré napsat jako znovupoužitelnou knihovnu
|
franta-hg@0
|
37 |
|
franta-hg@0
|
38 |
|
franta-hg@0
|
39 |
Multiplexování
|
franta-hg@0
|
40 |
--------------
|
franta-hg@0
|
41 |
|
franta-hg@0
|
42 |
- přes jeden kanál (vstupní a výstupní proud) umožnit přenos libovolného počtu virtuálních kanálů
|
franta-hg@0
|
43 |
- kusy dat se označí číslem virtuálního kanálu a poskládají se do STDIO proudu
|
franta-hg@0
|
44 |
- na druhé straně se opět dekódují a rozloží jako samostatné kanály
|
franta-hg@0
|
45 |
- budeme mít nultý servisní kanál, který slouží k řízení toku a přenosu dalších metadat, tento kanál je prioritní
|
franta-hg@0
|
46 |
- ostatní kanály se vytváří na přání – podobně jako se vytvářejí TCP spojení
|
franta-hg@0
|
47 |
- klientem (iniciátorem kanálu) i serverem u virtuálních kanálů můžou být obě strany
|
franta-hg@0
|
48 |
- je potřeba řešit zahlcení
|
franta-hg@0
|
49 |
- když se z jednoho virtuálního kanálu nebude číst vůbec nebo pomalu, musí být možné číst ostatní kanály, aniž by bylo potřeba čekat na odbavení paketů pomalejšího kanálu
|
franta-hg@0
|
50 |
- částěčně lze řešit mezipamětí
|
franta-hg@0
|
51 |
- pokud dojde k jejímu zaplnění na straně příjemce, je potřeba odesílateli sdělit, že má přestat na tomto kanále posílat data a posílat zatím data jiných kanálů
|
franta-hg@0
|
52 |
- pokud odesílatel neposlechne, dojde k zablokování a je potřeba počkat, až budou pakety tohoto pomalejšího kanálu odbaveny na straně příjemce (do té doby bude zablokována i komunikace na všech ostatních kanálech)
|
franta-hg@0
|
53 |
- v krajním případě může nespokojený příjemce reagovat na neposlušného odesílatele odpojením – před tím pošle servisním kanálem informaci, proč ukončuje spojení
|
franta-hg@0
|
54 |
- kanál je možné odblokovat:
|
franta-hg@0
|
55 |
- po uplynutí určitého času (stanovený v požadavku na blokaci)
|
franta-hg@0
|
56 |
- po odvolání blokace příjemcem (řekne, že už má místo na další data)
|
franta-hg@0
|
57 |
- pokud v ostatních kanálech nejsou žádná data k odeslání
|
franta-hg@0
|
58 |
- potenciálně nebezpečné – může opět dojít k zahlcení tohoto kanálu a v té době už se objeví data v jiných kanálech a nepůjde je odeslat
|
franta-hg@0
|
59 |
- musí být povoleno příjemcem
|
franta-hg@0
|
60 |
- mohlo by jít řídit rychlost jednotlivých kanálů
|
franta-hg@0
|
61 |
- plynulá komunikace, bez blokování
|
franta-hg@0
|
62 |
- příjemce řekne, jakou rychlostí je schopný odbavovat data na daném kanále
|
franta-hg@0
|
63 |
- průběžně lze rychlost měnit
|
franta-hg@0
|
64 |
|