Het idee is ontstaan wegens het ongelooflijke gekloot met FTP.
Vooral het active/passive mode probleem is een ramp.
FTP2 moet in elk geval dit probleem oplossen,
en zeer waarschijnlijk ook verdere verbeteringen doorvoeren.
Iets waar ook zeker aan gedacht moet worden is om ftp servers te linken.
Zodat je of vanaf random mirrors kan downloaden (alle data gespiegeld),
of een overzicht hebt van alle files op alle servers.
Als proof of concept zullen we een client en een server maken.
De proof of concept client en server zullen in C geschreven worden.
Gezien het 'FTP2' is, is het doel om hetzelfde te doen als FTP,
maar dan (volgens ons) beter.
Denk bij mirroren aan distributie van verschillende programma's (OSs, andere Open source dingen, etc).
Denk bij het FTP-netwerk aan het sharen van veel verschillende tools.
Maar natuurlijk ook voor de webdeveloper om zijn files naar de server te uploaden, waarbij mirroren weer minder kan zijn.
# Top
Backwards compatibility
Hier zijn we nog niet over uit,
grote voordelen zijn dat mensen de client kunnen blijven gebruiken die ze fijn vinden.
grote nadeel is dus dat FTP, naar onze mening, slecht is,
en dat we dan alsnog het zeer ongewenste 'active/passive' mode systeem in de servers moeten programmeren.
Het idee is dat als er een RETR of STOR wordt gedaan (up/down load),
Dat er dan een dataconnectie wordt geopend,
De client initiëerd deze door opnieuw naar de port van de ftp2d te connecten.
en door in plaats van in te loggen een token mee te geven die de server over de control-connectie heeft gegeven.
Er wordt een bloksize afgesproken, de 'verzender' schrijft steeds dit aantal bytes,
gevolgd door een checksum daarvan over de control-connectie.
De 'ontvanger' controleert dit met zijn checksum, en schrijft eventueel een error,
die de server triggert dat stuk nog eens te schrijven.
Aan het einde van de transfer sluit de client de data-connectie.
Voor het mirroren zijn op dit moment 2 ideeëen/mogelijkheden:
Master/Slave
De files kunnen alleen op de master gewijzigd worden, die stuurt het naar alle slaves,
indien een slave (na een netsplit) connect stuurt de master alle files met een andere checksum.
Of er een global master of per-file/dir-master wordt ingesteld is nog niet duidelijk.
Last modified
Als een file ergens wordt veranderd stuurt deze server dit rond.
Indien na een netsplit een server reconnect wordt aan de hand van de last-modification-time gekozen welke file gemirrord wordt (laaste MT).
In de Master/Slave situatie komt er misschien nog een validatie algorithme,
stel dat de slaves niet vertrouwd zijn, dan dat een checksum van de master komt.
Dit wordt in elk geval optioneel.
Dit is het linken van meerdere servers met verschillende files.
De client connect naar 1 server, en ziet de files van alle servers,
en download het (mogelijk) van een andere server dan waar hij mee is geconnect.
alweer 2 ideëen:
Directories met servernamen
Dit is niet erg overzichtelijk, maar wel handig als je weet op welke server staat wat je zoekt.
Maar dit heeft geen problemen met dubbele files (zie Mergen)
Mergen
Dit geeft problemen als er verschillende files met dezelfde naam (+path) zijn,
maar lijkt ons verder handiger om te doorzoeken.
We denken dat we dit allebei gaan implementeren,
zodat per installatie (per netwerk beter gezegd) gekozen kan worden welke mode het handigst is.
Voor bijvoorbeeld het delen van muziek is 'Merge' practischer.
Dit gaat waarschijnlijk een setting worden,
voor inloggen (behalve Anonymous) is encryptie zeker nodig.
Encryptie van de control-connectie willen we zeker supporten,
dit kan mogelijk nuttig zijn, als de filenames al geheime dingen bevatten.
Bovendien gaat er niet veel data over de control-connectie,
en zou encryptie niet veel extra rekenkracht kosten.
Voor de transfer van muziek is encryptie niet nodig,
voor de transfer van geheime gegevens (bankdata etc) is dit zeker gewenst.