Internet Advanced A Verslag over verschillende protocollen (IP, ARP, ICMP, TCP, UDP, DNS, HTTP, FTP)
Docent:
Marco de Devillers (DVL)
Naam: Studentnr: Naam: Studentnr:
Gerben Peters 411711 Stephan Bosch 13637
Klas:
ICD2A
Internet Advanced A
2004
Voorwoord Voor het vak “Internet Advanced A” is het vereist een verslag te schrijven met een groep van 2 tot 3 personen waarin een aantal standaard protocollen worden uitgelegd. Ons groepje bestaat uit 2 personen: • G. Peters • S.B. Bosch In het begin van de module hebben we ons groepje gevormd en in deze groep het werk verdeelt. Tijdens de eerste lessen hebben we, voornamelijk via e-mail, elkaar de basis geleerd door middel van gesnifte pakketjes (sniffen is het luisteren op het netwerk naar informatie). We hebben elkaar iedere week op de hoogte gehouden van onze vorderingen. Door deze systematische aanpak is het schrijven van dit verslag overzichtelijk gebleven en de stress niet al te hoog. Het resultaat ligt hier voor u.
Hogeschool van Arnhem en Nijmegen
1
Internet Advanced A
2004
Inleiding Er werd van ons verwacht om een verslag te maken waarin aan bod komt wat het OSI model inhoud en hoe deze in verhouding tot het TCP/IP model staat. Dit verslag behandelt daarnaast een aantal standaard protocollen die in het TCP/IP model gebruikt worden en twee applicatielaag protocollen (zie het OSI model) die gebruik maken van deze standaard protocollen. Het is de bedoeling dat in het verslag de verplichte protocollen en de twee applicatielaag protocollen worden uitgelegd en dat de applicatielaag protocollen worden gesnift (trace) met bijbehorende uitleg. In de trace moet er verwezen worden naar de betreffende RFC (Request For Comment) die als bijlagen zijn toegevoegd. De protocollen ETHERNET, ARP, DNS, IP, ICMP, TCP en UDP zijn een verplicht onderdeel in dit verslag. Onze keuze is gevallen op de twee applicatielaag protocollen, HTTP 1.1 (G. Peters) en FTP (S.B. Bosch).
Hogeschool van Arnhem en Nijmegen
2
Internet Advanced A
2004
Inhoudsopgave Voorwoord............................................................................................................................................1 Inleiding................................................................................................................................................2 Inhoudsopgave......................................................................................................................................3 Gebruikte software............................................................................................................................... 4 Ethereal.......................................................................................................................................................... 4 Handmatig instellen...............................................................................................................................................................................................6
Het OSI model...................................................................................................................................... 7 Protocollen............................................................................................................................................8 Ethernet II...................................................................................................................................................... 8 ARP..............................................................................................................................................................10 IP.................................................................................................................................................................. 12 ICMP............................................................................................................................................................14 ICMP pakketten................................................................................................................................................................................................... 14 ICMP berichten....................................................................................................................................................................................................15
TCP.............................................................................................................................................................. 16 TCP Header......................................................................................................................................................................................................... 16 Functie van TCP.................................................................................................................................................................................................. 18 Verbinding opbouwen..........................................................................................................................................................................................18 Three way handshake.......................................................................................................................................................................................... 19 Sluiten verbinding................................................................................................................................................................................................19 Data communicatie.............................................................................................................................................................................................. 20
UDP..............................................................................................................................................................21 DNS..............................................................................................................................................................22 DNS header.......................................................................................................................................................................................................... 22 DNS query............................................................................................................................................................................................................ 23 DNS respons.........................................................................................................................................................................................................24
HTTP.................................................................................................................................................. 26 De werking van HTTP................................................................................................................................. 27 HTTP requests............................................................................................................................................. 28 De methode GET..................................................................................................................................................................................................28 De methode HEAD...............................................................................................................................................................................................28 De methode POST................................................................................................................................................................................................28
HTTP response............................................................................................................................................ 30 Status codes..........................................................................................................................................................................................................30
FTP..................................................................................................................................................... 32 Inleiding FTP............................................................................................................................................... 32 Data transfer........................................................................................................................................................................................................ 32 Active / Passive Mode.......................................................................................................................................................................................... 34 Transmissie modes............................................................................................................................................................................................... 34
De werking van FTP.................................................................................................................................... 36 Netwerk laag........................................................................................................................................................................................................ 36 Internet / transport laag...................................................................................................................................................................................... 37 Applicatielaag......................................................................................................................................................................................................40
Appendix A – RFC 959........................................................................... FTP (File Transfer Protocol) Appendix B – RFC 2068....................................................... HTTP 1.1 (HyperText Tranfer Protocol) Appendix C – RFC 1035........................................................................ DNS (Domain Name Service) Appendix D – RFC 791........................................................................................ IP (Internet Protocol) Appendix E – RFC 793.............................................................. TCP (Transmission Control Protocol) Appendix F – RFC 826...................................................ARP (Ethernet Address Resolution Protocol) Appendix G – RFC 792..................................................... ICMP (Internet Control Message Protocol) Appendix H – RFC 768....................................................................... UDP (User Datagram Protocol)
Hogeschool van Arnhem en Nijmegen
3
Internet Advanced A
2004
Gebruikte software Ethereal Voor het practicum “Internet Advanced” (IntAd) moesten wij gebruik maken van Ethereal een packet sniffer die standaard op de Knoppix 3.6 CD geïnstalleerd staat. Een korte handleiding voor het opstarten van The Ethereal Network Analyzer: • Zorg dat de computer kan opstarten vanaf de CD (of DVD) speler. • Start de computer op met de Knoppix CD in de CD speler. • In het boot scherm druk je op ENTER om te starten. Je mag eventueel ook “knoppix26” invoeren als commando om de nieuwe kernel op te starten, deze kernel reageert sneller. • Als de computer helemaal klaar is met opstarten dan ziet u een bureaublad met rechtsonder een tijd/datum en op het bureaublad staat de tekst “KNOPPIX 3.6” In de balk onderin het scherm ziet u een beeldscherm icon met daarop een “>_” als u met de muis erboven gaat wordt deze groter en geeft deze na een korte pauze de tekst “Terminal Program”. Deze icon klikt u aan. • Er wordt een shell opgestart, u ziet staan op de prompt “knoppix@ttyp#[knoppix]$” met daarachter een knipperende cursor. Het '#' staat voor een nummer. U typt in “su” en drukt op ENTER • De prompt is veranderd in “root@ttyp#[knoppix]#” en wacht weer op een commando. U typt in “ethereal &” en drukt op ENTER. Het '&' is nodig om het proces op de achtergrond te starten zodat het programma blijft draaien ook al stopt u de shell. • Als het programma is opgestart dan kunt u de shell afsluiten door 2x in te voeren: “exit” ENTER
Klik boven in het menu op “Capture” en selecteer daar “Start”. Het volgende scherm wordt zichtbaar: Hogeschool van Arnhem en Nijmegen
4
Internet Advanced A
2004
In het veld “Interface” zal waarschijnlijk uw netwerkkaart staan. Is dit niet het geval dan moet u waarschijnlijk handmatig uw instellingen aanpassen zie daarvoor het kopje handmatig instellen. Als uw netwerkkaart geselecteerd is dan voert u bij het veld “Capture Filter:” in: “host
” en drukt u daarna op “Ok”. Het instellen van de Ethereal Capture Filters hebben we met behulp van de site http://home.insight.rr.com/procana/ voor elkaar gekregen. De syntax van de capture filters is hetzelfde als die van tcdump, er kan dus ook gekeken worden naar de manual page van tcpdump ( zie “man tcpdump” ). Als alles goed gaat dan ziet u dat er nu wordt geluisterd (gesnift) op het netwerk, alle berichten van en naar de opgegeven host worden nu afgeluisterd.
Hogeschool van Arnhem en Nijmegen
5
Internet Advanced A
2004
Normaal gesproken ziet u in het begin niets voorbij komen, totdat u de handelingen gaat uitvoeren die u wilt bekijken, bijvoorbeeld u start uw webbrowser en gaat naar een bepaald adres of u start uw e-mail client en haalt uw e-mail op of start een ftp sessie. Als u alle handelingen heeft uitgevoerd dan drukt u op het knopje “Stop” om het sniffen te stoppen. U krijgt het resultaat van het sniffen in het scherm te zien.
Nu bent u klaar om de gewenste protocollen te analyseren.
Handmatig instellen Het kan voorkomen dat u zelf uw netwerk niet goed ingesteld staat. U heeft de instellingen nodig van uw netwerk om dit zelf goed te zetten. Als voorbeeld zal ik de gegevens van mijn thuisnetwerk gebruiken: • Klik op de balk onderin het scherm ziet u een pinguïn icon 'KNOPPIX' (2de van links). U klikt op de icon. • U selecteert de optie “Network/Internet” • U klikt op “Network card configuration” • In het volgende Xdialog beantwoord u de vraag “Use DHCP broadcast?” met “No” • Het volgende scherm vraagt u “Please enter IP Address for eth0” een geldig IP nummer voor uw netwerk vult u hier in, in mijn geval is dat “10.0.0.153” • De volgende vraag “Please enter Network Mask for eth0” hoefde ik zelf niet te veranderen. Deze heb ik op “255.255.255.0” laten staan. • Bij de vraag “Please enter Broadcast Address for eth0” heb ik het nummer “10.0.0.255” laten staan. • Ook op “Please enter Default Gateway” moet ik thuis “10.0.0.138” invoeren, het adres van mijn router. • Omdat mijn router ook de DNS afhandelt beantwoord ik de vraag “Please enter Nameserver(s)” ook met “10.0.0.138” dit mag ook een DNS-nummer van uw provider zijn.
Hogeschool van Arnhem en Nijmegen
6
Internet Advanced A
2004
Het OSI model Een beschrijving van het OSI model. Hoe zit het in elkaar, waar zit tcp/ip en waar zitten de onderzochte protocollen. Het Open Systems Interconnection (OSI) model is een standaard referentie model voor communicatie tussen twee eindgebruikers in een netwerk. Het wordt gebruikt om producten te ontwerpen en om een beter inzicht te krijgen over netwerken. Het plaatje laat zien waar veel gebruikte internet producten en services zitten in het model.
Het OSI model (bron: http://searchnetworking.techtarget.com/sDefinition/0,,sid7_gci523729,00.html )
Het volgende schema geeft een vergelijking tussen het OSI model en het TCP/IP model:
Hogeschool van Arnhem en Nijmegen
7
Internet Advanced A
2004
Protocollen Ethernet II Ethernet II, beter bekend als het 802.3 formaat is ontwikkeld door DEC, Intel en Xerox. Voor meer informatie kijk op: http://standards.ieee.org/getieee802/download/802.3-2002.pdf (blz 38) De term 'Ethernet' had aan het eind van de negentiende eeuw daadwerkelijk iets te maken met de 'ether', deze werd namelijk gebruikt voor het transporteren van elektromagnetische golven. Het Ethernet-concept werd door de IEEE in 1983 als standaard gedefinieerd in IEEE-802.3.
Een tekening van het eerste Ethernet systeem
Hogeschool van Arnhem en Nijmegen
8
Internet Advanced A
2004
Het Ethernet II frame (ookwel 802.3 MAC-frame) ziet er zo uit: Ethernet frame format +-------------------------+ | Pre-ammble (7 bytes) | +-------------------------+ | SFD ( 1 byte ) | +-------------------------+ | destination MAC address | | ( 6 bytes ) | +-------------------------+ | source MAC address | | ( 6 bytes ) | +-------------------------+ | frame length (2 bytes) | +-------------------------+ | LLC data | | ( variable length ) | +-------------------------+ | PAD (variable) | +-------------------------+ | FCS ( 4 bytes ) | +-------------------------+
Preamble field: 7 bytes Dit bevat bitsgewijs 1 afgewisseld met een 0, wat ervoor zorgt dat de ethernet hardware de correcte timing krijgt. Dit heeft te maken met de Digital Phase Lock Loop, een elektronisch circuit. SFD field: 1 byte Het Start Frame Delimiter veld bevat de sequence 1010 1011 wat de indicatie is voor de start van een frame. De 11 op het eind is een indicatie voor de hardware dat het frame begint. Deze twee velden worden meestal weg gelaten in het tonen van gesnift netwerkverkeer zoals in dit voorbeeld:
Destination Address field: 6 bytes Het adres(sen) waar het frame voor is bedoelt. Het mag een enkel of multicast (broadcast) adres zijn. Source Adress field: 6 bytes Het verzendende adres. Length/Type field: 2 bytes Het kan twee dingen betekenen afhankelijk van de numerieke waarde die het bevat. Is de waarde groter als 1536 decimaal (0x0600) dan staat het voor type data wat vervoert word. Data en PAD fields: Bevat een verzameling van n octets. Het PAD (padding) veld wordt gebruikt er sprake is van een minimum grootte van een frame of als een implementatie een bepaalde afmeting nodig heeft van het frame. Het is dus niet standaard bepaald. FCS field: 4 bytes Het Frame Check Sequence veld bevat een 32-bits CRC (Cyclic Redundancy Check) om error detectie te kunnen toepassen. Een frame met een foutieve CRC wordt door de ontvanger verwijderd zonder verdere afhandeling.
Hogeschool van Arnhem en Nijmegen
9
Internet Advanced A
2004
ARP Ethernet Address Resolution Protocol (ARP) is een protocol dat netwerk protocol adressen converteert naar een 48 bit ethernet address om te verzenden over Ethernet hardware. ARP heeft als doel het verzorgen van een standaard die ervoor zorgt dat alle makers van hardware deze kunnen toepassen, zodat informatie kan worden uitgewisseld tussen verschillende soorten hardware implementaties. Het zorgt dus voor een vertaling van netwerk nummers naar hardware nummers. Er zijn drie technieken voor Adress Resolution mogelijk: • Table lookup – alles wordt in een tabel bijgehouden die in het geheugen staat die wordt geraadpleegd indien nodig • Closed-form computation – het hardware adres van een computer kan worden berekend van het protocol adres, door middel van basis numerieke operaties • Dynamic message exchange – computers wisselen berichten uit over een netwerk om een adres te bepalen. Meer informatie hierover op http://penguin.dcs.bbk.ac.uk/academic/networks/network-layer/arp/index.php Een ARP pakketje heeft de volgende vorm:
Hardware address type: 16 bits Als hier de waarde 0x0001 staat dan gaat het ARP pakketje over een Ethernet netwerk Protocol address type: 16 bits Het type protocol dat er vervoert wordt, bijvoorbeeld 0x0800 voor IP Haddr len: 8 bits Bevat een 6 voor de lengte van Ethernet hardware adressen Paddr len: 8 bits Bevat en 4 als het over IP gaat (4 x 1 byte/octet) Operation: 16 bits 1 ARP request 2 ARP response 3 RARP request 4 RARP response
Hogeschool van Arnhem en Nijmegen
10
Internet Advanced A
2004
Sender haddr: 16 bits Het hardware adres van de zender Sender paddr: 16 bits Het protocol adres van de zender, bij IP is dat het ipnummer (hexadecimaal) Target haddr: 16 bits Het hardware adres van de ontvanger, allemaal nullen als het een 'request' is voor het hardware adres van de ontvanger Target paddr: 16 bits Het protocol adres van de ontvanger. Als er een ARP antwoord arriveert stopt de ontvanger het hardware adres in een cache, zodat het voor volgende pakketjes kan worden gebruikt. De oudste in de cache wordt verwijderd als de tabel vol is of als een vermelding al een tijdje is niet geupdate. Als er een ARP request (broadcast) arriveert, dan controleert de ontvanger of de zender in zijn cache staat, is dit het geval dan update het de vermelding in de cache. Het uitwisselen ziet er dus zo uit:
W stuurt een broadcast naar iedereen met de vraag “wie is Y?”. Alleen Y geeft antwoord aan W door het hardware adres terug te sturen.
Hogeschool van Arnhem en Nijmegen
11
Internet Advanced A
2004
IP Het Internet Protocol zorgt voor de adressering van o.a. tcp en udp datagrammen. Van de bovenliggende laag krijgt het Internet Protocol een ip-adres. Deze wordt door het Internet Protocol met behulp van ARP aan een MAC-adres gekoppeld. Vervolgens wordt het tcp/udp datagram voorzien van een nieuwe header welke er als volgt uitziet: 32 bits Version
IHL
Type of service
Identification Time-to-live
Total length flags
protocol
Fragment offset Header checksum
Source address (herkomst) Destination address (bestemming) Options Data
Version: Geeft de versie van IP aan, in de meeste gevallen 4. IHL: Ook wel Internet Header Length. Dit is de lengte van de totale IP header, en kan dus gezien worden als een verwijzing naar het datasegment. De minimale waarde van de IHL is 5, dat wil zeggen dat er 5 x 32 bits gebruikt worden. Dit betekent dus dat er geen options gespecificeerd zijn. Type of service: Hierin kunnen opties worden ingesteld als delay, urgentie en dergelijke. In de meeste netwerken gaat de performance verbetering van deze pakketjes ten koste van die van andere pakketjes. Total length: De totale lengte van het ip datagram in bytes inclusief header en data. Het veld is 16 bits lang, en kan dus maximaal een waarde van 65.535 bevatten. Identification: Een identificatiemiddel die toegekend kan worden aan een verzender die het assembleren van de fragmentjes bevordert. Flags: Geeft aan of de data uit meerdere fragments bestaat, en of er nog een fragment volgt. Fragment offset: Wanneer een pakket gefragmenteerd word, wordt de positie van dit datagram in het totale bericht aangegeven. Time-to-live: Dit veld telt af vanaf een bepaalde waarde op ieder punt (een gateway of router bijvoorbeeld) die het passeert. Wanneer de waarde van dit veld 0 is, wordt het pakketje afgebroken, zodat het niet eeuwig op het net blijft rondzweven. Protocol: Hierin staat het bovenliggende protocol, bijvoorbeeld TCP (0x06) of UDP (0x11). Header checksum: Een 16 bits checksum van de IP-header en IP-options Hogeschool van Arnhem en Nijmegen
12
Internet Advanced A
2004
Source address: IP-adres van de afzender Destination address: IP-adres van de ontvanger Data: Het dataveld bevat een datagram van het bovenliggende protocol. Voorbeeld van een IP packet verzonden bij het opvragen van een website. 4
5
00
01 7A
B0 1A 80
4 06
0 00 E5 E5
C3 F7 83 46 50 F7 CB 48 -
TCP Frame Hier wordt een IP datagram (versie 4) verzonden, met een headerlengte van 5 x 32 bits. Dit betekent dus dat er geen options zijn gespecificeerd. Er is geen TOS (type of service) bit gezet, dus het pakket heeft geen hogere prioriteit dan andere pakketten. De totale lengte is 378 bytes (0x017a). Er is een identificatienummer toegekend aan de afzender, namelijk 45082 (0xB01a). De waarde van de flags is 4, wat wil zeggen dat de data niet gefragmenteerd hoeft te worden. De fragment offset staat dan ook op 0. Het veld heeft een time-to-live van 128 (0x80) om de ontvanger te bereiken. Het bovenliggende protocol is 0x06 (TCP). De header checksum is E5E5. Het afzender adres is C3 F7 83 46 (195.247.131.70) Het adres van de ontvanger is 50 F7 CB 48 (80.247.203.72) Het optionsveld is leeg, zoals al te zien was aan de Header Lengte. Daarna volgt het TCP (of UDP) Frame.
Hogeschool van Arnhem en Nijmegen
13
Internet Advanced A
2004
ICMP ICMP is een onderdeel van IP en wordt gebruikt voor automatisch genereren en versturen van error en query messages tussen IP systemen. In principe is de werking van ICMP een beetje gelijk aan het UDP principe. Een pakket wordt verzonden, maar wanneer er een keer een pakket niet aankomt is dit geen ramp. Het pakket zal niet opnieuw worden verzonden, dit om ketting reacties te voorkomen van error message op error message.
ICMP pakketten Een ICMP pakket wordt verpakt in een IP frame en ziet er als volgt uit: IP header
1 byte type
1 byte code
2 bytes checksum
Afhankelijk van type en code Inhoud
ICMP pakketten zijn te onderscheiden in error berichten en query berichten. Het type veld geeft aan om welk type bericht het gaat. Wanneer er een fout plaatsvindt bij het ontvangen van een IP pakket, wordt het sourceveld van het IP-pakket als destination gebruikt, en wordt de IP-header met de eerste 8 bytes van de data (de tcp of udp header)
Hogeschool van Arnhem en Nijmegen
14
Internet Advanced A
2004
ICMP berichten Hieronder een overzicht van de berichten die verzonden kunnen worden met behulp van ICMP, met de daarbij horende codes. type code 0 0 3
4 5
8 9 10
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 0 0 1 2 3 0 0 0
11
0 1
12
0 1 0 0 0 0 0 0
13 14 15 16 17 18
beschrijving echo reply destination unreachable network unreachable host unreachable protocol unraechable port unreachable fragmentation needed but DF bit set source route failed destination network unknown destination host unknown source host isolated (obsolete) dest.network administratively prohibited dest.host administratively prohibited network unreachable for TOS host unreachable for TOS communication administratively prohibited host precedence violation precedence cuttoff in effect source quench redirect: redirect for network redirect for host redirect for type-of-service and network redirect for type-of-service and host echo request router advertisement router solicitation time exceeded: TTL equals 0 during transit TTL equals 0 during reassembly parameter problem: IP header bad(catchall error) required option missing timestamp request timestamp reply information request(obsolete) information reply(obsolete) address mask request address mask reply
Hogeschool van Arnhem en Nijmegen
handled by user process "No route to host" "No route to host" "Connection refused" "Connection refused" "Message too long" "No route to host" "Network unreachable" "No route to host" "No route to host" "Network unreachable" "No route to host" "Network unreachable" "No route to host" (ignored) (ignored) (ignored) kernel for TCP, ignored by UDP kernel updates routing kernel updates routing kernel updates routing kernel updates routing kernel generates reply user process user process
table table table table
user process user process "Protocol not availeble" "Protocol not availeble" kernel generates reply user process kernel generates reply user process kernel generates reply user process
15
Internet Advanced A
2004
TCP Het Transmission Control Protocol is bedoeld als een host-to-host protocol waarmee hoogwaardige betrouwbare verbindingen kunnen worden opgebouwd in een packet-switched computer communicatie netwerk. TCP is ontworpen om in een structuur te werken die uit lagen is opgebouwd, zoals het OSI model. Het valt net boven het internet protocol (IP).
TCP Header Een TCP pakketje ziet er zo uit: TCP Header Format 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Source Port | Destination Port | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Sequence Number | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Acknowledgment Number | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Data | |U|A|P|R|S|F| | | Offset| Reserved |R|C|S|S|Y|I| Window | | | |G|K|H|T|N|N| | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Checksum | Urgent Pointer | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Options | Padding | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | data | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Source Port: 16 bits Poortnummer waar de data vandaan komt Destination Port: 16 bits Poortnummer waar de data naartoe gaat Sequence Number: 32 bits Het sequence nummer is het nummer van de eerste data octet in dit segment (behalve als SYN is gezet). Als SYN is gezet dan is het sequence nummer het start nummer (initial sequence number) en dan is het eerste data octet gelijk aan ISN+1 Acknowledgement Number: 32 bits Als het ACK control bit is gezet dan bevat dit veld de waarde van het volgende sequence nummer die de zender van het segment verwacht te ontvangen. Als een verbinding tot stand is gebracht wordt deze altijd verstuurd (zie ook het stukje over de threeway handshake). Data Offset: 4 bits Het aantal 32 bits words in het TCP header. Dit getal geeft aan waar de data begint. De TCP header (zelfs met maar 1 optie) is altijd een veelvoud van 32 bits. Bijvoorbeeld als hier een 5 staat dan betekend dit 5 x 32 bits (4 bytes) = 20 bytes, dus een TCP header zonder opties. De maximale lengte van de TCP header is 64 bytes. Reserved: 6 bits Gereserveerd voor toekomstig gebruik. Moet nul zijn
Hogeschool van Arnhem en Nijmegen
16
Internet Advanced A
2004
Control Bits: 6 bits (van links naar rechts) URG: Urgent Pointer field significant ACK: Acknowledgement field significant PSH: Push Function RST: Reset the connection SYN: Synchronize sequence numbers FIN: No more data from sender Window: 16 bits Het aantal data octets beginnend vanaf de waarde in het acknowledgement veld, welke de zender van dit segment bereid is te ontvangen. Het geeft de maximale hoeveelheid databytes die verstuurd kan worden voordat er een bevestiging verstuurd en ontvangen moet worden. Checksum: 16 bits Een 16 bits one's complement van de one's complement som van alle 16 bit words in de header en text. ( http://www.hyperdictionary.com/computing/ones+complement voor uitleg over one's complement). Het checksum gaat ook over een pseudo header van 96 bits de aan het eind van de TCP header geplakt zit. Deze header bevat het source en destination address, het protocol en de TCP lengte. Dit geeft TCP een bescherming tegen verkeerd verstuurde segmenten. Deze informatie staat in het Internet Protocol en wordt door de TCP/Netwerk interface doorgegeven als een resultaat van aanroepen van TCP aan IP. De pseudo header: +--------+--------+--------+--------+ | Source Address | +--------+--------+--------+--------+ | Destination Address | +--------+--------+--------+--------+ | zero | PTCL | TCP Length | +--------+--------+--------+--------+ De TCP lengte is de lengte van de TCP header plus de lengte van de data octets, de 12 octets van de pseudo header niet meegerekend. Urgent Pointer: 16 bits Wijst naar het sequence nummer van een octet die urgent is. Het bevat een positieve offset vanaf de sequence van dit segment. Dit veld wordt alleen bekeken als het URG control bit is gezet. Options: variabel Opties mogen worden toegevoegd aan het einde van de TCP header en zijn veelvouden van 8 bits. Opties worden meegerekend in het checksum. Opties kunnen beginnen op elke octet grens. Er zijn twee vormen van opties: 1. Een enkele octet van het optie type 2. Een octet van het optie type, een octet optie lengte en de eigenlijke optie data (De optie lengte telt de twee octets van het optie type en lengte, samen met de optie data) Meer over de opties op blz. 17 t/m 19 van RFC 793 Padding: variabel Een TCP header moet een veelvoud van 32 bits zijn, de padding vult deze aan met nullen.
Hogeschool van Arnhem en Nijmegen
17
Internet Advanced A
2004
Functie van TCP TCP is een verbinding georiënteerd protocol dat ervan uit gaat dat het gebruik kan maken van een simpel, misschien wel onbetrouwbaar onderliggend transport medium. Om een betrouwbare verbinding op te bouwen zorgt het protocol voor: • Basis data overdracht • Betrouwbaarheid • Flow control • Multiplexing • Verbindingen • Prioriteit • Beveiliging De verbinding wordt betrouwbaar gemaakt door het gebruik van “sequence” nummers en “acknowledgments”. In theorie krijgt iedere octet (8 bits = 1byte = 1octet http://nl.wikipedia.org/wiki/Byte) data een eigen sequence nummer. Het sequence nummer van het eerste octet data van een segment wordt verstuurd met het segment en wordt het segment sequence number genoemd. Het segment bevat ook een acknowledgment number wat het sequence number is van het volgende verwachte data octet die verstuurd gaat worden in de tegen over gestelde richting. Als er een TCP pakketje (segment) wordt verstuurd met data, dan stopt het een kopie daarvan in een “retransmission queue” en start het een timer; als de acknowledgement van die data is ontvangen dan wordt de data verwijderd uit de queue. Als de acknowledgement niet ontvangen is voordat de timer is afgelopen dan wordt het pakketje opnieuw verstuurd (Appendix E - RFC 793 – blz 10).
Verbinding opbouwen Om verschillende data stromen te onderscheiden die TCP kan opbouwen, maakt TCP gebruik van een port identifier. Port identifiers worden individueel door ieder TCP uitgekozen en zijn dus niet altijd uniek. Om ervoor te zorgen dat we een uniek adres krijgen plakken we het ipnummer samen met het poortnummer, zo krijgen we een een socket die uniek is voor de netwerken. Een socket kan meerdere verbindingen hebben met andere sockets en kan worden gebruikt om data in beide richtingen te sturen, ook wel “full duplex” genoemd. Alle informatie over een verbinding wordt opgeslagen in een structuur die je een Transmission Control Block (TCB) noemt. Deze structuur houdt alle eigenschappen vast van de verbinding. Een verbinding kan op passieve (passive OPEN) manier worden geopend, dat betekend dat het proces gaat wachten op binnenkomende verbindingen in plaats van het starten van een verbinding. Een proces dat een passieve verbinding probeert op te bouwen doet dit meestal voor willekeurige aanvragers. Zoals bijvoorbeeld een webserver die op poort 80 zit te wachten tot er een aanvraag komt (active OPEN). Op twee manieren kan een passive OPEN er achter komen welke socket er lokaal wordt aangesproken door de externe active OPEN. In het eerste geval heeft de lokale passive OPEN de externe socket gedefinieerd, in dit geval moet er sprake zijn van een exacte match. In het tweede geval voldoet iedere externe socket als de locale socket overeenkomt. Er kunnen meerdere passive OPENs zijn (gedefinieerd in TCB's) die als eerste worden getest voordat er gekeken wordt of er een lokale socket overeenkomt.
Hogeschool van Arnhem en Nijmegen
18
Internet Advanced A
2004
Three way handshake De procedure voor het opbouwen van een verbinding maakt gebruik van een synchronize (SYN) control flag en de uitwisseling van drie berichten. Deze uitwisseling wordt de “three way hand shake” genoemd. Een verbinding is opgebouwd als de sequence numbers zijn gesynchroniseerd zijn beide kanten op. ( RFC 793 – 3.4 – page 30 ). De simpelste vorm ziet er zo uit: 1. 2. 3. 4. 5.
TCP A CLOSED SYN-SENT ESTABLISHED ESTABLISHED ESTABLISHED
--> <---> -->
TCP B LISTEN <SEQ=100> --> SYN-RECEIVED <SEQ=300> <-- SYN-RECEIVED <SEQ=101> --> ESTABLISHED <SEQ=101> --> ESTABLISHED
Er staat dus: 1) 2) 3) 4)
A A A A
--> <-<--->
B B B B
SYN ACK SYN ACK
my sequence number is X your sequence number is X my sequence number is Y your sequence number is Y
Omdat stap 2 en 3 gecombineerd worden in een enkel bericht wordt dit de three-way handshake genoemd. Deze procedure is nodig, omdat netwerken niet met dezelfde tijd werken, er is dus niet een enkele klok die ieder netwerk deelt. De zender kan dus niet weten wat de ontvanger voor een nummer heeft. Hoe het verder in elkaar zit met het aanmaken van sequence nummers kun je vinden in Appendix E – RFC 793 op blz. 28 t/m 30.
Sluiten verbinding Stoppen met een verbinding betekend dat je geen data meer te versturen hebt. Het stoppen van een verbinding gaat ook door middel van een uitwisseling van segmenten (pakketjes) die het FIN control flag gezet hebben. Drie vormen: Vorm 1: Lokale gebruiker begint de CLOSE In dit geval kan er een FIN segment worden gemaakt en op de uitgaande rij (queue) worden geplaatst. Geen andere SEND's van de gebruiker worden meer geaccepteerd door de TCP en het beland in de FIN-WAIT-1 state. In deze state zijn nog wel RECEIVE's toegestaan. Alle segmenten voorafgaand aan inclusief de FIN worden verstuurd totdat ze bevestigd zijn. Als de ontvanger de FIN heeft bevestigd en een eigen FIN heeft verstuurd dan kan de eerste TCP een ACK sturen van de FIN. Een ontvanger zal altijd een ACK versturen maar stuurt pas een FIN als de gebruiker de verbinding ook afsluit. TCP A 1. ESTABLISHED 2. (Close) FIN-WAIT-1 --> 3. FIN-WAIT-2 <-4. (Close) TIME-WAIT <-5. TIME-WAIT --> 6. (2 MSL) CLOSED
TCP B ESTABLISHED <SEQ=100> --> CLOSE-WAIT <SEQ=300> <-- CLOSE-WAIT <SEQ=300> <-- LAST-ACK <SEQ=101> --> CLOSED
Hogeschool van Arnhem en Nijmegen
19
Internet Advanced A
2004
Vorm 2: TCP ontvangt een FIN van het netwerk Als een FIN onaangekondigd arriveert uit het netwerk dan verstuurd TCP een ACK en vertelt het de gebruiker dat de verbinding gaat sluiten. De gebruiker antwoord met een CLOSE, waarop TCP een FIN kan versturen na het versturen van de resterende data. Dan wacht TCP op het bevestigen van zijn eigen FIN, waarop het zijn verbinding sluit. Als de ACK niet binnenkomt, na een user-timout, dan wordt de verbinding verbroken en de gebruiker op de hoogte gebracht. Vorm 3: Beide gebruikers sluiten tegelijk Een beëindiging van de verbinding door gebruikers aan beide kanten zorgt voor een uitwisseling van FIN segmenten. Als beide ontvangen zijn en verwerkt volgt er een ACK, beide zullen bij het ontvangen van de bevestiging de verbinding verbreken. TCP A 1. ESTABLISHED 2. (Close) (Close) FIN-WAIT-1 --> <SEQ=100> <-- <SEQ=300> ... <SEQ=100> 3. CLOSING --> <SEQ=101> <-- <SEQ=301> ... <SEQ=101> 4. TIME-WAIT (2 MSL) CLOSED
TCP B ESTABLISHED ... FIN-WAIT-1 <---> ... CLOSING <---> TIME-WAIT (2 MSL) CLOSED
Data communicatie De data die over een verbinding kan worden gezien als een stroom van octets (bytes) die wordt verstuurd door middel van het uitwisselen van segmenten (pakketjes). Omdat segmenten verloren kunnen gaan om verschillende redenen maakt TCP gebruik van hertransmissie na een time-out. De verzender en de ontvanger houden elkaars sequence nummer bij zodat ze weten waar ze zijn in de stroom. De time-out is afhankelijk van de snelheid van het netwerk, hoe sneller het netwerk, hoe kleiner de timout (Appendix E – RFC 793 op blz 41 ) De versturende gebruiker geeft aan bij iedere SEND instructie of de data direct moet worden verstuurd naar de ontvanger door middel van het zetten van de PUSH flag. Het TCP proces mag de data verzamelen van de TCP gebruiker en versturen naar eigen inzicht, totdat de PUSH functie wordt gesignaleerd. Dan moet het TCP proces niet meer wachten met het versturen van data naar het ontvangende proces. Er is een relatie tussen de PUSH functie en het gebruik van buffers. Elke keer als er een PUSH flag wordt ontvangen in de buffer van de gebruiker dan stuurt de buffer de data door naar het proces om te worden verwerkt, ookal is de buffer niet gevuld. Als data aankomt die de buffer vult voordat er een PUSH wordt gevonden dan wordt de data doorgegeven aan het proces van de ontvanger in buffer grootte units. TCP heeft natuurlijk een interface om met de laag erboven en beneden te praten. De interface laag erboven is uitvoerig beschreven in de RFC 793 (blz 44 t/m 77) en is alleen interessant als er een nieuw protocol boven het TCP moet worden gemaakt.
Hogeschool van Arnhem en Nijmegen
20
Internet Advanced A
2004
UDP Een User Datagram Protocol pakketje ziet er zo uit: User Datagram Header Format 0 7 8 15 16 23 24 31 +--------+--------+--------+--------+ | Source | Destination | | Port | Port | +--------+--------+--------+--------+ | | | | Length | Checksum | +--------+--------+--------+--------+ | | data octets ... +---------------- ...
UDP wordt gebruikt in een packet-switched netwerk om berichten naar programma's te sturen met een minimum aan overhead. Het protocol is transactie gericht en het dubbel afleveren van een pakketje is niet uitgesloten. Er is geen garantie dat pakketjes goed aankomen. Source Port: Optioneel veld, als het wordt gebruikt staat er het versturende poortnummer in. Als het niet gebruikt wordt staat er nul in. Destination Port: De poort waar het naar toe moet op een bepaald internet adres. Length: De lengte in octets, de data inclusief de header Checksum: Een 16-bit one's complement van de one's complement optelling van de pseudo header met informatie van de IP header, de UDP header en de data, aangevuld met extra nullen op het eind (als dit nodig is) om een veelvoud van 2 octets te krijgen. Het Checksum veld in de UDP header maakt gebruik van de volgende pseudo header: 0 7 8 15 16 23 24 31 +--------+--------+--------+--------+ | source address | +--------+--------+--------+--------+ | destination address | +--------+--------+--------+--------+ | zero |protocol| UDP length | +--------+--------+--------+--------+
Als de berekende Checksum nul is (overflow) dan wordt het verstuurd als allemaal enen. Een checksum met de waarde nul betekend namelijk dat de verzender geen checksum heeft aangemaakt.
Hogeschool van Arnhem en Nijmegen
21
Internet Advanced A
2004
DNS Iedereen die gebruik maakt van internet gebruikt domeinnamen om verbinding te maken met een webserver. www.google.nl is bijvoorbeeld makkelijker te onthouden dan het IP-adres 216.239.59.99. Deze domeinnamen worden bijgehouden door verschillende DNS-servers in een grootte database tabel. Wanneer er thuis iemand achter de computer gaat zitten en een domeinnaam intypt, gaat er voordat er gecommuniceerd wordt er eerst een query via UDP naar 1 van de ingestelde DNS-servers gestuurd met een domeinnaam, deze DNS-server kijkt of het adres lokaal is opgeslagen. Als dat niet zo is, wordt de request doorgestuurd naar een DNS server van die regio. Wanneer je een .nl adres request doet, gaat de request via een DNS server in Nederland naar de goede server waar het IPadres verkregen wordt. De respons gaat via dezelfde weg weer terug naar jouw computer.
DNS header De DNS message header ziet er zo uit: 16
21
ID
Q
Question count
Answer count
Authority count
Additional count
Query
A T R
V
28
32 bits
B
Rcode
ID 16-bit field used to correlate queries and responses. Q 1-bit field that identifies the message as a query or response. Query 4-bit field that describes the type of message: 0 Standard query (name to address) 1 Inverse query (address to name) 2 Server status request A Authoritative Answer. 1-bit field. When set to 1, identifies the response as one made by an authoritative name server. T Truncation. 1-bit field. When set to 1, indicates the message has been truncated. R 1-bit field. Set to 1 by the resolve to request recursive service by the name server. V 1-bit field. Signals the availability of recursive service by the name server. B 3-bit field. Reserved for future use. Must be set to 0.
Hogeschool van Arnhem en Nijmegen
22
Internet Advanced A
2004
Rcode Response Code. 4-bit field that is set by the name server to identify the status of the query: 0 No erro condition 1 Unable to interpret query due to format error 2 Unable to process due to server failure 3 Name in query does not exist 4 Type of query not supported 5 Query refused Question count 16-bit field that defines the number of entries in the question section. Answer count 16-bit field that defines the number of resource records in the answer section. Authority count 16-bit field that defines the number of name server resource records in the authority section. Additional count 16-bit field that defines the number of resource records in the additional records section
DNS query De aanvraag (query) die vanaf de computer wordt verzonden naar de ingestelde DNS server ziet er als volgt uit: Domain Name System (query) Transaction ID: 0xd8c5 Flags: 0x0100 (Standard query) Questions: 1 Answer RRs: 0 Authority RRs: 0 Additional RRs: 0 Queries www.google.nl: type A, class inet Name: www.google.nl Type: Host address Class: inet
Elke query krijgt een transaction ID mee, deze wordt toegekend zodat later de juiste respons wordt ontvangen door de gebruikte applicatie. In de Flag bits wordt aangegeven of het een query of een respons betreft, met eventueel een foutmelding wanneer een query niet goed beantwoord kan worden. Questions: Aantal opgevraagde domeinnamen Queries: De domeinnaam, waarvan we het IP-adres willen weten.
Hogeschool van Arnhem en Nijmegen
23
Internet Advanced A
2004
DNS respons Een DNS respons kan er als volgt uitzien: Domain Name System (response) Transaction ID: 0xd8c5 Flags: 0x8180 (Standard query response, No error) Questions: 1 Answer RRs: 4 Authority RRs: 11 Additional RRs: 9 Queries www.google.nl: type A, class inet Name: www.google.nl Type: Host address Class: inet Answers www.google.nl: type CNAME, class inet, cname www.google.com www.google.com: type CNAME, class inet, cname www.google.akadns.net www.google.akadns.net: type A, class inet, addr 216.239.59.104 www.google.akadns.net: type A, class inet, addr 216.239.59.99 Authoritative nameservers akadns.net: type NS, class inet, ns use4.akadns.net akadns.net: type NS, class inet, ns usw5.akadns.net akadns.net: type NS, class inet, ns usw6.akadns.net akadns.net: type NS, class inet, ns usw7.akadns.net akadns.net: type NS, class inet, ns asia3.akadns.net akadns.net: type NS, class inet, ns za.akadns.org akadns.net: type NS, class inet, ns zc.akadns.org akadns.net: type NS, class inet, ns zf.akadns.org akadns.net: type NS, class inet, ns zh.akadns.org akadns.net: type NS, class inet, ns eur3.akadns.net akadns.net: type NS, class inet, ns use2.akadns.net Additional records use4.akadns.net: type A, class inet, addr 80.67.67.182 usw5.akadns.net: type A, class inet, addr 63.241.73.214 usw6.akadns.net: type A, class inet, addr 206.132.100.108 usw7.akadns.net: type A, class inet, addr 65.203.234.27 asia3.akadns.net: type A, class inet, addr 65.203.234.27 za.akadns.org: type A, class inet, addr 208.185.132.176 zc.akadns.org: type A, class inet, addr 63.241.199.54 zf.akadns.org: type A, class inet, addr 63.241.29.161 zh.akadns.org: type A, class inet, addr 63.208.48.46
De transaction ID is hetzelfde als die van de query. In de flags staat nu dat het om een respons gaat, zonder foutmeldingen. Er is 1 question ontvangen door de server. Hogeschool van Arnhem en Nijmegen
24
Internet Advanced A
2004
Er zijn 4 Answer Resource Records. Er zijn 11 Authority Resource Records. Hiermee worden Resource Records mee teruggestuurd, die op de terugweg door verschillende servers kunnen worden opgeslagen om de overige servers te ontlasten. Er zijn 9 Additional Resource Records. Dit zijn de subdomeinen die eventueel van toepassingen zouden kunnen zijn op 1 van de vervolg queries van de client. Zo kan bijvoorbeeld gelijk het adres van de mailserver worden meegestuurd.
Hogeschool van Arnhem en Nijmegen
25
Internet Advanced A
2004
HTTP Het Hypertext Transfer Protocol (HTTP/1.0) wordt gebruikt sinds 1990 en is bedoeld voor communicatie tussen webbrowser en webserver voor het uitwisselen van in Hypertext opgemaakte bestanden (HTML). Deze taal wordt gebruikt om tekst een wat mooier uiterlijk te geven, met gebruik van verschillende lettertypes en plaatjes etc. HTML code ziet er als volgt uit: voorbeeld pagina Dit is een voorbeeld van een in HyperText opgemaakte pagina
Hier kan dan wat tekst staan met eventueel hier en daar een plaatje.
Of een tabel:
En zo zijn er nog veel meer mogelijkheden
Hogeschool van Arnhem en Nijmegen
26
Internet Advanced A
2004
Met dit als resultaat:
De werking van HTTP De webbrowser maakt via TCP/IP een verbinding met de webserver. De HTTP request wordt verstuurd, waarin er een pagina of een eventuele afbeelding wordt gevraagd. Op een request volgt een HTTP-respons, met daarin de HTML code of bijvoorbeeld de inhoud van een jpeg bestand. Wanneer een respons is ontvangen wordt de TCP/IP verbinding weer verbroken. Daarom wordt HTTP een connectieloos protocol genoemd. Andere gebruikelijke protocollen (bijv. FTP) laten de connectie open waardoor je door directories en bestanden kan bladeren. Het HTTP sluit de connectie gelijk en alle verzonden informatie wordt verder vergeten. HTTP heeft nog een aantal andere functies, die over het algemeen eigenlijk niet gebruikt worden. HTTP kan ook gebruikt worden voor het aanmaken en verwijderen van bestanden, d.m.v. van PUT, DELETE en UNLINK. Hier gaan we later in het verslag verder op in.
Hogeschool van Arnhem en Nijmegen
27
Internet Advanced A
2004
HTTP requests Een HTTP request bestaat uit een request methode, namelijk GET, HEAD en POST, gevolgd door een URL, benodigde headerinformatie en eventuele inhoud.
De methode GET De methode GET vraagt een bestand op aan de server. Een GET request kan er als volgt uitzien: GET /httptest.php HTTP/1.1\r\n Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*\r\n Accept-Language: nl\r\n Accept-Encoding: gzip, deflate\r\n User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)\r\n Host: www.gerp.nl\r\n Connection: Keep-Alive\r\n \r\n
GET: Hier wordt dus gevraagd om het bestand httptest.php via het protocol HTTP 1.1. Accept: Vervolgens wordt er aangegeven welke bestandtypen er ondersteund worden door de webbrowser. In dit geval zijn dit gif-afbeeldingen, bitmaps, jpeg en pjpeg en de bestandtypen van MS Excel en Word. Accept-Language: De taalvoorkeur is Nederlands. Accept-Encoding: De ondersteunde coderingsmethoden zijn gzip en deflate. User-Agent: Geeft aan welke browser er wordt gebruikt, en eventueel het besturingssysteem. Host: De Host regel geeft aan welke hostname er gebruikt is, omdat sommige ip-adressen bereikbaar zijn via meerdere domeinnamen, kan dit van belang zijn voor de webserver om te bepalen welke website er is opgevraagd. Connection: Geeft aan dat de verbinding nog niet verbroken mag worden, omdat er nog een HTTP respons verwacht wordt.
De methode HEAD De HEAD request is in principe gelijk aan de GET request. De HEAD request krijgt echter een andere respons, namelijk zonder content. Met een HEAD request worden alleen de headers opgevraagd en de content wordt verder buiten beschouwing gelaten.
De methode POST Ook een post is voor een groot deel vergelijkbaar met een GET request. Met een POST request kan er data naar een server worden verstuurd, die van invloed kunnen zijn op de uitvoer van de pagina. Wanneer er een invulformulier gebruikt wordt op een site, wordt deze vaak met behulp van de methode POST verstuurd. Diverse scripttalen kunnen er dan voor zorgen dat deze data gelezen wordt, en eventueel opgeslagen wordt in een database of verstuurd via e-mail.
Hogeschool van Arnhem en Nijmegen
28
Internet Advanced A
2004
Hoe een POST request werkt, wordt in de volgende tekening prachtig afgebeeld:
Hier volgt een voorbeeld van hoe een POST request er uit kan zien: POST /httptest.php HTTP/1.1\r\n Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*\r\n Referer: http://www.gerp.nl/httptest.php\r\n Accept-Language: nl\r\n Content-Type: application/x-www-form-urlencoded\r\n Accept-Encoding: gzip, deflate\r\n User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)\r\n Host: www.gerp.nl\r\n Content-Length: 11\r\n Connection: Keep-Alive\r\n Cache-Control: no-cache\r\n \r\n Line-based text data: application/x-www-form-urlencoded veld=gerben
Hogeschool van Arnhem en Nijmegen
29
Internet Advanced A
2004
Enkele headers die we bij de GET request niet zagen zijn: Referer: Deze header geeft aan vanaf welke pagina de informatie is verzonden. Content-Type: Omdat er nu ook sprake is van data die wordt verzonden naar de server is het nodig om te vermelden welk type data er wordt verstuurd. Content-Lenght: Dit is de lengte van de content in karakters. Cache-Control: Deze headers moeten worden gelezen door alle cache mechanismen, waar de HTTP request langs komt. Ook proxy-servers en gateways moeten zich aan deze regel houden, en mogen de pagina dus niet zomaar in het geheugen laten staan. Line-based text data: application/x-www-form-urlencoded Hier begint de content van de request, van het type application/x-www-form-urlencoded. De data die vanuit het formulier gepost is, is: veld=gerben. “Veld” is de naam die ik de input in de html pagina heb genoemd. Gerben is de waarde die ik heb ingevuld voor ik op de submit button klikte.
HTTP response Een HTTP respons begint altijd met HTTP en een versie nummer (tegenwoordig meestal 1.1), gevolgd door een statuscode.
Status codes 1xx: een informele boodschap van de webserver voor eventueel toekomstig gebruik - 100 Continue - 101 Switching Protocols 2xx: een boodschap van de server dat de gevraagde actie succesvol is afgehandeld - 200 OK - 201 Created - 202 Accepted - 203 Non-Authoritative Information - 204 No Content - 205 Reset Content - 206 Partial Content 3xx: een verwijzing naar een andere locatie - 300 Multiple Choices - 301 Moved Permanently - 302 Found - 303 See Other - 304 Not Modified - 305 Use Proxy - 306 (niet gebruikt) - 307 Temporary Redirect Hogeschool van Arnhem en Nijmegen
30
Internet Advanced A
2004
4xx: een foutboodschap die door de client (webbrowser) veroorzaakt is - 400 BAD REQUEST - 401 UNAUTHORIZED - 403 FORBIDDEN - 404 NOT FOUND - 405 Method Not Allowed - 406 Not Acceptable - 407 Proxy Authentication Required - 408 Request Timeout - 409 Conflict - 410 Gone - 411 Length Required - 412 Precondition Failed - 413 Request Entity Too Large - 414 Request-URI Too Large - 415 Unsupported Media Type - 416 Requested Range Not Satisfiable - 417 Expectation Failed 5xx: een foutboodschap die door de webserver veroorzaakt is - 500 INTERNAL SERVER ERROR - 501 NOT IMPLEMENTED - 502 BAD GATEWAY - 503 SERVICE UNAVAILABLE - 504 Gateway Timeout - 505 HTTP Version Not Supported Dit is een voorbeeld van een http-response, deze is afkomstig van Google: HTTP/1.1 200 OK Cache-Control: private Content-Type: text/html Content-Encoding: gzip Server: GWS/2.1 Content-Length: 1117 Date: Thu, 18 Nov 2004 20:06:49 GMT
De http-response begint “HTTP” met het bijbehorende versienummer, en een statuscode. De statuscode is in dit geval 200 en betekent dus dat de aanvraag kan worden beantwoord. Cache-Control: private, geeft aan dat de respons bedoelt is voor 1 enkele user, en dus niet hoeft te worden bewaard door eventuele tussenstations zoals proxyservers of gateways. Content-Type: text/html, de inhoud van de reply bestaat alleen uit plain-text en html. Content-Encoding: gzip, eventuele encoding die is gebruikt om de inhoud van het bestand te comprimeren. Server: GWS/2.1, De software die door de server is gebruikt om de request te behandelen. Content-Length: 1117, de lengte van de content in bytes. Date: Thu, 18 Nov 2004 20:06:49 GMT, de datum van de request. Hogeschool van Arnhem en Nijmegen
31
Internet Advanced A
2004
FTP Inleiding FTP Om het FTP (File Tranfer Protocol) te bestuderen heb ik gebruik gemaakt van RFC 959 en van het programma ftp (commandline) onder Knoppix. De applicatielaag van ftp ziet er zo uit: Het FTP Model ------------|/---------\| || 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 USER-FTP
Opmerkingen: De data connectie kan beide kanten op gebruikt worden. 2. De data connectie hoeft niet de hele tijd te bestaan. Een gebruiker (User) 'praat' via een programma, het programma User-PI (protocol interpreter) vertaalt dit en beheerd het User-DTP (data tranfer process). Het User-PI praat met de Server-PI die op zijn beurt het Server-DTP beheerd. De exacte beschrijving van de definities zijn terug te vinden in appendix A (2.2 blz 3 t/m 7). Het is ook mogelijk dat de gebruiker zelf de ftp commando's verstuurd en de user interface niet gebruikt. Over dezelfde lijn als waar de commando's over verstuurd worden geeft de ftp server zijn standaard antwoorden in reactie op de commando's. 1.
FTP (File Transfer Protocol) heeft de volgende doelen: Promoten van het delen van bestanden (computer programma's en/of data) 2. Bevorderen van het indirect of impliciet (via programma's) gebruik van computers op afstand 3. Het afschermen van variaties in file systemen tussen verschillende computers 4. Data betrouwbaar en efficiënt verplaatsen 1.
Data transfer FTP is direct te gebruiken via een terminal, maar is ontworpen om gebruikt te worden door applicaties. Het ontwerp van het protocol is zo gemaakt dat het gemakkelijk te implementeren is. Het ftp protocol maakt gebruik van het Telnet protocol (RFC 854) voor het versturen van commando's. De ftp commando's geven de parameters door voor de data verbinding (data port, transfer mode, representation type en structuur) en de aard van de file system operaties (store, retrieve, append, delete, etc. ). Het User-DTP moet luisteren op de aangegeven poort, zodat de server verbinding kan maken en de data overdracht kan opstarten die overeenkomt met de opgegeven parameters. De ontvangende poort hoeft niet op de gebruikers zijn host te zijn, zolang de gebruiker er maar voor zorgt dat de ontvangende poort open staat. De verbinding kan gebruikt worden om te sturen en om te ontvangen. Hogeschool van Arnhem en Nijmegen
32
Internet Advanced A
2004
Een paar ftp data transfer commando's zijn: MODE hoe worden de bits verstuurd STRU (STRUcture) hoe wordt de data weergegeven TYPE idem Data representatie word afgehandeld in ftp door een gebruiker die een type kiest. De volgende typen zijn mogelijk: • ASCII Het standaard type die door alle ftp implementaties wordt geaccepteerd. Uitsluitend bedoeld voor het versturen van tekst bestanden. De verstuurder converteert het bestand van het interne formaat naar het standaard 8-bit NVT-ASCII formaat (zie de Telnet specificaties). De ontvanger converteert het naar de eigen interne standaard. • EBCDIC Extended Binary Coded Decimal Interchange Code http://www.legacyj.com/cobol/ebcdic.html http://www.natural-innovations.com/computing/asciiebcdic.html Voor het versturen wordt de data als 8-bit EBCDIC karakters weergegeven. • IMAGE De data wordt verstuurd als een constante stroom van bits, die voor het versturen in 8-bits verstuur bytes worden verpakt. De ontvangende kant moet de data als een constante stroom opslaan. Deze vorm is bedoeld voor het versturen van binaire data. • LOCAL Data wordt in een logische volgende verstuurd van de grootte die is opgegeven in de tweede parameter, Byte size. De grootte moet een decimale integer zijn, er is geen default waarde. De typen ASCII en EBCDIC hebben beiden een (optionele) tweede parameter om aan te geven wat er met het bestand moet gebeuren op de ontvangende host. Een tekst bestand kan om drie redenen verstuurd worden; voor af te drukken, om op te slaan voor later gebruik of om het te verwerken. De parameters zijn: • NON PRINT Dit is het standaard default formaat als de tweede parameter niet is ingevuld. Het betekend dat het bestand moet worden opgeslagen. • TELNET FORMAT CONTROLS Het bestand bevat ASCII/EBCDIC formaat controls die het printer proces vertaalt naar de juiste handelingen ( bijvoorbeeld, , , , ). • CARRIAGE CONTROL (ASA) Fortran print control, zie RFC 740 voor meer details hierover. Naast data representatie typen kan ftp ook de structuur van een bestand doorgeven. Er zijn drie bestandsstructuren gedefinieerd in ftp: • file-structuren Er is geen interne structuur en het bestand wordt behandeld als een constante stroom van data bytes. • record-structuren Een bestand is opgebouwd uit aaneengesloten records. • page-structuren Het bestand is opgebouwd uit individuele geïndexeerde pagina (pages). Standaard wordt er gebruik gemaakt van de file-structuur als het STRU commando niet is gegeven. Meer details hierover in appendix A ( blz 10 t/m 17 ).
Hogeschool van Arnhem en Nijmegen
33
Internet Advanced A
2004
Active / Passive Mode De user-DTP en de server-DTP hebben een default poort voor het versturen van data, het is dezelfde als de control connection port min 1. Op de server is de control poort 21 en de data poort 20. De user-DTP kiest een willekeurige poort boven de n>1024 met als data poort een erboven (n+1). Het User-PI heeft de mogelijkheid om de default data poort aan de gebruikerskant te wijzigen door middel van het PORT commando (Active Mode). Het user_PI kan ook aan de serverkant veranderen door gebruik te maken van het PASV commando (Passive Mode). De server is dan verantwoordelijk voor het openen, onderhouden en sluiten van de data verbindingen. Om een data verbinding te sluiten reageerde de server op een EOF, ABORT, error conditions, een gebruikers poort verandering of een normale afsluiting van de verbinding. In de Active Mode: • Het User-PI opent de control verbinding vanaf een random poort n>1024 naar het server-PI op poort 21. • Het User-PI geeft een PORT commando wat de server verteld dat er verbinding moet worden gemaakt op een specifieke data poort bij de gebruiker n+1. • De gebruiker luistert op poort n+1 wat nu de data poort is geworden. • De server stuurt data vanaf zijn eigen data port 20 naar de data poort van de gebruiker (n+1). De term Active wordt gebruikt, omdat de server gezien de data verbinding actief handelt. Het legt de verbinding, ookal is de gebruiker degene die de control verbinding aanmaakt. De gebruiker kan gebruik maken van willekeurige poorten, terwijl de server gebruik maakt van poort 21 en 20. In de Passive Mode: • Het User-PI opent twee random port verbindingen (>1024), x voor de Control verbinding en x+1 voor de data verbinding. • Het User-PI geeft een PASV commando wat de server vertelt een random data poort y te openen. • Het Server-PI stuurt dan een PORT commando terug naar de gebruiker om mee te delen welke data poort y van de server is. • De gebruiker start de data verbinding vanaf zijn eigen data poort x+1 naar de data poort van de server y. De term Passive wordt gebruikt, omdat de server een passieve rol speelt. De gebruiker legt de control verbinding en de data verbinding aan. De gebruiker maakt weer gebruik van willekeurige poorten terwijl de server nu gebruik maakt van een willekeurige poort voor de data verbinding en een poort 21 voor de control verbinding.
Transmissie modes Het versturen van data kan op drie manieren: Stream Mode
Data wordt verstuurd als een stroom van bytes. Er is geen beperking opgelegd over het representatie type dat gebruikt mag worden. Als er gebruik gemaakt wordt van een record structuur dan worden EOR en EOF door een 2 byte control code weergegeven. Het eerste byte (Escape karakter) bestaat uit allemaal enen (1111 1111) en het tweede byte uit nullen eindigend op een 1 (0000 0001) voor het EOR of een 2 (0000 0010) voor EOF of een 3 (0000 0011) voor beiden. Voor een bestand dat uit een File structuur bestaat is het EOF een indicatie dat de verzender de verbinding sluit.
Hogeschool van Arnhem en Nijmegen
34
Internet Advanced A
2004
Block Mode
In deze mode wordt data verstuurd in blokken, met ieder de volgende header: Block Header +----------------+----------------+----------------+ | Descriptor | Byte Count | | 8 bits | 16 bits | +----------------+----------------+----------------+
De header bestaat uit 24 bits, de eerste 8 bits staan voor de Descriptor codes: Code
Binairy
128 1000 000
Meaning End of data block is EOR
64 0100 0000
End of data block is EOF
32 0010 0000
Suspected errors in data block
16 0001 0000
Data block is a restart marker
Deze codes kunnen worden gecombineerd, dus een block met EOF en een EOR heeft een descriptor 1100 0000 (192 decimaal). Het tweede veld is het Byte Count veld. Dit veld bevat de totale lengte van het data block in bytes. Compressed Mode
Er zijn drie soorten informatie die verstuurd kunnen worden: Regular data Normale data, in een byte string. Byte string: 1 7 8 8 +-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+ |0| n | | d(1) | ... | d(n) | +-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+ ^ ^ |---n bytes---| of data String of n data bytes d(1),..., d(n) Count n must be positive.
Een string wordt verstuurd met het eerste bit op 0 en de daarop volgende 7 bits die aangegeven hoeveel bytes er volgen (n). Er kunnen dus tot 127 bytes worden verstuurd . Replicated data Om een gecomprimeerde string te sturen worden de volgende twee bytes verstuurd: Replicated Byte: 2 6 8 +-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+ |1 0| n | | d | +-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+
De eerste twee bits geven aan dat het hier om replicated data gaat, de 6 bits erna geven het aantal maal dat het volgende byte moet worden herhaald. Een string met n filler bytes kan worden gecomprimeerd tot een enkele byte, waar de filler byte varieert door het representatie type. Bij ASCII of EBCDIC is het een spatie (ASCII code 32, EBCDIC code 64). Als het type Image of Local is dan is het een zero byte. Filler String: 2 6 +-+-+-+-+-+-+-+-+ |1 1| n | +-+-+-+-+-+-+-+-+
Hogeschool van Arnhem en Nijmegen
35
Internet Advanced A
2004
Escape Sequence In een Escape Sequence is het eerste byte 0 (0000 0000) en het tweede byte gelijk aan de Descriptor byte die wordt gebruikt in de Blocking Mode. Dezelfde codes worden gebruikt om de volgende data aan te geven. 8 +-+-+-+-+-+-+-+-+ |0 0 0 0 0 0 0 0| | | +-+-+-+-+-+-+-+-+
8 +----------------+ | Descriptor | | 8 bits | +----------------+
De werking van FTP Per laag zal ik laten zien hoe de verbinding wordt opgebouwd, met als laatste de applicatie laag. In de kaders geef ik telkens een stuk van de trace weer, met op bepaalde plekken een kleur. Onder de trace staat direct welke pakketjes de trace bevat en hoe deze zijn opgebouwd. De uitleg van de trace bevat op bepaalde plekken dezelfde kleuren, hiermee benadruk ik de positie van de velden in de trace. Bijvoorbeeld in het eerste pakketje is de rode kleur het type ARP in het Ethernet pakketje, de trace is zo makkelijker te lezen.
Netwerk laag Voor communicatie op de netwerk laag worden in een Ethernet netwerk MAC adressen gebruikt. Deze worden uitgewisseld via een Ethernet pakketje met daarin een ARP pakketje. Ook bij een FTP verbinding moet er dus eerst een MAC adres van de server worden opgehaald. Om dit voor elkaar te krijgen stuurt eerst de computer die verbinding wil maken een ARP pakketje met daarin het IP address van zichzelf. Dit was in de test een computer met Knoppix die een ftp client draaide. De server geeft antwoord, zodat de client weet waar de Ethernet pakketjes heen moeten. In dit voorbeeld (packet 1) is 10.0.0.150 de client en 10.0.0.154 de server. packet 1 0000
ff ff ff ff ff ff 00 90
f5 24 a0 42 08 06 00 01
........ .$.B....
0010
08 00 06 04 00 01 00 90
f5 24 a0 42 0a 00 00 96
........ .$.B....
0020
00 00 00 00 00 00 0a 00
00 9a
........ ..
Ethernet II, Src: 00:90:f5:24:a0:42, Dst: ff:ff:ff:ff:ff:ff Destination: ff:ff:ff:ff:ff:ff (Broadcast) Source: 00:90:f5:24:a0:42 (10.0.0.150) Type: ARP (0x0806) Address Resolution Protocol (request) Hardware type: Ethernet (0x0001) Protocol type: IP (0x0800) Hardware size: 6 Protocol size: 4 Opcode: request (0x0001) Sender MAC address: 00:90:f5:24:a0:42 (10.0.0.150) Sender IP address: 0a:00:00:96 (10.0.0.150) Target MAC address: 00:00:00:00:00:00 (00:00:00_00:00:00) Target IP address: 0a:00:00:9a (10.0.0.154)
Een ARP broadcast naar alle computers vanaf computer 10.0.0.150, met de vraag “Wie heeft 10.0.0.154?” (operation code 0x0001 ). Hierop antwoord alleen computer 10.0.0.154 (packet 2) door het MAC address in te vullen (00:00:00:00:00:00) en te versturen naar 10.0.0.150 (ARP operation code 0x002) op het MAC address (00:90:f5:24:a0:42). Hogeschool van Arnhem en Nijmegen
36
Internet Advanced A
2004
packet 2 0000
00 90 f5 24 a0 42 00 00 00 00 00 00 08 06 00 01
...$.B..........
0010
08 00 06 04 00 02 00 00 00 00 00 00 0a 00 00 9a
................
0020
00 90 f5 24 a0 42 0a 00 00 96 ff ff ff ff ff ff
...$.B..........
0030
ff ff ff ff ff ff ff ff ff ff ff ff
............
Ethernet II, Src: 00:00:00:00:00:00, Dst: 00:90:f5:24:a0:42 Destination: 00:90:f5:24:a0:42 (10.0.0.150) Source: 00:00:00:00:00:00 (00:00:00_00:00:00) Type: ARP (0x0806) Trailer: FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF... Address Resolution Protocol (reply) Hardware type: Ethernet (0x0001) Protocol type: IP (0x0800) Hardware size: 6 Protocol size: 4 Opcode: reply (0x0002) Sender MAC address: 00:00:00:00:00:00 (00:00:00_00:00:00) Sender IP address: 0a:00:00:9a (10.0.0.154) Target MAC address: 00:90:f5:24:a0:42 (10.0.0.150) Target IP address: 0a:00:00:96 (10.0.0.150)
Normaal gesproken is een MAC address een getal dat groter is als nul, maar in mijn thuis netwerk onder Knoppix is dit niet zo.
Internet / transport laag In dit voorbeeld ga ik ervan uit dat het IP nummer van de FTP server al bekend is. Het kan natuurlijk ook zo zijn dat het nummer eerst moet worden opgehaald, zonder ipnummer kan er namelijk niets verstuurd worden. Het ophalen van een IP nummer is terug te vinden in het DNS en IP hoofdstuk. Nu bekend is geworden voor de computer naar welk Ethernet adres de pakketjes heen moeten begint met TCP de zogenaamde “three-way handshake” De client stuurt een IP pakketje (packet 3) met daarin een TCP pakketje die als source port 32805 (0x8025) heeft en als destination port 21 (0x0015) ftp. De TCP header lengte is 40 bytes (a = 10 x 32 bits = 40 bytes). Het TCP pakketje heeft in de flags de waarden 0x002 staan, binair (0000 0010), wat betekend dat het 2de bit gezet is ( SYN – Synchronize sequence numbers – zie RFC 793 – page 16 ). Hiermee geeft de client aan dat er vanaf een bepaald nummer gewerkt gaat worden (29:3a:46:1b ) relatief gezien 0. Als acknowledgement number vult hij een 0 in (00:00:00:00). Dit nummer wordt ingevuld door de server in het antwoord. Verder is de window size 5840 (0x16d0 ), het aantal data octets vanaf het acknowledgement veld die de verstuurder van dit bericht bereid is te accepteren. Verder is het checksum (0x5b6b) veld gevuld en bevat het 20 bytes aan opties. Kijk voor meer informatie in het hoofdstuk TCP.
Hogeschool van Arnhem en Nijmegen
37
Internet Advanced A
2004
packet 3 0000
00 00 00 00 00 00 00 90 f5 24 a0 42 08 00 45 00
.........$.B..E.
0010
00 3c 96 c2 40 00 40 06 8e ca 0a 00 00 96 0a 00
.<..@.@.........
0020
00 9a 80 25 00 15 29 3a 46 1b 00 00 00 00 a0 02
...%..):F.......
0030
16 d0 5b 6b 00 00 02 04 05 b4 04 02 08 0a 00 33
..[k...........3
0040
d0 d9 00 00 00 00 01 03 03 00
..........
Ethernet II, Src: 00:90:f5:24:a0:42, Dst: 00:00:00:00:00:00 Destination: 00:00:00:00:00:00 (00:00:00_00:00:00) Source: 00:90:f5:24:a0:42 (10.0.0.150) Type: IP (0x0800) Internet Protocol, Src Addr: 10.0.0.150, Dst Addr: 10.0.0.154 Version: 4 Header length: 20 bytes (5 x 32 bits) Total Length: 0x3c (60) Identification: 0x96c2 (38594) Flags: 0x04 (Don't Fragment) Fragment offset: 0x00 (0) Time to live: 0x40 (64) Protocol: TCP (0x06) Header checksum: 0x8eca (correct) Source: 0a:00:00:96 (10.0.0.150) Destination: 0a:00:00:9a (10.0.0.154) Transmission Control Protocol, Src Port: 32805, Dst Port: ftp (21), Seq: 0, Ack: 0, Len: 0 Source port: 0x8025 (32805) Destination port: 0x0015 ftp (21) Sequence number: 0 (relative sequence number -> 29:3a:46:1b) Header length: 0xa (40 bytes <=> 10 x 32 bits) Flags: 0x002 (SYN) Window size: 0x16d0 (5840) Checksum: 0x5b6b (correct) Options: (20 bytes) Maximum segment size: 1460 bytes (0x05b4) SACK permitted Time stamp: tsval 3395801, tsecr 0 (33:d0:d9) NOP Window scale: 0 (multiply by 1)
De server geeft als antwoord (packet 4) zijn sequence een relatieve 0 (43:cd:aa:9b) en het relatieve acknowledgement number 1 (29:3a:46:1c). De flags worden op 0x012 gezet (binair 0001 0010) dat betekend dat het acknowledgement field significant bit (ACK) gezet is samen met het SYN bit. Nu weet de server welk nummer de client gebruikt en welk nummer de client gebruikt.
Hogeschool van Arnhem en Nijmegen
38
Internet Advanced A
2004
packet 4 0000
00 90 f5 24 a0 42 00 00 00 00 00 00 08 00 45 00
...$.B........E.
0010
00 3c 00 00 40 00 40 06 25 8d 0a 00 00 9a 0a 00
.<..@.@.%.......
0020
00 96 00 15 80 25 43 cd aa 9b 29 3a 46 1c a0 12
.....%C...):F...
0030
16 a0 8c 28 00 00 02 04 05 b4 04 02 08 0a 00 33
...(...........3
0040
e0 c5 00 33 d0 d9 01 03 03 00
...3......
Ethernet II, Src: 00:00:00:00:00:00, Dst: 00:90:f5:24:a0:42 Internet Protocol, Src Addr: 0a:00:00:9a (10.0.0.154), Dst Addr: 0a:00:00:96 (10.0.0.150) Protocol: TCP (0x06) Source: 0a:00:00:9a (10.0.0.154) Destination: 0a:00:00:96 (10.0.0.150) Transmission Control Protocol, Src Port: ftp (21), Dst Port: 32805, Seq: 0, Ack: 1, Len: 0 Source port: 0x0015 ftp (21) Destination port: 0x8025 (32805) Sequence number: 0 (relative sequence number -> 43:cd:aa:9b ) Acknowledgement number: 1 (relative ack number -> 29:3a:46:1c) Header length: 40 bytes (0xa <=> 10 x 32 bits) Flags: 0x012 (SYN, ACK) Window size: 0x16a0 (5792) Checksum: 0x8c28 (correct) Options: (20 bytes) Maximum segment size: 1460 bytes (0x05b4) SACK permitted Time stamp: tsval 3399877 (00:33:e0:c5), tsecr 3395801 (00:33:d0:d9) NOP Window scale: 0 (multiply by 1)
Zoal verwacht stuurt de client daarna een TCP pakketje (packet 5) met daarin zijn sequence number 1 (29:3a:46:1c) en het acknowledgement number 1 (43:cd:aa:9c). Met in de flags op 0x0010 (binair 0001 0000) ACK bit gezet, na dit pakketje is de verbinding tot stand gebracht.
Hogeschool van Arnhem en Nijmegen
39
Internet Advanced A
2004
packet 5 0000
00 00 00 00 00 00 00 90 f5 24 a0 42 08 00 45 00
.........$.B..E.
0010
00 34 96 c3 40 00 40 06 8e d1 0a 00 00 96 0a 00
.4..@.@.........
0020
00 9a 80 25 00 15 29 3a 46 1c 43 cd aa 9c 80 10
...%..):F.C.....
0030
16 d0 ba bd 00 00 01 01 08 0a 00 33 d0 d9 00 33
...........3...3
0040
e0 c5
..
Ethernet II, Src: 00:90:f5:24:a0:42, Dst: 00:00:00:00:00:00 Internet Protocol, Src Addr: 10.0.0.150, Dst Addr: 10.0.0.154 Transmission Control Protocol, Src Port: 32805, Dst Port: ftp (21), Seq: 1, Ack: 1, Len: 0 Source port: 0x8025 (32805) Destination port: 0x0015 ftp (21) Sequence number: 1 (relative sequence number -> 29:3a:46:1c) Acknowledgement number: 1 (relative ack number -> 43:cd:aa:9c) Header length: 32 bytes (0x8 <=> 8 x 32 bits) Flags: 0x010 (ACK) Window size: 0x16d0 (5840) Checksum: 0xbabd (correct) Options: (12 bytes) NOP NOP Time stamp: tsval 3395801 (00:33:d0:d9), tsecr 3399877 (00:33:e0:c5)
Applicatielaag Nu de verbinding tot stand gebracht is kan er in de applicatielaag een verbinding worden opgebouwd. In dit deel behandelen we alleen de FTP communicatie, hoofdzakelijk heb ik hiervoor Appendix A – RFC 959 gebruikt. Daarnaast heb ik gebruik gemaakt van de internet sites: http://www.cs.wm.edu/~lowekamp/classes/434/projects/proj1.html http://www.rhyshaden.com/ftp.htm De server geeft als de verbinding is opgebouwd een response: 220 ProFTPD 1.2.9 Server (ProFTPD Default Installation) [ont002]\r\n Dit geeft aan dat de server (ProFTPD in dit voorbeeld) klaar is voor een nieuwe gebruiker (RFC 959 – paragraaf 4.2 bevat alle FTP replies). Het kan ook meerdere regels bevatten maar iedere regel moet dan met 220 beginnen.
Hogeschool van Arnhem en Nijmegen
40
Internet Advanced A
2004
packet 8 0000
00 90 f5 24 a0 42 00 00 00 00 00 00 08 00 45 10
...$.B........E.
0010
00 76 4a 59 40 00 40 06 da e9 0a 00 00 9a 0a 00
.vJY@.@.........
0020
00 96 00 15 80 25 43 cd aa 9c 29 3a 46 1c 80 18
.....%C...):F...
0030
16 a0 5a 83 00 00 01 01 08 0a 00 33 e0 d6 00 33
..Z........3...3
0040
d0 d9 32 32 30 20 50 72 6f 46 54 50 44 20 31 2e
..220 ProFTPD 1.
0050
32 2e 39 20 53 65 72 76 65 72 20 28 50 72 6f 46
2.9 Server (ProF
0060
54 50 44 20 44 65 66 61 75 6c 74 20 49 6e 73 74
TPD Default Inst
0070
61 6c 6c 61 74 69 6f 6e 29 20 5b 6f 6e 74 30 30
allation) [ont00
0080
32 5d 0d 0a
2]..
Ethernet II, Src: 00:00:00:00:00:00, Dst: 00:90:f5:24:a0:42 Internet Protocol, Src Addr: 10.0.0.154, Dst Addr: 10.0.0.150 Transmission Control Protocol, Src Port: ftp (21), Dst Port: 32805, Seq: 1, Ack: 1, Len: 66 File Transfer Protocol (FTP) 220 ProFTPD 1.2.9 Server (ProFTPD Default Installation) [ont002]\r\n Response code: Service ready for new user (220) Response arg: ProFTPD 1.2.9 Server (ProFTPD Default Installation) [ont002]
Na een bevestigings pakketje van packet 8 wordt er door de client het commando “USER” verstuurd met als parameter “stephan”. De software geeft door aan TCP dat dit meteen moet worden verstuurd door het PSH bit samen met het ACK bit te zetten. Hierop volgt een bevestiging van de server (ACK). packet 10 0000
00 00 00 00 00 00 00 90 f5 24 a0 42 08 00 45 10
.........$.B..E.
0010
00 42 96 c5 40 00 40 06 8e b1 0a 00 00 96 0a 00
.B..@.@.........
0020
00 9a 80 25 00 15 29 3a 46 1c 43 cd aa de 80 18
...%..):F.C.....
0030
16 d0 15 64 00 00 01 01 08 0a 00 33 df f4 00 33
...d.......3...3
0040
e0 d6 55 53 45 52 20 73 74 65 70 68 61 6e 0d 0a
..USER stephan..
Ethernet II, Src: 00:90:f5:24:a0:42, Dst: 00:00:00:00:00:00 Internet Protocol, Src Addr: 10.0.0.150, Dst Addr: 10.0.0.154 Transmission Control Protocol, Src Port: 32805, Dst Port: ftp (21), Seq: 1, Ack: 67, Len: 14 Flags: 0x0018 (PSH, ACK) File Transfer Protocol (FTP) USER stephan\r\n
De server geeft daarop het antwoord in packet 12: 331 Password required for stephan\r\n Dit betekend dat de gebruikersnaam correct is en dat er nu een wachtwoord moet worden verstuurd. Ook de server geeft aan dat dit commando meteen moet worden verstuurd en bevestigd.
Hogeschool van Arnhem en Nijmegen
41
Internet Advanced A
2004
packet 12 0000
00 90 f5 24 a0 42 00 00 00 00 00 00 08 00 45 10
...$.B........E.
0010
00 58 4a 5b 40 00 40 06 db 05 0a 00 00 9a 0a 00
.XJ[@.@.........
0020
00 96 00 15 80 25 43 cd aa de 29 3a 46 2a 80 18
.....%C...):F*..
0030
16 a0 23 5d 00 00 01 01 08 0a 00 33 ef e1 00 33
..#].......3...3
0040
df f4 33 33 31 20 50 61 73 73 77 6f 72 64 20 72
..331 Password r
0050
65 71 75 69 72 65 64 20 66 6f 72 20 73 74 65 70
equired for step
0060
68 61 6e 2e 0d 0a
han...
Ethernet II, Src: 00:00:00:00:00:00, Dst: 00:90:f5:24:a0:42 Internet Protocol, Src Addr: 10.0.0.154, Dst Addr: 10.0.0.150 Transmission Control Protocol, Src Port: ftp (21), Dst Port: 32805, Seq: 67, Ack: 15, Len: 36 Flags: 0x0018 (PSH, ACK) File Transfer Protocol (FTP) 331 Password required for stephan.\r\n
De client stuurt dan als antwoord in packet 14 het commando: PASS <wachtwoord>\r\n packet 14 0000
00 00 00 00 00 00 00 90 f5 24 a0 42 08 00 45 10
.........$.B..E.
0010
00 43 96 c7 40 00 40 06 8e ae 0a 00 00 96 0a 00
.C..@.@.........
0020
00 9a 80 25 00 15 29 3a 46 2a 43 cd ab 02 80 18
...%..):F*C.....
0030
16 d0 15 65 00 00 01 01 08 0a 00 33 ec 1b 00 33
...e.......3...3
0040
ef e1 50 41 53 53 20 78 78 78 78 78 78 78 78 0d
..PASS xxxxxxxx.
0050
0a
.
Ethernet II, Src: 00:90:f5:24:a0:42, Dst: 00:00:00:00:00:00 Internet Protocol, Src Addr: 10.0.0.150, Dst Addr: 10.0.0.154 Transmission Control Protocol, Src Port: 32805, Dst Port: ftp (21), Seq: 15, Ack: 103, Len: 15 Flags: 0x0018 (PSH, ACK) File Transfer Protocol (FTP) PASS xxxxxxxx\r\n
De server geeft dan als antwoord in packet 15: 230 User stephan logged in.\r\n De verbinding op de applicatielaag is tot stand gebracht. packet 15 0000
00 90 f5 24 a0 42 00 00 00 00 00 00 08 00 45 10
...$.B........E.
0010
00 51 4a 5c 40 00 40 06 db 0b 0a 00 00 9a 0a 00
.QJ\@.@.........
0020
00 96 00 15 80 25 43 cd ab 02 29 3a 46 39 80 18
.....%C...):F9..
0030
16 a0 02 fb 00 00 01 01 08 0a 00 33 fc 10 00 33
...........3...3
0040
ec 1b 32 33 30 20 55 73 65 72 20 73 74 65 70 68
..230 User steph
0050
61 6e 20 6c 6f 67 67 65 64 20 69 6e 2e 0d 0a
an logged in...
Ethernet II, Src: 00:00:00:00:00:00, Dst: 00:90:f5:24:a0:42 Internet Protocol, Src Addr: 10.0.0.154, Dst Addr: 10.0.0.150 Transmission Control Protocol, Src Port: ftp (21), Dst Port: 32805, Seq: 103, Ack: 30, Len: 29 Flags: 0x0018 (PSH, ACK) File Transfer Protocol (FTP) 230 User stephan logged in.\r\n
Hogeschool van Arnhem en Nijmegen
42
Internet Advanced A
2004
De client stuurt hiernaar het commando: SYST\r\n Om uit te zoeken wat voor een besturingssysteem de server draait (RFC – blz 33). Het is een informatief commando, waarop de volgende reacties kunnen komen 215, 500, 501, 502 en 421 volgens de RFC (blz 53). packet 17 0000
00 00 00 00 00 00 00 90 f5 24 a0 42 08 00 45 10
.........$.B..E.
0010
00 3a 96 c9 40 00 40 06 8e b5 0a 00 00 96 0a 00
.:..@.@.........
0020
00 9a 80 25 00 15 29 3a 46 39 43 cd ab 1f 80 18
...%..):F9C.....
0030
16 d0 15 5c 00 00 01 01 08 0a 00 33 ec 25 00 33
...\.......3.%.3
0040
fc 10 53 59 53 54 0d 0a
..SYST..
Ethernet II, Src: 00:90:f5:24:a0:42, Dst: 00:00:00:00:00:00 Internet Protocol, Src Addr: 10.0.0.150, Dst Addr: 10.0.0.154 Transmission Control Protocol, Src Port: 32805, Dst Port: ftp (21), Seq: 30, Ack: 132, Len: 6 Flags: 0x0018 (PSH, ACK) File Transfer Protocol (FTP) SYST\r\n
Zoals verwacht stuurt de server dan ook het antwoord in packet 18: 215 UNIX Type: L8\r\n Het volgt de convensie waarin NAME voor een officiële systeem naam staat. (RFC 943 Assigned Numbers). packet 18 0000
00 90 f5 24 a0 42 00 00 00 00 00 00 08 00 45 10
...$.B........E.
0010
00 47 4a 5d 40 00 40 06 db 14 0a 00 00 9a 0a 00
.GJ]@.@.........
0020
00 96 00 15 80 25 43 cd ab 1f 29 3a 46 3f 80 18
.....%C...):F?..
0030
16 a0 1c 44 00 00 01 01 08 0a 00 33 fc 11 00 33
...D.......3...3
0040
ec 25 32 31 35 20 55 4e 49 58 20 54 79 70 65 3a
.%215 UNIX Type:
0050
20 4c 38 0d 0a
L8..
Ethernet II, Src: 00:00:00:00:00:00, Dst: 00:90:f5:24:a0:42 Internet Protocol, Src Addr: 10.0.0.154, Dst Addr: 10.0.0.150 Transmission Control Protocol, Src Port: ftp (21), Dst Port: 32805, Seq: 132, Ack: 36, Len: 19 File Transfer Protocol (FTP) 215 UNIX Type: L8\r\n
Hierna geeft de client door aan de server op welke poort de data moet worden doorgegeven. Dit gebeurd met het PORT commando (Active Mode). In packet 20 ziet het commando er zo uit: PORT 10,0,0,150,128,38\r\n In de (RFC – blz 28) staat 'PORT h1,h2,h3,h4,p1,p2' hierin staat h1 voor het hoge bereik van het internet host adres. Verder staat er niets over p1 en p2, maar die staan voor het poortnummer waar de data op ontvangen mag worden ( (p1* 256) + p2). In packet 20 is dit dus 128x256 + 38 = 32806.
Hogeschool van Arnhem en Nijmegen
43
Internet Advanced A
2004
packet 20 0000
00 00 00 00 00 00 00 90 f5 24 a0 42 08 00 45 10
.........$.B..E.
0010
00 4c 96 cb 40 00 40 06 8e a1 0a 00 00 96 0a 00
.L..@.@.........
0020
00 9a 80 25 00 15 29 3a 46 3f 43 cd ab 32 80 18
...%..):F?C..2..
0030
16 d0 15 6e 00 00 01 01 08 0a 00 33 f8 0a 00 33
...n.......3...3
0040
fc 11 50 4f 52 54 20 31 30 2c 30 2c 30 2c 31 35
..PORT 10,0,0,15
0050
30 2c 31 32 38 2c 33 38 0d 0a
0,128,38..
Ethernet II, Src: 00:90:f5:24:a0:42, Dst: 00:00:00:00:00:00 Internet Protocol, Src Addr: 10.0.0.150, Dst Addr: 10.0.0.154 Transmission Control Protocol, Src Port: 32805, Dst Port: ftp (21), Seq: 36, Ack: 151, Len: 24 Flags: 0x0018 (PSH, ACK) File Transfer Protocol (FTP) PORT 10,0,0,150,128,38\r\n Request command: PORT Request arg: 10,0,0,150,128,38 Active IP address: 10.0.0.150 Active port: 32806
De server beantwoord het PORT commando (RFC – blz 51) in packet 21 met 200, maar dat had dus ook 500, 501, 421 of 530 kunnen zijn. 200 PORT command successful\r\n (200 Command okay – RFC – blz 42) Dit betekend dat de server nu weet waar de data naar toe moet worden gestuurd. packet 21 0000
00 90 f5 24 a0 42 00 00 00 00 00 00 08 00 45 10
...$.B........E.
0010
00 51 4a 5e 40 00 40 06 db 09 0a 00 00 9a 0a 00
.QJ^@.@.........
0020
00 96 00 15 80 25 43 cd ab 32 29 3a 46 57 80 18
.....%C..2):FW..
0030
16 a0 b1 d8 00 00 01 01 08 0a 00 34 07 f6 00 33
...........4...3
0040
f8 0a 32 30 30 20 50 4f 52 54 20 63 6f 6d 6d 61
..200 PORT comma
0050
6e 64 20 73 75 63 63 65 73 73 66 75 6c 0d 0a
nd successful..
Ethernet II, Src: 00:00:00:00:00:00, Dst: 00:90:f5:24:a0:42 Internet Protocol, Src Addr: 10.0.0.154, Dst Addr: 10.0.0.150 Transmission Control Protocol, Src Port: ftp (21), Dst Port: 32805, Seq: 151, Ack: 60, Len: 29 Flags: 0x0018 (PSH, ACK) File Transfer Protocol (FTP) 200 PORT command successful\r\n
De client stuurt daarna (packet 23) het LIST commando (RFC 959 – blz 32). Het LIST commando geeft een lijst van bestanden of informatie over een bepaald bestand.
Hogeschool van Arnhem en Nijmegen
44
Internet Advanced A
2004
packet 23 0000
00 00 00 00 00 00 00 90 f5 24 a0 42 08 00 45 10
.........$.B..E.
0010
00 3a 96 cd 40 00 40 06 8e b1 0a 00 00 96 0a 00
.:..@.@.........
0020
00 9a 80 25 00 15 29 3a 46 57 43 cd ab 4f 80 18
...%..):FWC..O..
0030
16 d0 15 5c 00 00 01 01 08 0a 00 33 f8 0b 00 34
...\.......3...4
0040
07 f6 4c 49 53 54 0d 0a
..LIST..
Ethernet II, Src: 00:90:f5:24:a0:42, Dst: 00:00:00:00:00:00 Internet Protocol, Src Addr: 10.0.0.150, Dst Addr: 10.0.0.154 Transmission Control Protocol, Src Port: 32805, Dst Port: ftp (21), Seq: 60, Ack: 180, Len: 6 Flags: 0x0018 (PSH, ACK) File Transfer Protocol (FTP) LIST\r\n
De server start een Three-way-handshake om data poort 32806 te openen en bevestigd het commando (packet 27) met: 150 Opening ASCII mode data connection for file list\r\n packet 27 0000
00 90 f5 24 a0 42 00 00 00 00 00 00 08 00 45 10
...$.B........E.
0010
00 6a 4a 5f 40 00 40 06 da ef 0a 00 00 9a 0a 00
.jJ_@.@.........
0020
00 96 00 15 80 25 43 cd ab 4f 29 3a 46 5d 80 18
.....%C..O):F]..
0030
16 a0 7b 3b 00 00 01 01 08 0a 00 34 07 f9 00 33
..{;.......4...3
0040
f8 0b 31 35 30 20 4f 70 65 6e 69 6e 67 20 41 53
..150 Opening AS
0050
43 49 49 20 6d 6f 64 65 20 64 61 74 61 20 63 6f
CII mode data co
0060
6e 6e 65 63 74 69 6f 6e 20 66 6f 72 20 66 69 6c
nnection for fil
0070
65 20 6c 69 73 74 0d 0a
e list..
Ethernet II, Src: 00:00:00:00:00:00, Dst: 00:90:f5:24:a0:42 Internet Protocol, Src Addr: 10.0.0.154, Dst Addr: 10.0.0.150 Transmission Control Protocol, Src Port: ftp (21), Dst Port: 32805, Seq: 180, Ack: 66, Len: 54 File Transfer Protocol (FTP) 150 Opening ASCII mode data connection for file list\r\n Response code: File status okay; about to open data connection (150)
Het volgende packet (28) gaat via de data connectie (poort 20) naar de client naar poort 32806.
Hogeschool van Arnhem en Nijmegen
45
Internet Advanced A
2004
packet 28 0000
00 90 f5 24 a0 42 00 00 00 00 00 00 08 00 45 00
...$.B........E.
0010
00 f2 85 5b 40 00 40 06 9f 7b 0a 00 00 9a 0a 00
...[@.@..{......
0020
00 96 00 14 80 26 44 a5 82 af 29 40 b8 31 80 18
.....&D...)@.1..
0030
16 d0 4c 08 00 00 01 01 08 0a 00 34 07 fa 00 33
..L........4...3
0040
f8 0b 64 72 77 78 2d 2d 2d 2d 2d 2d 20 20 20 33
..drwx------
0050
20 73 74 65 70 68 61 6e 20 20 73 74 65 70 68 61
0060
6e 20 20 20 20 20 20 34 30 39 36 20 4d 61 72 20
n
0070
31 38 20 20 32 30 30 34 20 44 65 73 6b 74 6f 70
18
0080
0d 0a 64 72 77 78 72 2d 78 72 2d 78 20 20 20 32
..drwxr-xr-x
0090
20 73 74 65 70 68 61 6e 20 20 73 74 65 70 68 61
00a0
6e 20 20 20 20 20 20 34 30 39 36 20 4e 6f 76 20
n
00b0
32 33 20 30 31 3a 35 33 20 44 6f 63 75 6d 65 6e
23 01:53 Documen
00c0
74 73 0d 0a 64 72 77 78 2d 2d 2d 2d 2d 2d 20 20
ts..drwx------
00d0
20 33 20 73 74 65 70 68 61 6e 20 20 73 74 65 70
00e0
68 61 6e 20 20 20 20 20 20 34 30 39 36 20 4e 6f
han
00f0
76 20 32 33 20 30 30 3a 35 33 20 74 6d 70 0d 0a
v 23 00:53 tmp..
stephan
3
stepha
4096 Mar 2004 Desktop
stephan
2
stepha
4096 Nov
3 stephan
step
4096 No
Ethernet II, Src: 00:00:00:00:00:00, Dst: 00:90:f5:24:a0:42 Internet Protocol, Src Addr: 10.0.0.154, Dst Addr: 10.0.0.150 Transmission Control Protocol, Src Port: ftp-data (20), Dst Port: 32806, Seq: 1, Ack: 1, Len: 190 Source port: ftp-data (20) Destination port: 32806 Sequence number: 1
(relative sequence number)
Next sequence number: 191
(relative sequence number)
Acknowledgement number: 1
(relative ack number)
Flags: 0x0018 (PSH, ACK) FTP Data FTP Data: drwx-----drwxr-xr-x drwx------
3 stephan 2 stephan 3 stephan
stephan stephan stephan
4096 Mar 18 2004 Desktop\r\n 4096 Nov 23 01:53 Documents\r\n 4096 Nov 23 00:53 tmp\r\n
Na het versturen van de data sluit de server de verbinding. (packet De geeft aan het einde van het versturen een bevestiging (packet 33) door te sturen: 226 Transfer complete\r\n
Hogeschool van Arnhem en Nijmegen
46
Internet Advanced A
2004
packet 33 0000
00 90 f5 24 a0 42 00 00 00 00 00 00 08 00 45 10
...$.B........E.
0010
00 4c 4a 60 40 00 40 06 db 0c 0a 00 00 9a 0a 00
.LJ`@.@.........
0020
00 96 00 15 80 25 43 cd ab 85 29 3a 46 5d 80 18
.....%C...):F]..
0030
16 a0 9c 46 00 00 01 01 08 0a 00 34 07 fa 00 33
...F.......4...3
0040
f8 0b 32 32 36 20 54 72 61 6e 73 66 65 72 20 63
..226 Transfer c
0050
6f 6d 70 6c 65 74 65 2e 0d 0a
omplete...
Ethernet II, Src: 00:00:00:00:00:00, Dst: 00:90:f5:24:a0:42 Internet Protocol, Src Addr: 10.0.0.154, Dst Addr: 10.0.0.150 Transmission Control Protocol, Src Port: ftp (21), Dst Port: 32805, Seq: 234, Ack: 66, Len: 24 Flags: 0x0018 (PSH, ACK) File Transfer Protocol (FTP) 226 Transfer complete.\r\n Response code: Closing data connection (226) Response arg: Transfer complete.
Hierna volgden de volgende handelingen en hun reactie van de server: Server 10.0.0.154 / Client 10.0.0.150 packet 35 CWD Documents\r\n CHANGE WORKING DIRECTORY (CWD) packet 36 250 CWD command successful.\r\n Response code: Requested file action okay, completed (250) packet 38 PORT 10,0,0,150,128,39\r\n Active IP address: 10.0.0.150 Active port: 32807 (128x256 + 39) (een nieuwe verbinding wordt geopend naar poort 32807) packet 39 200 PORT command successful\r\n packet 41 LIST\r\n packet 45 150 Opening ASCII mode data connection for file list\r\n Response code: File status okay; about to open data connection (150)
Hogeschool van Arnhem en Nijmegen
47
Internet Advanced A
2004
Server 10.0.0.154 / Client 10.0.0.150 packet 46 TCP, Src Port: ftp-data (20), Dst Port: 32807, Seq: 1, Ack: 1, Len: 125 Source port: ftp-data (20) Destination port: 32807 (32807) FTP Data FTP Data: -rw-r--r--rwxr-xr-x De verbinding packet 47 server stuurt packet 48 client stuurt packet 49 client stuurt packet 50 server stuurt
1 root 1 root
root root
94 Nov 23 01:50 Text.txt\r\n 83864 Nov 23 01:53 ftp\r\n
wordt hierna op poort 32807 gesloten: FIN, ACK ACK FIN, ACK ACK
packet 51 226 Transfer complete.\r\n Response code: Closing data connection (226) packet 53 TYPE I\r\n REPRESENTATION TYPE A – ASCII E – EBCDIC I – IMAGE L - Local byte Byte size packet 54 200 Type set to I\r\n packet 56 PORT 10,0,0,150,128,40\r\n Active IP address: 10.0.0.150 Active port: 32808 packet 57 200 PORT command successful\r\n packet 58 RETR Text.txt\r\n RETRIEVE (transfer a copy of the file, specified in the pathname) packet 62 150 Opening BINARY mode data connection for Text.txt (94 bytes)\r\n packet 63 FTP Data FTP Data: Gewoon een bestand met daarin deze regel\n en ook deze\n Niet te vergeten dat deze er ook in zit.\n packet 68 226 Transfer complete.\r\n packet 70 PORT 10,0,0,150,128,41\r\n Active IP address: 10.0.0.150 Active port: 32809 packet 71 200 PORT command successful\r\n
Hogeschool van Arnhem en Nijmegen
48
Internet Advanced A
2004
Server 10.0.0.154 / Client 10.0.0.150 packet 73 RETR ftp\r\n packet 77 150 Opening BINARY mode data connection for ftp (83864 bytes)\r\n packet 78 / 175 FTP Data met in het laatste pakketje een FIN, ACK, PSH packet 178 226 Transfer complete.\r\n packet 180 QUIT\r\n packet 181 221 Goodbye.\r\n
De server wacht dan op een bevestiging van het laatste commando en stuurt dan een FIN, ACK die de client bevestigd met een ACK. Hierna stuurt de client zelf ook een FIN, ACK die de server op zijn beurt ook bevestigd. Dit beëindigd de ftp sessie en ook de beschrijving van het FTP protocol.
Hogeschool van Arnhem en Nijmegen
49