FTP inner workings
FTP is een minder eenvoudig protocol
- Er is enerzijds een CLI (of een GUI) die een eerste TCP-sessie opent en gebruikt waar protocol-commands en completion-replies heen en weer vliegen tussen CLIENT en SERVER.
- Er zijn anderzijds data transfert-en (meervoud en mogelijks in beide richtingen), die telkens een extra TCP-sessie openen en weer sluiten.
- Tenslotte is er de mogelijkheid om de DATA-sessie zowel vanaf de server als vanaf de client (PASSIVE) te initialiseren.
RFC 959                  October 1985                  File Transfer Protocol 
 
2.3. THE FTP MODEL
 
 PI:  Protocol Interpreter
 DTP: Data Transfer Process -- it establishes and manages 
      the data connection. The DTP can be passive or active.
 
                                            -------------
                                            |/---------\|
                                            ||   User  ||    --------
                                            ||Interface|<--->| User |
                                            |\----^----/|    --------
                  ----------                |     |     |
                  |/------\|  FTP Commands  |/----V----\|
                  ||Server||<-------------- ||   User  ||
                  ||  PI  ||   FTP Replies  ||    PI   ||
                  |\--^---/|--------------->|\----^----/|
                  |   |    |                |     |     |
      --------    |/--V---\|      Data      |/----V----\|    --------
      | File |<--->|Server| -<------------>- |  User   |<--->| File |
      |System|    || DTP  ||   Connection   ||   DTP   ||    |System|
      --------    |\------/|                |\---------/|    --------
                  ----------                -------------
                  SERVER-FTP                  CLIENT-FTP
      NOTES: 1. The data connection may be used in either direction.
             2. The data connection need not exist all of the time.Meer weten? Lees de RFC: tools.ietf.org/html/rfc959
 
een zeer eenvoudige FTP download 
 
We beginnen met een zeer eenvoudig voorbeeld:
- connecting
- logging in
- downloading een file met als naam timezone
- verbinding verbreken
$ ftp 10.0.100.101 Connected to 10.0.100.101 220 Welcome to linux800 internal FTP service. Name (10.0.100.101:bert): anonymous 331 Please specify the password. Password: 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp> get timezone local: timezone remote: timezone 200 PORT command successful. Consider using PASV. 150 Opening BINARY mode data connection for timezone (16 bytes). 226 File send OK. 16 bytes received in 0.00 secs (71.3 kB/s) ftp> quit 221 Goodbye.
- In wireshark vanaf de client (capture filter: host 10.0.100.101), ziet dat er dan zo uit:
  
- Wanneer we verbinden met de FTP-server (10.0.100.101), wordt er eerst
 eenARPgestuurd om het MAC-address van de SERVER te weten te komen: (frames 3 en 4)
 Vervolgens gebeurt deTCP-3-way handshake(session setup) (segment 5 tot 7)
 
- De eerste FTP-message, van de server is: 220 Welcome(message 8)
 
- Login: de mens achter de client tikt credentials in (in casu anonymous ftp)
 (USERenPASSmessages 10 tot 13)
 
- De CLIENT ondervraagt de SERVER over diens OS. Dit is een standaard operatie onmiddellijk na login (SYSTmessages 14 en 15)
 
- get timezone: zodra het- getcommando wordt ingetikt gaat de client aan het werk:- eerst wordt het data-type ingesteld: TYPE I binary(message 16 en 17),
- vervolgens geeft de client een poortnummer door voor de ftp-data-sessie: PORT x.x.x.x,211,142(message 18 en 20),
- tot slot wordt RETR timezonedoorgegeven, de primitive om de download van de filetimezonete starten (message 22).
- regels 19 en 21 bevatten geen messages
 
 
- eerst wordt het data-type ingesteld: 
- De eigenlijke data transfert duurt 7 pakkets:
- Segmenten 23-24-25 zijn de TCP session setup voor het data-kanaal,
 uitgaande van de SERVER opsource port 20 (ftp data)
 die verbindt metdestination port 54158van de CLIENT (ziePORTmessage 18)
- message 28 is de transfert zelf van de file timezone
- segmenten 30-31-32 sluiten de FTP-data-verbinding af met een TCP session tear down
 
 
- Segmenten 23-24-25 zijn de TCP session setup voor het data-kanaal,
- Tussendoor geeft de SERVER nog feed-back op het interactieve CLI-FTP kanaal:
- messages 26: 150 opening BIN data connectionen
- message 29: 226 file send ok
 
 
- messages 26: 
- De CLIENT stuurt het QUITcommando (message 33) en
 de SERVER antwoordt met221 goodbye(message 34)
 
- Tot slot is er nog een in dit geval minder conventionele session-tear down van het interactieve CLI-FTP kanaal TCP-3-way handshake(segment 35 tot 37)
 
passive mode FTP
 
Om doorheen NAT of een Firewall te gaan, moet het initiatief tot verbinding komen vanaf de CLIENT. Hierboven, in punt 1 hebben we gezien dat de CLIENT een poort doorgeeft aan de SERVER, via de primitive PORT, en dat even later de SERVER het initiatief neemt om die TCP-poort naar de CLIENT te openen voor een DATA-transfert. Een directory opvragen met ls is reeds data-transfert, en bij gebruik van NAT of een stateful firewall werkt zelfs dat niet.
 
Om aan dit probleem tegemoet te komen bestaat FTP passive mode. We gaan hieronder bekijken hoe dit werkt, eerste vanaf de terminal, daarna in wireshark.
 
- de terminal:
$ ftp 10.0.100.101 Connected to 10.0.100.101. 220 Welcome to linux800 internal FTP service. Name (10.0.100.101:bert): anonymous 331 Please specify the password. Password: 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp> passive Passive mode on. ftp> get timezone local: timezone remote: timezone 227 Entering Passive Mode (10.0.100.101,100,185) 150 Opening BINARY mode data connection for timezone (16 bytes). 226 File send OK. 16 bytes received in 0.00 secs (34.5 kB/s) ftp> quit 221 Goodbye.
- 
in wireshark (terug vanaf de client / zelfde capture filter):  
- Tot en met regel 17, (200 switching to binary mode) lopen beide network-captures gelijk.
- Op (18) zien we deze keer de PASVprimitive, waarop de server antwoordt (19) met een poort-nummer: 100,185 -- omgerekend is dit 25785.
- In (21-23) zien we hoe het 'DATA-kanaal' deze keer geopend wordt door de CLIENT
- Op (24) volgt nu pas de RETRprimitive van de CLIENT en de replies en data transfert vanaf de server (25, 27 en 31)
- Hierna lopen beide captures weer gelijk.