548 lines
23 KiB
Plaintext
548 lines
23 KiB
Plaintext
<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook V4.1//EN" [
|
|
<!-- define some ENTITYs -->
|
|
<!ENTITY fsp "File Service Protocol">
|
|
]>
|
|
<article id="fsp-faq" lang="en">
|
|
<articleinfo>
|
|
<title>FSP - &fsp; FAQ</title>
|
|
<author>
|
|
<firstname>Sven</firstname>
|
|
<othername>"Hoaxter"</othername>
|
|
<surname>Hoexter</surname>
|
|
</author>
|
|
<author>
|
|
<firstname>Radim</firstname>
|
|
<othername>"HSN"</othername>
|
|
<surname>Kolar</surname>
|
|
<affiliation>
|
|
<address><email>hsn@sendmail.cz.nospam</email></address>
|
|
</affiliation>
|
|
</author>
|
|
<copyright>
|
|
<year>2003-2004</year>
|
|
<holder>Authors</holder>
|
|
</copyright>
|
|
<!-- I'll call it 0.1 later
|
|
<revhistory>
|
|
<revision>
|
|
<revnumber>0.1</revnumber>
|
|
<date>2003.09.10</date>
|
|
</revision>
|
|
</revhistory>
|
|
-->
|
|
<!-- starting with some general stuff -->
|
|
<abstract>
|
|
<para>
|
|
This document is a major rewrite of the old
|
|
<ulink url="http://fsp.sourceforge.net/doc/faq.html">FSP FAQ</ulink>.
|
|
I started with this FAQ from scratch cause nearly all parts of the old FAQ where outdated. This new FAQ is maintained
|
|
in DocBook SGML. Send patches to the fsp-devel Mailinglist (FIXME link to id gethelpml) or directly to me
|
|
<email>sven@du-gehoerst-mir.de-nospam</email>. You should be able to find the latest SGML version of this FAQ in the
|
|
<ulink url="http://sourceforge.net/cvs/?group_id=93841">fsp CVS at sf.net</ulink> or here
|
|
<ulink url="http://sven.stormbind.net/fsp/fsp-doc/fsp-faq.sgml">http://sven.stormbind.net/fsp/fsp-doc/fsp-faq.sgml</ulink>
|
|
(be aware the sf.net public CVS is often about a week behind the "real" CVS :( )
|
|
</para>
|
|
</abstract>
|
|
</articleinfo>
|
|
<!-- end of the general stuff -->
|
|
|
|
<!-- starting with the main document -->
|
|
|
|
<!-- starting with the introduction -->
|
|
<sect1 id="introduction">
|
|
<title>Introduction</title>
|
|
|
|
<sect2 id="whatisfsp">
|
|
<title>What is FSP?</title>
|
|
<para>
|
|
FSP stands for &fsp;. In general FSP is what anonymous ftp should be: a reliable and bandwidth friendly
|
|
way to access publicly available data.
|
|
<para>
|
|
FSP is a UDP based protocol for transferring files around. It has
|
|
many benefits over FTP, mainly for running
|
|
anonymous archives. FSP protocol is valuable in all kinds of
|
|
environments because it is one of the only TCP/IP protocols that is not
|
|
aggressive about bandwidth, while still being sufficiently fault tolerant.
|
|
</para>
|
|
</sect2>
|
|
<sect2 id="fsp-project">
|
|
<title>FSP Project</title>
|
|
<para>
|
|
FSP is (and always has been) open source project with MIT/X11 source
|
|
code license. See <xref linkend="licence"> for more details.
|
|
<para>
|
|
In the past various people maintained the FSP code base.
|
|
At the moment Radim Kolar
|
|
is maintaining FSP. FSP project is now hosted on
|
|
<ulink url="http://sourceforge.net">Source Forge.NET</ulink>.
|
|
<para>
|
|
If you like to get involved take a look at the FSP
|
|
<ulink url="http://fsp.sourceforge.net">Homepage</ulink> and the
|
|
<ulink url="http://www.sourceforge.net/projects/fsp/">FSP project page</ulink>.
|
|
</para>
|
|
</sect2>
|
|
<sect2 id="whatisitfor">
|
|
<title>Why and for what should I use FSP?</title>
|
|
<para>
|
|
The &fsp; has its strengths on slow lines and connections with a high packets lose like a Wireless LAN or radio packet networks. Because FSP is simple
|
|
and lightweight, it is very well suited for use in embedded devices area.
|
|
<para>
|
|
FSP protocol is not aggressive about bandwidth and was designed
|
|
to resist against users which want to do some bandwidth-related attacks.
|
|
It can support more users, because the same available
|
|
bandwidth is divided into smaller parts.
|
|
Because FSP uses less bandwidth, FSP transfers takes about
|
|
2-3 times longer than with TCP-based protocols.
|
|
<para>
|
|
FSP protocol
|
|
chooses reliability and simplicity over raw transfer speed.
|
|
File transfer takes longer, but there are much more resistant
|
|
against network failure.
|
|
<para>
|
|
Entire connection management is moved from server to client side,
|
|
which solves problems with aborted and timed out transfer. Because
|
|
FSP is stateless protocol, it can survive even server reboot without
|
|
interruption.
|
|
</para>
|
|
</sect2>
|
|
<sect2 id="comparison">
|
|
<title>Comparison between fsp and other protocols</title>
|
|
<para>
|
|
We did some benchmarking so that you can see how fsp performance
|
|
compared to various other command protocols used to transfer
|
|
files.
|
|
<sect2 id="benchresults">
|
|
<title>Benchmark results</title>
|
|
<para>
|
|
You should understand that FSP is slower than TCP
|
|
based protocols by design. TCP protocol can have more than
|
|
one packet flying in network (usually 2-3) while FSP was designed to
|
|
make it impossible (See <xref linkend="keying">).
|
|
<para>
|
|
All TCP protocols have on normal networks
|
|
(max 15% packet loss) higher transfer rate than FSP.
|
|
FSP is clean winner when it comes to overloaded sites or lines.
|
|
These benchmarks were performed on 10Mbit LAN with zero traffic.
|
|
Transfer rate is quite slow even for 10Mb because one of testing
|
|
machines was old AMD K5/90 and both machines used cheap clone ISA NE2000 Ethernet cards.
|
|
<para>Test file was 3656535 bytes long (FreeBSD kernel image).
|
|
Test results shows, that FSP is about 2-2.5 times slower than TCP.
|
|
<programlisting>
|
|
tftp 15.2 secs 240.6 kB/s
|
|
ftp 5.18 secs 688.7 kB/s
|
|
http 5.32 secs 685.4 KB/s
|
|
sftp 8.0 secs 446.4 KB/s
|
|
fsp 12.7 secs 287.7 kB/s
|
|
</programlisting>
|
|
</para>
|
|
<sect3 id="comparehttp">
|
|
<title>FSP vs. http</title>
|
|
<para>
|
|
HTTP: widely supported by servers, clients and proxies.
|
|
De-facto standard protocol for accessing information today.
|
|
<para>
|
|
FSP: Can provide directory listings, which are not supported
|
|
by standard HTTP/1.1 protocol. You need to have configured
|
|
WebDAV server-side extension for that.
|
|
</para>
|
|
</sect3>
|
|
<sect3 id="compareftp">
|
|
<title>FSP vs. ftp</title>
|
|
<para>
|
|
FTP: widely supported by servers and clients, more difficult
|
|
to proxy than HTTP, uses 2 TCP connections, can provide directory
|
|
listings in site-specific format, more heavy service than HTTP.
|
|
<para>
|
|
FSP: do not needs to make any connection, very lightweight service,
|
|
directory listings are standardized by protocol.
|
|
</sect3>
|
|
<sect3 id="comparetftp">
|
|
<title>FSP vs. tftp</title>
|
|
<para>
|
|
tftp is UDP (but TCP version also exists) used mainly
|
|
for loading boot and flash ROM images from network.
|
|
<para>
|
|
TFTP: more widely used, standardized, most network cards
|
|
can boot image via TFTP.
|
|
<para>
|
|
FSP: about 1.5-times faster because of bigger packet size,
|
|
supports directory listings,
|
|
can query file date and size,
|
|
can provide random access to file and supports opening
|
|
more than one file, supports access control, timeout
|
|
management moved to client side, stateless.
|
|
</para>
|
|
</sect3>
|
|
</sect2>
|
|
<sect2 id="whyfspd">
|
|
<title>Why should I run fspd?</title>
|
|
<para>
|
|
If you are providing anonymous archive (FTP,WWW), you should also
|
|
offer FSP access. FSP daemon is a very lightweight process, never
|
|
forks and you will never have more than one copy running around.
|
|
On todays machines, it has zero performance impact.
|
|
<para>
|
|
Running fspd allows people with overloaded or lousy lines to get
|
|
files from your archive. It also helps people during spikes periods
|
|
when archive is very busy.
|
|
<para>
|
|
There are also some people which likes slower FSP downloads, because
|
|
it saves their bandwidth for interactive tasks.
|
|
<para>
|
|
It is not true that UDP based protocols are unsecure. &fsp; provides
|
|
the same security level as anonymous FTP and is much more resistant
|
|
against denial of service attack. It is nearly impossible to overload
|
|
fsp server by flooding. On other side, TCP-based protocols are very
|
|
simple to SYN flood.
|
|
<sect2 id="wherecanifind">
|
|
<title>Where can I download FSP?</title>
|
|
<para>
|
|
You can Download the FSP source Distribution from the
|
|
<ulink url="http://sourceforge.net/project/showfiles.php?group_id=93841">sf.net mirror network</ulink>
|
|
or from
|
|
<ulink url="http://ibiblio.org/pub/linux/system/network/file-transfer/">ibblio</ulink>.
|
|
If you have the FSP tools already you can access the latest FSP release
|
|
via fsp on hxt.homelinux.org or wrack.telelev.net both running fspd on
|
|
port 2221.
|
|
</para>
|
|
<para>
|
|
When you're interested in the latest, and of course greatest,
|
|
development done in FSP please try a CVS checkout.
|
|
Explanation and all needed information to do this can be found
|
|
on the
|
|
<ulink url="http://sourceforge.net/cvs/?group_id=93841">sf.net CVS page</ulink>.
|
|
</sect2>
|
|
|
|
<sect2 id="gethelp">
|
|
<title>Where can I find help?</title>
|
|
<para>
|
|
First of all various people took the time to write nice documentation on FSP including the fspd Server
|
|
and the client tools. Please read those fine documents before you start writing to the mailinglists.
|
|
</para>
|
|
<sect3 id="gethelpdocs">
|
|
<title>RTFM - Read the fine Manuals</title>
|
|
<para>
|
|
<ulink url="http://fsp.sourceforge.net/doc/PROTOCOL.txt">The &fsp; definition</ulink>
|
|
The latest version of the FAQ,
|
|
The <ulink url="http://fsp.sourceforge.net/doc/faq.html">old FSP FAQ</ulink>.
|
|
</para>
|
|
</sect3>
|
|
<sect3 id="gethelpml">
|
|
<title>The Mailinglists</title>
|
|
<para>
|
|
For developing issue writte to the fsp-dev mainlinglist. For end-user questions
|
|
and questions on how to configure your server/client write to the fsp-user Mailinglist.
|
|
You can find more information on how to subscribe/unsubscribe to the mailinglist and
|
|
the archive on the
|
|
<ulink url="http://sourceforge.net/mail/?group_id=93841">FSP mailinglist page</ulink>
|
|
on sf.net.
|
|
Please before you write to one of the provided mailinglists read and understand
|
|
<ulink url="http://www.catb.org/~esr/faqs/smart-questions.html">ESRs HowTo ask smart questions</ulink>
|
|
and
|
|
<ulink url="http://www.netmeister.org/news/learn2quote.html">learn.to/quote</ulink>
|
|
</para>
|
|
</sect3>
|
|
</sect2>
|
|
|
|
<sect2 id="licence">
|
|
<title>Licence, copyright and redistribution of FSP</title>
|
|
<para>
|
|
FSP code base uses MIT/X11 license (also known as 2-point BSD
|
|
license). This license is very friendly to users in commercional area.
|
|
You can freely develop, use and sell your commercional implementation of &fsp;.
|
|
<orderedlist>
|
|
<listitem>
|
|
<para>Do not claim that you have wrote this software.
|
|
</listitem>
|
|
<listitem>
|
|
<para>Do not sue us if something breaks.
|
|
</listitem>
|
|
</orderedlist>
|
|
Summary: As long as you will not remove our copyrights from source code
|
|
and will not go with your complains to the court, you can
|
|
do with this software anything you want.
|
|
</para>
|
|
<para>
|
|
From the COPYRIGHT file in the source distribution (e-mail addresses removed):
|
|
<programlisting>
|
|
Authors:
|
|
Radim Kolar (Current FSP maintainer)
|
|
Andrew Doherty
|
|
Michael Fischbein
|
|
Cimarron D. Taylor
|
|
Guido van Rossum
|
|
Wen-King Su
|
|
Philip G. Richards
|
|
Michael Meskes
|
|
Rich $alz
|
|
gjc@mitech.com
|
|
Joseph_Traub
|
|
Sven (VMS port maintainer)
|
|
Very Mad Students, University of Karlsruhe, FRG (VMS port)
|
|
|
|
Copyright:
|
|
All of the FSP code is free software. Most of fsp falls under two
|
|
copyrights, the 2-point BSD copyright and one by Wen-King Su:
|
|
|
|
Copyright (c) 1991 by Wen-King Su (wen-king@vlsi.cs.caltech.edu)
|
|
You may copy or modify this file in any manner you wish, provided
|
|
that this notice is always included, and that you hold the author
|
|
harmless for any loss or damage resulting from the installation or
|
|
use of this software.
|
|
|
|
Other contributions to fsp fall under different copyrights:
|
|
|
|
This file is Copyright 1992 by Philip G. Richards. All Rights Reserved.
|
|
See the file README that came with this distribution for permissions on
|
|
code usage, copying, and distribution. It comes with absolutely no warranty.
|
|
|
|
Copyright (c) 1993 by Michael Meskes
|
|
You may copy or modify this file in any manner you wish, provided
|
|
that this notice is always included, and that you hold the author
|
|
harmless for any loss or damage resulting from the installation or
|
|
use of this software.
|
|
</programlisting>
|
|
</para>
|
|
</sect2>
|
|
|
|
<sect2 id="projecthistory">
|
|
<title>Project history</title>
|
|
<para>
|
|
This should give you a short overview over the development of the &fsp;
|
|
in the past and today.
|
|
</para>
|
|
<sect3 id="histpast">
|
|
<title>The past</title>
|
|
<para>
|
|
FSP development started in a very old days. From source code and man
|
|
page time stamps we can see that it was working and alive in 1988.
|
|
FSP versions 1.0 and 2.0 was born in Dec 1991. After that two first
|
|
releases FSP goes to the active life.
|
|
|
|
<para>
|
|
FSP active development era ends in May 1993 when last official
|
|
version 2.7.1 was released. It was quite popular at that time,
|
|
mainly because it was superior way for transferring warez around
|
|
when compared with FTP. Because of this, FSP protocol got a bad
|
|
name and suffers from it even today. I see that FSP warez era
|
|
as practical demonstration how can FSP perform nicely on
|
|
overloaded sites and lines.
|
|
|
|
<para>
|
|
After that then was some work on
|
|
FSP in 1995 and which ends with now famous FSP version 2.8.1b3
|
|
in March 1996. This version is used on some
|
|
servers today because Debian Woody has it, but 2.7.1 is still
|
|
used on some forgotten machines in universities. It has also
|
|
known security issues (fspd follows symlinks), but at this
|
|
time there were viewed as feature, not a bug.
|
|
|
|
<para>
|
|
Radim Kolar released 2.8.1b4 in 2001, which was just some bugfixed
|
|
version of 2.8.1b3 untouched from 1997 when I ported it to OS/2.
|
|
Active working on FSP again starts on 25 June 2003 when Version
|
|
2.8.1b5 goes out. Major parts of FSP server code was rewrited
|
|
for higher performance and many old bugs in FSP code fixed.
|
|
|
|
<para>
|
|
In the past various people worked on the &fsp;, see
|
|
<xref linkend="licence">
|
|
</para>
|
|
</sect3>
|
|
<sect3 id="histtoday">
|
|
<title>Today</title>
|
|
<para>
|
|
Radim Kolar started to work on the &fsp; again in June 2003. Since
|
|
that time he's maintaining the source distribution. You can reach him
|
|
on the mailinglists or via e-mail <email>hsn@sendmail.cz-nospam</email>.
|
|
</para>
|
|
<para>
|
|
Since September 2003 Sven Hoexter is working on parts of the documentation.
|
|
You can reach him on the mailinglists or via e-mail
|
|
<email>sven@du-gehoerst-mir.de-nospam</email>.
|
|
</sect2>
|
|
|
|
<sect2 id="credits">
|
|
<title>Developers and contributors</title>
|
|
<para>
|
|
See <xref linkend="licence">
|
|
</para>
|
|
</sect2>
|
|
|
|
</sect1>
|
|
<!-- end of the introduction -->
|
|
|
|
<!-- start with the installation instructions-->
|
|
<sect1 id="installation">
|
|
<title>Installation instructions</title>
|
|
<sect2 id="getfsp">
|
|
<title>How to get FSP</title>
|
|
<sect3 id="getsource">
|
|
<title>How to obtain the source distribution</title>
|
|
<para>
|
|
There are several ways to obtain the fsp source distribution please take a
|
|
look at <xref linkend="wherecanifind">
|
|
</para>
|
|
</sect3>
|
|
<sect3 id="getbinary">
|
|
<title>How to obtain a binary copy</title>
|
|
<para>
|
|
At the moment we provide only RPM for RedHat 7.3. You can download the RPM file from
|
|
the sf.net download page or from wrack.telelev.net. wrack.telelev.net provides the
|
|
rpms in a apt-rpm usable way, for more information about apt-rpm and the packages on
|
|
wrack.telelev.net take a look at http://sven.stormbind.net/aptrpm/
|
|
If you're running other rpm based distributions you can try to rebuild the source rpms.
|
|
</para>
|
|
</sect3>
|
|
</sect2>
|
|
|
|
<sect2 id="compilesource">
|
|
<title>How to compile the source code</title>
|
|
<para>
|
|
After download you should be able to unpack the source tarball, change
|
|
into the source directory and use
|
|
./configure
|
|
make
|
|
su
|
|
make install
|
|
</para>
|
|
</sect2>
|
|
</sect1>
|
|
<!-- end of the installation instructions -->
|
|
|
|
<!-- start how to use on the server side -->
|
|
<sect1 id="serverside">
|
|
<title>How to set up your FSP server</title>
|
|
<para>
|
|
FIXME
|
|
Information about the fspd
|
|
Maybe I should start a second document describing all the
|
|
possible configuration options in the fspd?
|
|
Raw overview for this section:
|
|
- install fspd -> see prior section
|
|
- basic infos on fspd.conf
|
|
- info about init scripts
|
|
- info about the several .FSP_ files
|
|
</para>
|
|
<sect2 id="fspd.conf">
|
|
<title>How to setup a basic fspd.conf</title>
|
|
<para>
|
|
FIXME
|
|
</para>
|
|
</sect2>
|
|
<sect2 id="initscript">
|
|
<title>How can I start the fspd automagicly on reboot?</title>
|
|
<para>
|
|
FIXME
|
|
Use init scripts ;)
|
|
</para>
|
|
</sect2>
|
|
<sect2 id="restrictions">
|
|
<title>How to setup restrictions on directories?</title>
|
|
<para>
|
|
FIXME
|
|
</para>
|
|
</sect2>
|
|
</sect1>
|
|
<!-- end how to use the server -->
|
|
|
|
<!-- start how to use on the client side -->
|
|
<sect1 id="clientside">
|
|
<title>How to use the fsp client tools</title>
|
|
<para>
|
|
FIXME
|
|
Explain client tools and those f*cking shell script wrappers *hrhr*
|
|
Check the X based fsp tools, maybe they'll compile ...
|
|
</para>
|
|
<sect2 id="fsptoolchain">
|
|
<title>The fsp tool collection</title>
|
|
<para>
|
|
FIXME
|
|
Information about all the f* commands
|
|
</para>
|
|
</sect2>
|
|
<sect2 id="fspclient">
|
|
<title>fspclient</title>
|
|
<para>
|
|
FSP Client is FTP-like interface for FSP.
|
|
It look exactly like classic FTP does, but uses different transfer
|
|
protocol. People usually find this program easier to use that
|
|
multiple client programs in FSP protocol suite. If you are at least
|
|
somewhat familiar with command line FTP and want to try FSP, this
|
|
program is right for you.
|
|
<para>
|
|
FSP client homepage is <ulink url="http://fspclient.sourceforge.net">http://fspclient.sourceforge.net</ulink>.
|
|
</para>
|
|
</sect2>
|
|
<sect2 id="gui">
|
|
<title>Using FSP in browser</title>
|
|
<para>
|
|
If you want a GUI, the easiest way is to use FSP directly
|
|
from your web browser.
|
|
You need to download and install <ulink url="http://fsp.sf.net/javalib.html">FSP Java LIB</ulink> and <ulink url="http://fsp.sf.net/fsproxy.html">Proxy server</ulink>. Read included docs for install instructions.
|
|
</sect1>
|
|
<!-- end how to use the client -->
|
|
|
|
<sect1 id="techinfo">
|
|
<title>FSP technology in-depth</title>
|
|
<sect2 id="protocol">
|
|
<title>Protocol definition document</title>
|
|
<para>
|
|
FSP protocol is well documented.
|
|
You can find the latest protocol definition right here
|
|
<ulink url="http://fsp.sourceforge.net/doc/PROTOCOL.txt">http://fsp.sourceforge.net/doc/PROTOCOL.txt</ulink>
|
|
or in the source distribution in the "doc" subdirectory.
|
|
</para>
|
|
<sect2 id="transport">
|
|
<title>Transport mechanism used by FSP</title>
|
|
<para>
|
|
FSP is datagram-based protocol. FSP protocol itself do not require
|
|
reliable underlying transport. FSP can operate even without
|
|
any Layer 2 and Layer 3 transports only with some extra features
|
|
disabled. FSP can be implemented in all kinds of environments.
|
|
This makes FSP very suitable for embedded devices area.
|
|
<para>
|
|
When used in TCP/IP based networks,
|
|
UDP is used for transporting of FSP datagrams, this lowers protocol
|
|
overhead by skipping TCP level, which is not needed, because FSP
|
|
handles connection management by itself. This method is standardized
|
|
in <xref linkend="protocol">.
|
|
</para>
|
|
<para>
|
|
FSP frames can be packed directly info Ethernet 802.2, USB or GSM
|
|
frames. Biggest advantage of using FSP in that areas is simplicity.
|
|
FSP protocol is very simple to implement.
|
|
</sect2>
|
|
<sect2 id="keying">
|
|
<title>Network bandwidth protection</title>
|
|
<para>
|
|
One of interesting parts of underlying network technology used
|
|
by FSP is how protocol design restrict user from sending
|
|
more than one packet into network.
|
|
<para>
|
|
FSP uses very simple method: Every packet sent from server to client
|
|
contains a 16-bit long, pseudo random key. Client needs this key
|
|
for sending next request to server. Server will ignore requests
|
|
with wrong key, unless there was no previous activity recorded
|
|
for client IP address in last 60 seconds.
|
|
<para>
|
|
Server remembers for each IP not only nextkey, but also previous
|
|
key. When packet's key matches previously stored key -- it is
|
|
resend from client.
|
|
This method also allows ignore duplicate requests by server for
|
|
action which should not be done more than once (for example mkdir).
|
|
<para>
|
|
In each packet sent by client to server is sequence number.
|
|
Server will echo this number back to the client, when packet is
|
|
processed. There is no restriction on that number, client can
|
|
use anything he wants.
|
|
Primary purpose
|
|
of this sequence number is possibility to put unique mark on
|
|
every network packet. Client can use this information and
|
|
fine-tune its retry algorithm
|
|
by computing packet loss ratio of network, and duplicate
|
|
packet rate.
|
|
</sect1>
|
|
</article>
|
|
<!-- vim: set expandtab: -->
|