Gerrit Tiemens, Medewerker HCC Locatie Arnhem Zevenaar, 21 oktober 2004 Inhoudsopgave Inleiding ............................................................................................................. 3 1. Netwerkprotocollen ........................................................................................ 3 1.1 De fysieke laag ............................................................................................. 4 1.1.1 MAC-adressering ..................................................................................... 5 1.1.2 De MTU .................................................................................................. 5 1.1.3 PPP ........................................................................................................ 5 1.2 Hosts en routers ........................................................................................... 5 1.3 Protocollen en interfaces ................................................................................ 6 1.4 Encapsulatie ................................................................................................. 8 1.5 Demultiplexing .............................................................................................. 9 1.6 TCP/IP en standaardisatie .............................................................................10 1.6.1 Organisaties op het gebied van Internet-technologie ...................................10 1.6.2 RFC's ....................................................................................................11 2 Het IP-protocol .............................................................................................. 12 2.1 Taken en eigenschappen van het IP-protocol ...................................................13 2.1.1 IP: een connectionless protocol ...................................................................13 2.1.2 IP: geen betrouwbaarheid geboden .............................................................13 2.2 De IP-header ...............................................................................................14 2.3 IP-adressering .............................................................................................15 2.3.1 De structuur van IP-adressen ...................................................................15 2.3.2 Notatie van IP-adressen ..........................................................................16 2.3.3 Registratie van IP-adressen .....................................................................17 2.3.4 Vrij te gebruiken: private Internets ...........................................................18 2.3.5 Speciale IP-adressen ...............................................................................18 2.4 IP-routering .................................................................................................18 2.4.1 De routeringstabel ..................................................................................18 2.5 IP: speciale diensten.....................................................................................20 2.5.1 Fragmentatie ............................................................................................20 2.6 IP-troubleshooting ........................................................................................20 2.6.1 Testen van de IP-verbinding: ping ............................................................20 2.6.2 Testen van de IP-routering: tracert ...........................................................21 2.6.3 Protocolstatistieken opvragen ...................................................................21 3 HTTP-protocol ............................................................................................... 22 3.1 Opbouwen van een sessie .............................................................................22 3.2 http: headers...............................................................................................23 Internet Inleiding In deze lezing gaan we aandacht besteden aan enkele protocollen die gebruikt worden in het Internet. De volgende protocollen komen aan de orde: TCP/IP Dit staat voor Transmission Control Protocol / Internet Protocol en zijn twee netwerkprotocollen. Netwerkprotocollen zijn gedragsregels/afspraken met betrekking tot het versturen en ontvangen van gegevens via netwerken. HTTP Dit staat voor Hypertext Transfer Protocol. HTTP maakt het mogelijk om op een relatief eenvoudige manier multimedia bestanden bruikbaar te maken voor het Internet, zoals tekst, foto's, geluid en video. 1. Netwerkprotocollen Computers in een netwerk gebruiken netwerkprotocollen: afspraken over de vorm en betekenis van boodschappen (pakketten) die op het netwerk uitgewisseld worden. Novell NetWare bijvoorbeeld, dat hier en daar in de PC-wereld nog gebruikt wordt, is gebaseerd op protocollen met de naam SPX/IPX. In het Internet gebruikt men de TCP/IPprotocollen. De TCP/IP-protocollen hebben de laatste jaren een enorme opmars gemaakt: ook binnen organisatie- en bedrijfsnetwerken overvleugelt TCP/IP langzamerhand de andere netwerktechnologieën. Men gebruikt zelfs IP om telefoongesprekken te transporteren (Voice over IP). Netwerkprotocollen zijn in een aantal functionele niveaus (lagen) opgesplitst, waarbij elke laag zijn eigen specifieke functie heeft. Door het opsplitsen in lagen met elk een deelfunctie wordt de netwerksoftware als geheel beheerbaar en overzichtelijk. Het totaal aan lagen wordt een protocol-suite of protocol-stack of kortweg stack genoemd. In figuur 1 is de TCP/IP protocol-stack getoond. De taakverdeling van de lagen in de TCP/IP-stack is ruwweg als volgt: De fysieke laag zorgt voor het fysieke transport over het netwerkmedium (de hardware). TCP/IP kan over elk willekeurig fysiek medium gebruikt worden: Ethernet, FDDI, Frame Relay, ATM, WiFi, satellietverbindingen, seriële lijnen, enzovoort. De netwerklaag zorgt onder andere voor de routering: het vinden van een route van de afzender naar de bestemming. In hoofdstuk 2 gaan we in op het protocol dat in het Internet gebruikt wordt op netwerklaag-niveau: het IP-protocol. De transportlaag zorgt voor de communicatie tussen processen: dit in tegenstelling tot de netwerklaag, die zorgt voor de communicatie tussen machines. In de TCP/IP-suite zijn er twee transportprotocollen: TCP en UDP. Elke applicatie is ofwel gebouwd op het TCP-protocol, ofwel op het UDP-protocol. TCP en UDP hebben volstrekt verschillende karakteristieken. Kort samengevat komt het er op neer dat TCP volledige garanties biedt met betrekking tot de juiste aankomst van pakketten, terwijl UDP dergelijke zekerheden niet biedt. Een applicatie die steunt op TCP kan dus verzekerd zijn van een foutvrije verbinding, terwijl een UDP-gebaseerde toepassing dat niet kan zijn. Het lijkt misschien alsof applicaties dus maar beter altijd TCP als transportprotocol kunnen kiezen, maar zo eenvoudig ligt dat niet: het nadeel van TCP is namelijk een relatief grote overhead. Toepassingen zoals telefonie en videoconferencing via het Internet, waarbij snelheid belangrijker is dan 100% foutvrije transmissie, zijn dan ook vrijwel zonder uitzondering op UDP gebouwd. Voorbeelden van bekende op TCP gebouwde toepassingen zijn FTP (het File blz. 3 Transfer Protocol), HTTP (het Hypertext Transfer Protocol waar het Web op is gebouwd) en SMTP (het Simple Mail Transfer Protocol, dat gebruikt wordt voor transport van emailberichten over het Internet). Voorbeelden van bekende op UDP gebouwde toepassingen zijn RealAudio (distributie van geluid), CU-SeeMe en NetMeeting (conferencing). In de applicatielaag bevinden zich de toepassingen: electronic mail, filetransfer, remote login, enzovoort. De meeste Internet-toepassingen hebben een clientserver structuur. Vaak speelt de client de rol van informatieafnemer en de server de rol van informatie-aanbieder. Een voorbeeld vormt een Web-server: deze biedt informatie aan (een homepage en andere Web-pagina's) die door een Web-client (een browser) benaderd kan worden. Applicatielaag Transportlaag: procesadressering via poortnummers Netwerklaag: adressering, routering Fysieke laag: datatransport over een fysiek netwerk Figuur 1 1.1 De fysieke laag We zullen ons in deze lezing nauwelijks bezighouden met de fysieke laag. TCP/IP kan gebruikt worden in combinatie met welk fysiek netwerk dan ook, zonder dat daarbij veel kennis van de laag-niveau eigenschappen van dit fysieke netwerk nodig is. Hieronder noemen we toch een paar belangrijke zaken. blz. 4 1.1.1 MAC-adressering Bij gebruik van TCP/IP in een LAN krijgt men bijvoorbeeld te maken met Ethernet, tokenring of FDDI. Dergelijke LAN-netwerken kennen een eigen adressering om aan te duiden voor welk station (systeem) een bepaald pakket is bestemd. Deze zogenaamde MAC(Media Access Layer ) adressen zijn 48 of 64 bits lang en hebben niets te maken met de adressen die op IP-niveau worden gebruikt. Een speciaal MAC-adres is het broadcastadres. Een pakket dat als bestemming het broadcast-adres heeft, komt aan bij alle systemen op het lokale netwerk. Het MAC broadcast-adres bestaat uit (48 of 64) bits die allemaal op 1 staan. Netwerkkaarten halen pakketten van het netwerk die ofwel het MAC-adres van het eigen systeem als bestemming hebben, ofwel gericht zijn aan het broadcast-adres. Er is nog een derde mogelijkheid, die te maken heeft met het versturen van pakketten naar groepen van machines. Deze techniek wordt multicasting genoemd. Ten slotte kunnen veel netwerkkaarten ook in promiscuous mode opereren, wat wil zeggen dat ze alle pakketten (ongeacht de bestemming) van het netwerk halen. Deze mogelijkheid wordt gebruikt door netwerk-sniffers: programma's die het netwerkverkeer afluisteren en door beheerders vaak toegepast worden bij het oplossen van problemen. Overigens zijn netwerk-sniffers ook populair gereedschap van hackers die vertrouwelijke informatie zoals wachtwoorden willen afluisteren tijdens het transport over een netwerk. Voor beginnende netwerkbeheerders kan het verwarrend zijn dat elke computer op een LAN twee adressen heeft: een IP-adres dat een rol speelt op IP-niveau en een MAC-adres dat alleen binnen het eigen LAN gebruikt wordt. Er is een speciaal protocol voor het leggen van de koppeling tussen een IP-adres en het bijbehorende MAC-adres: het ARP-protocol. 1.1.2 De MTU Een van de karakteristieken van fysieke netwerken is de zogenaamde Maximal Transmission Unit (MTU). De MTU van een netwerk is de maximale grootte die een over dat netwerk reizend frame (een pakket op MAC-niveau wordt een frame genoemd) mag hebben. Een Ethernet heeft bijvoorbeeld een MTU van 1500 bytes, een FDDI-netwerk van 4352 bytes en een X.25-netwerk van 576 bytes. Een seriële verbinding (bijvoorbeeld een telefoonlijn) heeft geen inherent maximum aan de pakketgrootte, maar afhankelijk van de situatie kunnen er toch redenen zijn om de pakketgrootte ook voor deze netwerken niet al te hoog in te stellen. 1.1.3 PPP Bij gebruik van TCP/IP over een telefoonlijn, ISDN-verbinding, ADSL, huurlijn of andersoortige punt-naar-punt verbinding wordt PPP gebruikt voor het inpakken van IPpakketten. Het PPP-protocol moet men dus zien op het niveau van de fysieke laag. 1.2 Hosts en routers Het Internet is een wereldwijd netwerk van netwerken. In een dergelijk netwerk is een speciale rol weggelegd voor de systemen die de netwerken met elkaar verbinden. Deze worden routers genoemd. Elk netwerk bestaat uit een aantal `gewone' machines (deze worden hosts genoemd) en uit een of meer routers die de verbindingen met andere netwerken verzorgen. Een boodschap die verstuurd moet worden van een host naar een andere host maakt een reis door het Internet en passeert daarbij onderweg de routers van een aantal tussenliggende netwerken. Als bijvoorbeeld een boodschap verstuurd wordt van host A in figuur 2 naar host E, zou deze boodschap de route A-R1-R3-R2-E volgen. blz. 5 Als router wordt meestal speciaal daarvoor gemaakte hardware gebruikt. Bekende leveranciers van dat soort routers zijn onder meer Cisco en 3COM. Daarnaast kan echter ook een UNIX- of Windows systeem met twee of meer netwerkkaarten als router fungeren. Men noemt een dergelijk systeem met meerdere netwerk-interfaces ook wel een multihomed host. Het voordeel van een multihomed host als router is een relatief lage prijs, het nadeel is echter dat een dergelijk `general-purpose' systeem niet dezelfde performance kan bieden als een commerciële router. Daarnaast is het zo dat commerciële routers allerlei extra's bieden die general-purpose systemen vaak ontberen. Figuur 2 Voorbeelden zijn ondersteuning voor meerdere protocol suites (TCP/IP, DECnet, SPX/IPX, NetBEUI, enzovoort) en de mogelijkheid van beveiliging via packet _ltering. Dat laatste wil zeggen dat het bij gebruik van moderne routers mogelijk is om pakketten selectief te filteren, op grond van allerlei beveiligingscriteria. Een router tussen een bedrijfsnetwerk en het Internet zou bijvoorbeeld inkomende telnet- en ftp-sessies kunnen verbieden, maar tegelijk uitgaande telnet- en ftp-sessies kunnen toestaan. 1.3 Protocollen en interfaces Hierboven is al het begrip protocol genoemd. Een protocol is een set van afspraken over de vorm en betekenis van boodschappen (pakketten) die op het netwerk uitgewisseld worden. Op elke laag in de protocol-suite zijn aparte protocollen in gebruik. Bij clientserver verkeer spelen dan ook verschillende protocollen een rol, zoals in figuur 3 wordt getoond. In dit voorbeeld benadert een Netscape-gebruiker een Web-server. In de figuur wordt aangenomen dat de Web-server zich in het lokale (Ethernet-)netwerk bevindt. De tekening verandert nauwelijks als dit niet het geval is: er komen alleen een aantal tussenstappen bij. blz. 6 Figuur 3 In figuur 3 spelen de volgende protocollen een rol: Op applicatieniveau wordt HTTP (het Hypertext Transfer Protocol) gebruikt. Het HTTP-protocol bevat onder meer operaties om Web-pagina's op te vragen bij een Web-server. Op transportniveau wordt gebruikgemaakt van het TCP-protocol: het HTTPprotocol is gebouwd op TCP. Op netwerkniveau wordt gebruikgemaakt van het IP-protocol. Op fysiek niveau wordt gebruikt gemaakt van het Ethernet-protocol. Merk op dat alleen op het laagste niveau werkelijk sprake is van fysieke communicatie: op de andere niveaus is er een `virtuele communicatie'. De browser Netscape in figuur 3 heeft de illusie van een verbinding met de Webserver, maar in werkelijkheid communiceert hij niet direct met de Web-server: hij overhandigt de boodschap aan de TCP-laag op het eigen systeem. Deze zal de boodschap inpakken in een TCP-pakket en overhandigen aan de IP-laag op het eigen systeem. De IP-laag verpakt het IP-pakket in een Ethernet-frame en overhandigt het aan de fysieke laag, waarna het uiteindelijk op de kabel kan worden gezet. Bij aankomst op de machine waar de Web-server draait maakt het pakket een soortgelijke reis door de protocol-suite, maar dan `van onder naar boven'. Bij het bovenstaande is het begrip interface van belang. Een interface legt de interactie tussen twee aangrenzende lagen vast. Van belang is vooral het interface tussen de applicatielaag en de transportlaag: dit bepaalt de netwerkoperaties die applicaties kunnen uitvoeren. Deze interface is een API (Application Programmers Interface) die vastlegt welke netwerk-functies programmeurs tot hun beschikking hebben. De meestgebruikte en bekendste API is de socket-API. Deze bevat onder meer de volgende functies: Een functie connect om een verbinding met een bepaalde server op een bepaalde computer op te zetten. Deze functie wordt aangeroepen door een client. blz. 7 Een functie accept om te wachten op binnenkomende connectieverzoeken. Deze functie wordt aangeroepen door een server. Functies voor het versturen en ontvangen van netwerk-pakketten over een opgebouwde verbinding, zoals recvfrom en sendto. De onderste drie lagen in figuur 3 zitten in het besturingssysteem. De socket-API vormt dus de grens tussen het besturingssysteem en de toepassingen. Een speciale faciliteit die het socket interface biedt is de mogelijkheid om vanuit de applicatie rechtstreeks in te grijpen op TCP/UDP- en IP-niveau en in detail de protocolheaders in te vullen. Men noemt deze raw sockets. Het raw socket interface biedt interessante mogelijkheden voor het testen van nieuwe protocollen en toepassingen, maar wordt helaas ook nogal eens misbruikt door hackers: deze sturen dan met opzet gecorrumpeerde IP-pakketten naar systemen, in de hoop dat deze systemen daardoor in de war raken en crashen. Er zijn veel voorbeelden van dergelijke denial-of-service aanvallen, zoals land, teardrop, smurf , de Ping `O Death en TCP SYN-flooding. 1.4 Encapsulatie In de vorige paragraaf is aan de hand van figuur 3 beschreven hoe de reis van een pakket van browser naar Web-server er uit ziet: Eerst reist het pakket van boven naar beneden door de eigen protocollagen: HTTP, TCP, IP, driver. Dan volgt de fysieke reis over het netwerk. Na aankomst op de computer van de Web-server reist het pakket van beneden naar boven door de protocollagen: driver, IP, TCP, HTTP. In deze paragraaf gaan we in op wat er tijdens deze reis gebeurt met het datapakket: dit blijft namelijk niet onveranderd. Elk protocol houdt controle-informatie bij in een eigen protocol-header of kortweg header. Bij de reis van boven naar beneden door de protocollagen worden dus steeds headers toegevoegd (zie figuur 4). Dit wordt encapsulatie genoemd. Figuur 4 blz. 8 Na aankomst op de doelmachine worden de diverse headers er weer een voor een afgestript. De IP-module bijvoorbeeld zal de IP-header verwerken, deze er af strippen, en het overgebleven pakket (TCP-header en applicatie-data) aan de TCP-laag overhandigen. 1.5 Demultiplexing In de vorige paragraaf is beschreven hoe een pakket, na aankomst op de doelmachine, de reis naar boven door de protocollagen aflegt en hoe daarbij headers gestript worden. Daarbij blijft echter nog een vraag over: hoe weet een module voor welke hoger gelegen module een bepaald pakket is bedoeld? Er zijn immers verschillende situaties waarin er meerdere mogelijkheden zijn (zie figuur 5). Een Ethernet-pakket kan een IP-pakket bevatten, maar kan bijvoorbeeld ook een SPX/IPX- of een NetBEUI-pakket bevatten. Zelfs wanneer alleen TCP/IP gebruikt wordt zijn er op dit niveau nog meerdere mogelijkheden. Een IP-pakket kan een TCP-pakket bevatten, maar kan ook een UDP-pakket bevatten. De IP-module moet het pakket dus ofwel aan de TCP-, ofwel aan de UDP-module doorspelen. Een TCP-pakket kan bedoeld zijn voor vele toepassingen, bijvoorbeeld voor de Web-server, voor de email-server of voor de ftp-server. De oplossing voor deze problemen is eenvoudig. Elke header bevat onder meer een getal dat aangeeft voor welke hogere protocollaag het pakket bedoeld is. In de volgende paragraaf zullen we zien dat dit soort nummers uitgedeeld wordt door een speciaal daartoe bevoegde organisatie (ICANN). Een paar voorbeelden om het bovenstaande toe te lichten: In de Ethernet-header staat het getal 0800 (hexadecimaal) als het Ethernetpakket een IP-pakket bevat en 0806 als het een ARP-pakket bevat. In de IP-header staat het getal 17 als het IP-pakket een UDP-pakket bevat en 6 als het een TCP-pakket bevat. In de TCP-header staat het getal 80 als het TCP-pakket bedoeld is voor de Webserver, 25 als het voor de email-server bestemd is en 21 als het aan de ftp-server is gericht. Deze `applicatie-nummers' worden poortnummers genoemd. Het op basis van deze getallen in de header bepalen voor welke hogere protocollaag een pakket bedoeld is noemt men demultiplexing. blz. 9 Figuur 5 1.6 TCP/IP en standaardisatie De TCP/IP-protocollen en de daarop gebouwde toepassingen zijn open: de specificaties zijn openbaar en vrij verkrijgbaar. Het gevolg is dat elke leverancier die dat wil een implementatie van TCP/IP-protocollen en –toepassingen kan bouwen. Dit heeft ertoe geleid dat TCP/IP beschikbaar is voor vrijwel elk type computer. De meeste moderne systemen zijn standaard voorzien van TCP/IP-faciliteiten: dat geldt bijvoorbeeld voor allerlei Windows versies, MacOS en alle UNIX-varianten. Vanwege de algemene beschikbaarheid van TCP/IP bestaat het Internet dan ook uit een bonte verzameling van computers in alle soorten en maten: IBM-mainframes, UNIX-werkstations, PC’s met Windows of Linux, Macintoshes, VAX/VMS-systemen, supercomputers, enzovoort. De ontwikkeling van de TCP/IP-protocollen en -toepassingen staat niet stil: voortdurend worden er nieuwe toepassingen bedacht en worden bestaande toepassingen verbeterd of uitgebreid met nieuwe mogelijkheden. Met name het Web is erg in beweging: J2EE, .NET, allerlei Web-applicaties. In deze paragraaf beschrijven we hoe deze ontwikkelingen gecoördineerd worden. 1.6.1 Organisaties op het gebied van Internet-technologie De ontwikkeling en standaardisatie van nieuwe techniek is in handen van de Internet Architecture Board (IAB). Onder IAB vallen drie organisaties (zie figuur 6): Figuur 6 blz. 10 De Internet Research Task Force (IRTF) houdt zich bezig met langetermijn research op het gebied van Internet-technologie. De Internet Engineering Task Force (IETF, zie www.ietf.org) houdt zich bezig met de ontwikkeling van nieuwe technologie en protocollen. De Internet Engineering Steering Group (IESG) is eindverantwoordelijk voor het vastleggen van nieuwe Internet-standaarden. IETF heeft een aantal algemene aandachtsgebieden, waaronder bijvoorbeeld routering, security, de volgende generatie van het IP-protocol, enzovoort. Voor elk aandachtsgebied is een aantal werkgroepen actief, die zich bezighouden met onderdelen van het aandachtsgebied. Alle IETF-werkgroepen zijn open, met vertegenwoordigers uit het internationale bedrijfsleven en de internationale academische wereld als leden. Men moet zich IAB, IETF en IRTF overigens niet voorstellen als een `echte' organisatie met een kantoorgebouw en medewerkers: het overgrote deel van de activiteiten in de werkgroepen vindt plaats via Internet, middels discussies in mailinglists. Een andere belangrijke organisatie is de Internet Corporation for Assigned Names and Numbers (ICANN) Deze is eindverantwoordelijk voor het uitdelen van domeinnamen, IPadressen en protocol-parameters in het Internet. De nummers in figuur 2.5 zijn bijvoorbeeld onder verantwoordelijkheid van ICANN uitgedeeld. Overigens werd het werk van ICANN voorheen uitgevoerd door de Internet Assigned Numbers Authority (IANA). 1.6.2 RFC's Alle door IETF-werkgroepen vastgelegde specificaties van protocollen en toepassingen zijn openbaar en worden beschreven in zogenaamde RFC's (Request For Comments). Deze documenten zijn op te halen vanaf diverse ftp-servers, bijvoorbeeld: ftp://ftp.ripe.net/rfc/ Bekende RFC's zijn onder meer RFC 791 (specificaties van het IP-protocol), RFC 793 (specificaties van TCP) en RFC 768 (specificaties van UDP). Andere bekende RFC's zijn de host requirements (RFC 1122 en 1123) en de router requirements (RFC 1812). In de genoemde directory staat overigens ook een bestand rfc-index.txt met een inhoudsopgave van alle RFC's. Niet alle RFC's betreffen standaarden. Er zijn ook vele informatieve RFC’s en RFC's die als een soort discussiestukken dienen: vandaar ook de naam `Request For Comments'. Verder zijn er ook 1 april grappen zoals RFC 3541 i.The Security Flag in the IPv4 Headerly. Standaarden `in wording' worden overigens beschreven in andere documenten die men Internet drafts noemt. Een RFC wordt na publicatie nooit meer veranderd. Als wijzigingen of uitbreidingen gewenst zijn, wordt een nieuwe RFC met een nieuw nummer gepubliceerd. In de rfcindex wordt dit aangegeven. Als voorbeeld volgt hierna de lijst van RFC's die betrekking hebben op het routeringsprotocol OSPF, dat aanvankelijk werd vastgelegd in RFC 1131 en daarna werd aangepast in achtereenvolgens RFC 1247, RFC 1583, RFC 2178 en ten slotte RFC 2328. blz. 11 De meeste RFC's bevatten op verschillende plaatsen de kwalificaties MUST, SHOULD en MAY. Dit zijn richtlijnen voor implementaties: MUST geeft aan wat verplicht is, SHOULD wat sterk aanbevolen wordt en MAY wat optioneel is. Een voorbeeld (uit RFC 1123) is: Mailer software MUST be able to send and receive messages of at least 64K bytes in length (including header), and a much larger maximum size is highly desirable. Hier staat dus dat emailberichten tot 64 Kilobytes lengte door alle emailproducten altijd goed afgehandeld moeten worden, maar dat het afhandelen van grotere berichten niet verplicht is (hoewel dit wel `highly desirable' is – in feite een SHOULD). Een tweede voorbeeld (ook uit RFC 1123) heeft betrekking op de maximale lengte van machinenamen: Host software MUST handle host names of up to 63 characters and SHOULD handle host names of up to 255 characters. Het is goed om het verschil tussen een protocol en een implementatie te benadrukken. RFC's bevatten beschrijvingen van protocollen en geven daarbij via MUST, SHOULD en MAY de bewegingsvrijheid van implementaties aan. In dit verband zijn ook de volgende begrippen van belang: Een implementatie wordt unconditionally compliant genoemd als deze in alle MUST- en SHOULD-clausules voorziet. Een implementatie wordt conditionally compliant genoemd als deze in alle MUSTclausules voorziet, maar niet in alle SHOULD-clausules. Hoewel RFC's geen wettelijke status hebben en men geen proces kan aanspannen tegen een leverancier van een product als dit zich niet aan de RFC's houdt, doen leveranciers over het algemeen erg hun best om producten te bouwen die zich houden aan de RFC's en liefst zelfs unconditionally compliant zijn. De volgende RFC's zijn speciaal het vermelden waard (zie figuur 2.2 voor een toelichting op de begrippen `host' en `router'): RFC 1812 staat bekend als de router requirements RFC. Deze bevat een overzicht van de regels waar (de software van) routers aan moet voldoen. Er staat bijvoorbeeld in welke protocollen en welke onderdelen van protocollen routers verplicht moeten ondersteunen. RFC 1122 en RFC 1123 staan bekend als de host requirements RFC's. Deze bevatten een overzicht van de regels waar (de software van) hosts aan moet voldoen. In het bovenstaande zijn diverse bijzondere RFC's genoemd. Onderstaande tabel bevat een samenvatting van een aantal RFC's die speciaal de moeite waard zijn. RFC-nummer 1122 1123 1812 1700 1718 2700 Inhoud Host requirements (deel 1) Host requirements (deel 2) Router requirements Assigned Numbers Uitleg Internet standaardisatieorganen: IAB, IETF, IRTF, etc Overzicht van officiële Internet-standaarden 2 Het IP-protocol In dit hoofdstuk gaan we in op het protocol dat op netwerklaag-niveau wordt gebruikt in de TCP/IP-stack: het Internet Protocol (IP). Naast het bespreken van de basis (IP- blz. 12 adressering en IP-routering) gaan we ook in op geavanceerdere en modernere zaken zoals multicasting, CIDR en IP versie 6. We gaan in op de techniek: de werking van de protocollen, de vorm van de adressen, enzovoort. 2.1 Taken en eigenschappen van het IP-protocol De belangrijkste taken van het IP-protocol (RFC 791) zijn routering (het vinden van een route van afzender naar bestemming) en adressering (de nummering van machines in het netwerk). De belangrijkste eigenschappen van het IP-protocol zijn dat het connectionless is en geen garanties biedt. We lichten deze termen hieronder toe. 2.1.1 IP: een connectionless protocol Met connectionless wordt bedoeld dat IP niet werkt met vaste netwerkverbindingen tussen de afzender en de bestemming. Elk IP-pakket reist onafhankelijk van de vorige en de volgende, en het is dan ook mogelijk dat verschillende pakketten in één en dezelfde sessie (bijvoorbeeld een ftp-sessie) verschillende routes nemen. IP-routering is `hop-byhop': elke host en router hoeft slechts de volgende stap op weg naar de bestemming te weten en niet het volledige pad naar de bestemming. Het grote voordeel van een connectionless protocol is de flexibiliteit. Als er een router in het netwerk uitvalt kan een andere route worden gezocht en kunnen alle toepassingen gewoon blijven doordraaien. Een van de redenen waarom men bewust heeft gekozen voor een connectionless protocol is dat men een zeer robuust netwerk op het oog had, dat onder meer voor militaire toepassingen bedoeld was. Toepassingen moesten onder alle omstandigheden blijven doorwerken, zelfs in situaties waarin netwerkcomponenten (bijvoorbeeld door militaire acties) weg zouden vallen. In een connection-oriented netwerk (zoals het telefonie-netwerk) wordt een vast `pad' tussen twee partijen opgebouwd (geswitched) voordat datatransport plaatsvindt. Voordelen zijn dat de snelheid na de opbouwfase wat groter is (omdat geen route meer gezocht hoeft te worden) en dat er een stuk capaciteit gereserveerd wordt. Het nadeel is echter dat de verbinding als geheel verbroken wordt als er een probleem is met één enkele switch onderweg. 2.1.2 IP: geen betrouwbaarheid geboden IP is een onbetrouwbaar protocol: het behoort niet tot de taken van IP om foutcontroles uit te voeren. IP onderneemt bijvoorbeeld geen actie wanneer verstuurde IP-pakketten niet aankomen door congestie (drukte) op het netwerk of wanneer pakketten in een verkeerde volgorde aankomen. IP wordt een `best-effort' protocol genoemd: het doet zijn best, maar maakt zich niet druk om mogelijke optredende problemen. Foutcontroles moeten, als ze gewenst zijn, plaatsvinden op een hoger niveau. Dat hogere niveau is in de praktijk meestal het TCP-protocol. Bij het ontwerp van IP is bewust gekozen voor een onbetrouwbaar protocol. De filosofie daarbij was onder meer dat applicaties zélf moeten kunnen beslissen welke mate van betrouwbaarheid ze krijgen. Toepassingen voor videoconferencing en telefonie over het Internet zijn gebouwd op UDP en kunnen razendsnel werken door de relatief geringe overhead van deze protocollen. Toepassingen voor file-transfer zijn gebouwd op TCP/IP en zijn verzekerd van een foutvrije transmissie, maar wel ten koste van een grotere overhead. Als de netwerklaag garanties zou bieden, zouden applicaties de keus tussen betrouwbaarheid en snelheid niet meer kunnen maken. blz. 13 2.2 De IP-header Het is illustratief om de IP-header te bekijken. Deze is in figuur 7 weergegeven. Een toelichting bij de diverse velden in de header: Figuur 7 De huidige versie is 4. In de komende jaren zal geleidelijk aan ook IP versie 6 in gebruik genomen worden. De hdr len is de lengte van de IP-header, uitgedrukt in eenheden van 4 bytes. De IP-header is normaal gesproken 20 bytes lang, maar door de mogelijkheid van IPopties (zie hieronder) kan dit meer zijn. Het veld hdr len is slechts 4 bits, zodat de maximale lengte van de IP-header 15 (maximale waarde van een 4-bits getal) maal 4 (de eenheid van hdr len) bytes, dus 60 bytes is. Er is dus maximaal plaats voor 40 bytes aan IP-opties. Het veld TOS (Type Of Service) bevat een paar bits die bedoeld zijn om aan te geven op welke manier het IP-pakket verwerkt moet worden: onder meer het bit minimize delay en het bit maximize reliability. Het idee is dat het eerste bit gezet wordt door applicaties waarbij het vooral om snelheid gaat (bijvoorbeeld interactieve applicaties) en het tweede door applicaties waarbij het vooral om betrouwbaarheid gaat (bijvoorbeeld een applicatie voor netwerk-management). Hoewel er enkele implementaties zijn die de bits zetten voor verstuurde IPpakketten, wordt een en ander in de praktijk maar beperkt gebruikt. Het zetten van de bits heeft alleen zin als alle routers `meewerken' door de bits te inspecteren en dienovereenkomstig te handelen. Dat is echter niet het geval: vrijwel alle routers negeren de TOS-bits. De totale lengte is de lengte van het IP-pakket in bytes, inclusief de data. De velden identificatie, flags en fragment offset worden gebruikt voor fragmentatie. De TTL (Time To Live) is de maximale levensduur van een IP-pakket. Elke router waar een pakket passeert zal 1 aftrekken van dit getal. Als het getal 0 is geworden, wordt het pakket weggegooid en wordt een foutboodschap blz. 14 teruggestuurd naar de afzender van het pakket. Het is afhankelijk van de implementatie op welke waarde de TTL geïnitialiseerd wordt. Waarden die we in de praktijk vaak tegenkomen zijn 32, 64 en (de maximale waarde) 255. Het veld protocol wordt gebruikt voor demultiplexing. Hier staat bijvoorbeeld het getal 6 voor een TCP-pakket en 17 voor een UDP-pakket. De header checksum is een controlegetal over de IP-header zelf, niet over de data. De integriteit van de databytes moet gecontroleerd worden door een hogere protocollaag (zoals TCP of UDP). IP-adres van afzender en IP-adres van bestemming geven aan wie het pakket verzonden heeft en voor wie het bestemd is. IP kent een aantal opties. De bekendste IP-opties hebben te maken met source routing. 2.3 IP-adressering In figuur 7 zagen we dat in elk IP-pakket het IP-adres van de afzender en dat van de bestemming is opgenomen. Een IP-adres is een nummer dat dient als identificatie van een computer. Elke computer in het Internet heeft een IP-adres. 2.3.1 De structuur van IP-adressen IP-adressen zijn getallen met een lengte van 32 bits. Deze 32 bits zijn verdeeld in twee stukken: een netwerknummer en een machinenummer. Dit betekent dat alle netwerken in het Internet genummerd zijn en dat de computers binnen een netwerk ook een nummer hebben. Twee computers die in hetzelfde netwerk zitten hebben hetzelfde netwerknummer en moeten verschillende machinenummers hebben. Twee computers in verschillende netwerken mogen hetzelfde machinenummer hebben, maar hebben een verschillend netwerknummer. De opdeling is te vergelijken met die van telefoonnummers. Ook deze bestaan uit twee delen, te weten een netnummer en een abonneenummer. Twee personen mogen hetzelfde abonneenummer hebben, als het netnummer dan maar verschillend is. Een gevolg van de opdeling in een netwerknummer en een machinenummer is dat IProutering gebaseerd kan worden op het netwerknummer: om een IP-pakket af te leveren bij de bestemming hoeft alleen bekend te zijn hoe het bestemmings-netwerk bereikt kan worden. Is het pakket eenmaal in het juiste netwerk aangekomen, dan wordt het vervolgens vanzelf bij de juiste machine afgeleverd. De verdeling van de 32 bits in een netwerkgedeelte en een machinegedeelte is niet vast. Er zijn drie soorten IP-adressen: Klasse-A adressen Klasse-B adressen Klasse-C adressen Klasse-A eerste bit = 0 + 7 bits = netwerk id. + 24 bits = host id. Klasse-A adressen bestaan uit 7 bits voor het netwerknummer en 24 bits voor het machinenummer. Er zijn dus maar heel weinig Klasse-A netwerken (128), maar van elk van deze kan zeer veel machines bevatten (2 tot de macht 24 = 16.777.216). Klasse-B eerste 2 bit = 10 + 14 bits = netwerk id. + 16 bits = host id. blz. 15 Klasse-B adressen bestaan uit 14 bits voor het netwerknummer en 16 bits voor het machinenummer. Er zijn dus 16.384 klasse-B netwerken (2 tot de macht 14), waarbij elke klasse-B netwerk 2 tot de macht 16 machines (65.536) kan bevatten. Klasse-C eerste 3 bit = 110 + 21 bits = netwerk id + 8 bits=hostid. Klasse-C adressen bestaan uit 21 bits voor het netwerknummer en 8 bits voor het machinenummer. Klasse-C netwerken kunnen dus niet groot worden (256 machines), maar er zijn er wel veel van (2 tot de macht 21 = 2.097.152) Het voordeel van deze variabele verdeling in netwerkgedeelte en machinegedeelte is een grotere flexibiliteit. Stel dat de verdeling vast zou zijn, bijvoorbeeld 16 bits voor het netwerknummer en 16 bits voor het machinenummer. Dan zouden er maximaal zo’n 65.000 netwerken kunnen voorkomen in het Internet, wat duidelijk te weinig is voor het Internet. Of stel dat verdeeld zou zijn in 24 bits voor het netwerknummer en 8 bits voor het machinenummer, dan zou geen enkel netwerk meer dan 256 machines kunnen bevatten. Overigens is deze flexibiliteit in werkelijkheid maar beperkt. Het verschil tussen bijvoorbeeld een klasse-B en een klasse-C netwerk is levensgroot. Daarom wordt tegenwoordig dan ook gewerkt met klasseloze IP-adressering, een techniek die bekend staat onder de naam CIDR. Naast klasse-A, klasse-B en klasse-C adressen zijn er ook nog klasse-D en klasse-E adressen. Klasse-D adressen beginnen met de bits 1110 en zijn bedoeld voor multicasting. Klasse-E adressen beginnen met de bits 11110 en zijn bedoeld voor experimentele doeleinden. 2.3.2 Notatie van IP-adressen Zoals gezegd bestaan IP-adressen uit 32 bits. Een nummer als 10100011110000000100000010011110 is echter niet praktisch in gebruik. Daarom worden IP-adressen meestal op en andere manier weergegeven in de zogenaamde dotted decimal notatie. In deze notatie worden IP-adressen genoteerd als vier getallen met punten ertussen. Voor het eerste groepje van 8 bits uit bovenstaand IP-adres: 10100011 is de decimale waarde bijvoorbeeld: 1*2^7 = 128 0*2^6 = 0 1*2^5 = 32 0*2^4 = 0 blz. 16 0*2^3 0*2^2 1*2^1 1*2^0 = = = = 0 0 2 1 = 163 De getallen kunnen dus alleen waarden aannemen tussen de 0 en 255. Enkele andere voorbeelden van IP-adressen in dotted decimal notatie: 131.174.22.56 (klasse-B) 192.84.30.66 (klasse-C) 19.2.23.7 (klasse-A) Aan het eerste van de vier decimale getallen in een IP-adres is direct te zien of het een klasse-A, klasse-B of klasse-C adres is. Klasse A B C Gebied 0-127 128-191 192-223 Aantal netwerken 128 16.384 2.097.152 2.3.3 Registratie van IP-adressen Elke machine en elke router op het Internet heeft een of meerdere IP-adressen. Het spreekt vanzelf dat IP-adressen niet dubbel mogen voorkomen. Daarom moet een particulier of een organisatie die zich op het Internet aansluit een officieel IP-adres aanvragen. Eindverantwoordelijke voor het uitdelen van IP-adressen is de organisatie ICANN (Internet Corporation for Assigned Names and Numbers). Omdat het echter te veel werk zou zijn om de registratie van IP-adressen voor de hele wereld af te handelen, heeft ICANN dit werk gedelegeerd aan enkele organisaties die de verantwoordelijkheid voor een bepaalde regio hebben, de zogenaamde Regional Internet Registries. ICANN heeft elke Internet Registry voorzien van blokken IP-adressen die het mag uitdelen in de eigen regio. Er zijn verschillende Internet Registries, w.o.: RIPE (www.ripe.net), gevestigd te Amsterdam. Deze is verantwoordelijk voor Europa, het Midden-Oosten en Noord-Afrika; ARIN is verantwoordelijk voor Noord- en Zuid-Amerika en Zuid-Afrika; APNIC is verantwoordelijk voor Azië In de praktijk kan het aanvragen van IP-adressen meestal via de ISP worden geregeld, omdat RIPE deze verantwoordelijkheid verder gedelegeerd heeft door blokken van IPadessen uit te delen aan Internet Service Providers (de zogenaamde Local Internet Registries). De delegatie van blokken IP-adressen van ICANN via bijvoorbeeld RIPE en de ISP naar de klant verloopt via de systematiek van CIDR. Een organisatie die een bedrijfsnetwerk aansluit op het Internet krijgt overigens alleen een IP-netwerknummer. Men is uiteraard vrij om diverse machines binnen het netwerk zelf te nummeren. Iets preciezer is overigens om te zeggen dat men geen netwerknummer, maar een netwerk-prefix krijgt. Organisaties die geen Internetkoppeling hebben en ook niet van plan zijn, moeten zich realiseren dat het later alsnog koppelen van het bedrijfsnetwerk aan het Internet gepaard zal gaan met een mogelijk complexe en tijdrovende hernummeringsoperatie. Om de pijn van een eventuele latere hernummering te verzachten kan men gebruikmaken van de speciale adressen. blz. 17 2.3.4 Vrij te gebruiken: private Internets ICANN heeft enkele series adressen gereserveerd voor wat men private Internets noemt. Het betreft de volgende adressen: 10.0.0.0 tot en met 10.255.255.255 172.16.0.0. tot en met 172.31.255.255 192.168.0.0 tot en met 192.168.255.255 Deze gebieden kunnen vrijelijk gebruikt worden door elke organisatie die dat wil. Er kunnen nooit botsingen of misverstanden ontstaan, omdat deze adressen op het Internet niet gerouteerd worden. Het gevolg is dus wel dat systemen die van dergelijke adressen voorzien zijn, geen rechtstreekse connectiviteit met het Internet kunnen hebben. 2.3.5 Speciale IP-adressen Er zijn een tweetal speciale IP-adressen: Het netwerk 127 is het zogenaamde loopback-netwerk. De meeste implementaties gebruiken van dit netwerk alleen het adres 127.0.0.1. Dit adres is het loopback-adres, dat staat voor eigen systeem. Het kan bijvoorbeeld gebruikt worden om servers te benaderen die op het eigen systeem draaien. Het IP-adres 0.0.0.0 staat, wanneer het als afzendadres gebruikt wordt, voor ‘de eigen machine’. Het mag uitsluitend gebruikt worden in boot-situaties: als het systeem nog niet weet wat zijn IP-adres is (omdat hij dat nog te weten moet komen van een boot-server) maar al wel een IP-pakket moet versturen (bijvoorbeeld een broodkastpakket met bestemming 255.255.255.255), mag 0.0.0.0 als afzendadres invullen. Het adres 0.0.0.0 is geen geldig bestemmingsadres. Het wordt echter in veel implementaties wel gebruikt om de default route aan te geven. 2.4 IP-routering Een boodschap die verstuurd moet worden van een host naar een andere host maakt een reis door het Internet en passeert daarbij onderweg de routers van een aantal tussenliggende netwerken. Een router die een pakket binnenkrijgt moet een beslissing nemen: Ligt de bestemming van het pakket op een direct verbonden netwerk? Zo ja, lever het pakket dan af bij de bestemming Zo nee, stuur het pakket dan door naar de router van een ander netwerk dat dichter bij de uiteindelijke bestemming ligt. Het nemen van dit soort beslissingen wordt routering genoemd. Vandaar dat men die systemen die het werk doen routers noemt. Routering vindt plaats op het niveau van de netwerklaag en is een van de belangrijkste taken van het IP-protocol. 2.4.1 De routeringstabel Routeringsbeslissingen worden genomen op basis van de routeringstabel. De routeringstabel is een stuk boekhouding waarin staat hoe andere hosts en netwerken bereikt kunnen worden. Er zijn vier soorten routes die in routeringstabellen kunnen voorkomen: Directe routes: Deze corresponderen met de netwerken waarmee een systeem rechtstreeks is verbonden. Netwerk-routes: deze geven voor een bepaald netwerk aan wat de volgende stap op weg naar dat netwerk is. Hosts-routes: deze geven voor een bepaalde host aan wat de volgende stap op weg naar die host is. blz. 18 Een default route. Als een host of router niet weet hoe een bepaalde bestemming bereikt kan worden (er is geen directe, host- of netwerk-route voor de bestemming), wordt de default route gebruikt. De default route bestaat doorgaans uit een ‘slimmer’systeem dat wel raad zal weten met het pakket. Dit slimmere systeem wordt de default router of default gateweay of soms kortweg gateway genoemd. Het is goed om te benadrukken dat elk systeem dat TCP/IP gebruikt een routeringstabel heeft, dus niet alleen de routers. Hosts moeten immers ook routeringsbeslissingen nemen. Met name moeten ze het onderscheid kunnen maken tussen pakketten die op het lokale netwerk afgeleverd moeten worden en pakketten die naar een router moeten worden gestuurd. Omdat routers verbindingen met meerdere netwerken hebben, zijn hun routeringstabellen natuurlijk wel uitgebreider dan die van hosts. Routers hebben verstand van netwerk-topologie, terwijl een host dat nauwelijks hoeft te hebben. In de routeringstabel staat voor elke bestemming alleen de volgende stap op weg naar de bestemming en dus niet de complete route naar de bestemming. Het opvragen van de routeringstabel in Windows gaat met het commando netstat -r of met het commando route print. Beide commando’s moeten vanuit de DOS-shell worden aangeroepen. Het systeem waarop dit commando gegeven werd, zoals aangegeven in onderstaand schermafdruk, heeft het IP-adres 169.254.188.87. Figuur 8 Een toelichting bij de uitvoer: Network Address is de bestemming van de route. Gateway Address is de volgende stap op weg naar die bestemming. Voor een bestemming die lokaal is (een netwerk waar het systeem zelf aan gekoppeld is) staat daar het eigen IP-adres op dat netwerk. Netmask is het netwerkmasker dat bij de bestemming hoort. Het geeft aan of de bestemming (het Network Address) een host is, een netwerk, of een subnet. Interface is het IP-adres van het netwerk-interface waarover de route loopt. Metric is het aantal stappen dat de bestemming van ons vandaan ligt. Deze wordt alleen gebruikt bij dynamische routering met RIP. blz. 19 2.5 IP: speciale diensten De belangrijkste taken van het IP-protocol zijn adressering en routering. Daarnaast voorziet IP echter ook in enkel andere diensten, waaronder fragmentatie. 2.5.1 Fragmentatie Een IP-pakket dat een reis maakt over het Internet kan onderweg door vele netwerken passeren. Een probleem wat daarbij kan optreden is dat elke fysiek netwerk zijn eigen karakteristieken heeft met betrekking tot de maximale pakketgrootte. De maximale pakketgrootte in een ethernet is 1500 bytes, terwijl dat voor een x.25-netwerk 576 bytes is en voor een FDDI-netwerk 4352 bytes. Men noemt dit de maximale pakketgrootte van een netwerk de MTU (Maximum Transmission Unit). Stel nu dat een IP-pakket een reis begint op een ethernet en 1500 bytes groot is, en dat het vervolgens door een x.25-netwerk moet passeren. Dan moet het in kleinere stukjes worden opgeknipt. Dit noemt men fragmentatie. Het omgekeerde proces – het weer aan elkaar plakken van de stukjes – heet defragmentatie. Fragmentatie en defragmentatie behoren tot het takenpakket van IP. In de IP-header (zie figuur 7) hebben enkele velden te maken met fragmentatie. Een IP-pakket dat opgeknipt is in meerdere fragmenten heeft in elk fragment dezelfde identificatie. De fragmet offset geeft de positie binnen het totale pakket aan. Een van de bits in het veld flags geeft aan of er nog meer fragmenten komen of dat dit het laatste fragment is. Dit bit wordt meestal aangeduid als MF (van More Fragments). Fragmentatie is een dure operatie. Nog los van al het knip- en plakwerk is dat te wijten aan het feit dat alle fragmenten opnieuw verstuurd moeten worden als er eentje verloren raakt in het netwerk. Als één fragment verloren gaat, kan het IP-pakket waartoe het behoorde immers niet meer gereconstrueerd worden. Moderne TCP/IP-implementaties proberen daarom fragmentatie te voorkomen door de pad-MTU uit te rekenen: de grootst mogelijke pakketgrootte warbij fragmentatie toch niet nodig is. 2.6 IP-troubleshooting Er zijn vele hulpmiddelen om de correcte werking van een IP-netwerk te testen en om de oorzaak van eventuele problemen te traceren. 2.6.1 Testen van de IP-verbinding: ping Het commando ping is een eenvoudig hulpmiddel om te testen of een bepaalde computer op IP-niveau bereikbaar is. Dit commando stuurt zogenaamde ICMP echo request pakketten naar de bestemming, waarop als alles goed gaat ICMP echo reply pakketten terug moeten komen. Het programma dient vanuit de DOS-shell aangeroepen te worden. Bij het commando ping www.gtiemens.nl zou het resultaat er als volgt uit kunnen zien: Pingen naar www.gtiemens.nl [212.78.206.150] met 32 byte gegevens: Antwoord Antwoord Antwoord Antwoord van van van van 212.78.206.150: 212.78.206.150: 212.78.206.150: 212.78.206.150: bytes=32 bytes=32 bytes=32 bytes=32 tijd=169 tijd=231 tijd=190 tijd=165 ms ms ms ms TTL=50 TTL=50 TTL=50 TTL=50 Ping-statistieken voor 212.78.206.150: Pakketten: verzonden = 4, ontvangen = 4, verloren = 0 (0% verlies).De gemiddelde tijd voor het uitvoeren van één bewerking in milliseconden: Minimum = 165ms, Maximum = 231ms, Gemiddelde = 188ms blz. 20 2.6.2 Testen van de IP-routering: tracert Er is een programma waarmee de reis die pakketten door het Internet maken in beeld kan worden gebracht. Dit programma heet tracert en dient eveneens vanuit de DOS-shell aangeroepen te worden. Bij het commando tracert www.gtiemens.nl, zou het resultaat er als volgt uit kunnen zien: Bezig met het traceren van de route naar www.gtiemens.nl [212.78.206.150] via maximaal 30 hops: 1 222 ms 118 ms 2 124 ms 119 ms 3 134 ms 134 ms 4 180 ms 218 ms 5 144 ms 144 ms 6 160 ms 177 ms 7 140 ms 138 ms 8 128 ms 150 ms [193.251.132.89] 9 259 ms 261 ms [193.251.242.46] 10 213 ms 196 ms [193.251.240.134] 11 181 ms 216 ms 12 174 ms 185 ms 13 156 ms 169 ms 124 118 140 184 140 219 146 140 * ms ms ms ms ms ms ms ms pm31.hobby.nl [212.72.224.5] l3gw.hobby.nl [212.72.224.1] level3-gw.hobby.nl [212.72.224.129] ae-0-52.mp2.Amsterdam1.Level3.net [213.244.165.34] so-2-0-0.mp1.Frankfurt1.Level3.net [212.187.128.93] ge-1-2.core1.Frankfurt1.Level3.net [195.122.136.101] FT-Level3.Level3.net [212.73.240.186] So1-0-0.FFTCR1.Frankfurt.opentransit.net P1-0.COPBB2.Copenhagen.opentransit.net 154 ms TelefonicaDeutschland-4.GW.opentransit.net 200 ms pos5-0.sto-1.lycos-europe.net [213.193.31.6] 193 ms rdist1-v113.lan.spray.net [212.78.192.86] 181 ms customers.webc.lyceu.net [212.78.206.150] De trace is voltooid. 2.6.3 Protocolstatistieken opvragen Met het commando netstat –s kunt u een aantal laag-niveau protocolstatistieken opvragen. Het programma dient vanuit de DOS-shell worden aangeroepen. Bij het commando netstat –s, zou het resultaat er als volgt uit kunnen zien: Statistieken voor IPv4 Ontvangen pakketten Ontvangen headerfouten Ontvangen adresfouten Doorgestuurde datagrammen Onbekende ontvangen protocollen Geweigerde ontvangen pakketten Afgeleverde ontvangen pakketten Uitvoeropdrachten Routeringsweigeringen Geweigerde uitvoerpakketten Ontvangen pakket zonder route Opnieuw samenvoegen nodig Opnieuw samenvoegen geslaagd Opnieuw samenvoegen mislukt Datagrammen met geslaagde fragmentatie = = = = = = = = = = = = = = = 2770 0 26 0 0 16 2754 2422 0 2 0 0 0 0 0 blz. 21 Datagrammen met mislukte fragmentatie Fragmenten gemaakt =0 =0 ICMPv4-statistieken Berichten Fouten Doel onbereikbaar Tijd verstreken Parameterproblemen Bron gedoofd Omleidingen Echo's Antwoorden op echo's Tijdstempels Antwoorden op tijdstempels Adresmasks Antwoorden op adresmasks Ontvangen 305 0 6 244 0 0 0 4 51 0 0 0 0 Verzonden 332 0 6 0 0 0 0 322 4 0 0 0 0 TCP-statistieken voor IPv4 Actief open Passief open Mislukte verbindingspogingen Opnieuw ingestelde verbindingen Actieve verbindingen Ontvangen segmenten Verzonden segmenten Opnieuw verzonden segmenten =28 =4 =0 = 21 =1 = 506 = 419 = 88 UDP-statistieken voor IPv4 Ontvangen datagrammen Geen poorten Fouten bij ontvangen Verzonden datagrammen = = = = 1543 694 0 1571 3 HTTP-protocol De communicatie tussen browser en Web-server (Client-server communicatie) verloopt via het HTTP-protocol (HyperText Transfer Protocol). In situaties waarin vertrouwelijke informatie (bijvoorbeeld vertrouwelijke documenten of creditcardnummer) over het Web verstuurd moeten worden, kunt u gebruik maken van de SSL-technologie. Deze zorgt voor encryptie van het datatransport en voor authenticatie van client en server. Wanneer http gecombineerd wordt met de SSL-techniek, spreekt men van HTTPS (HTTP Secure). 3.1 Opbouwen van een sessie Voor een goed begrip van de Webtechnologie is een inzicht in het HTTP-protocol onontbeerlijk. De client stuurt een HTTP-commando naar de Web-server. Meestal is dat het commando GET, wanneer een Webpagina wordt opgevraagd, bijvoorbeeld http://www.hccnet.nl. Wanneer de browser de homepage wil opvragen, zou de blz. 22 operatie er als volgt uit zien: GET / HTTP/1.1. De aanduiding HTTP/1.1 geeft aan welke protocolversie gewenst is. Na het commando stuurt de browser ook nog een aantal HTTP-headers naar de Web-browser. Via deze headers wordt de aanvullende informatie over de browser en over het verzoek doorgegeven aan de Web-server. Een voorbeeld is de UserAgent:-header, die aangeeft wat de gebruikte browser is. De eerste regel in het antwoord van de Web-server bevat een statuscode. Als de code is 200, wil dat zeggen dat de operatie succesvol verlopen is. De volgende regels bevatten HTTP-headers met controle-informatie die door de Web-server aan de browser wordt meegestuurd. Een voorbeeld is de Server:header, welke aangeeft wat de gebruikte Web-server is. Een ander voorbeeld is de Content-Type:-header, die aangeeft welke type informatie de Web-server opstuurt. Dat gaat via een MIME1-type. In veel gevallen zal dat text/html zijn (het MIME-type voor HTML-documenten), maar een Web-server kan ook heel andersoortige informatie opsturen: plaatjes, Worddocumenten, multimediainformatie enzovoorts. De HTTP-headers worden afgesloten door een lege regel. Dan volgt de feitelijk gevraagde informatie. Samenvattend: Een HTTP client-server transactie verloopt als volgt: De gebruiker selecteert een hypertext-link De browser neemt contact op met de server op TCP (Transmission Control Protocol) poortnummer 80 en doet een HTTP GET-operatie. De server retourneert het gevraagde document (of een foutboodschap). De browser presenteert het document. De gebruiker selecteert weer een hyperlink Enzovoort. Een belangrijke opmerking hierbij is de volgende. Documenten bevatten geen plaatjes, maar een verwijzing naar plaatjes (middels de <img scr = …> tag). Een browser die een document heeft opgehaald en ziet dat er plaatjes in staan, moet deze via aparte GEToperaties ophalen. Voor een HTML-document met 10 plaatjes worden dus 11 GEToperaties gedaan. Iets soortgelijks geldt ook voor Java-applets, ActiveX-controls en andere objecten. Naast GET-operaties kent het http-protocol nog een aantal andere operaties. Een ervan is de POST-operatie. Deze dient voor het versturen van ingevulde formulieren. Het ingevulde formulier wordt dan als data meegestuurd door de browser aan de webserver. 3.2 http: headers Alle vragen van een browser en alle antwoorden van een Web-server zijn voorzien van headers. Deze headers worden genoteerd in RFC 822-formaat en afgesloten met een lege regel. Hieronder volgen een aantal headers die een client kan gebruiken in een vraag (request) aan de server. 1 De If-Modified-Since:-header kan gebruikt worden om een conditionele GET te doen, d.w.z. het document wordt alleen opgehaald als het veranderd is na een bepaald tijdstip. De belangrijkste toepassing van deze header is caching van documenten in browsers en proxy-servers. De User-Agent:-header bevat een aanduiding van de gebruikte browser. MIME = Multipurpose Internet Mail Extensions blz. 23 De Referer:-header bevat de URL van de pagina van waaruit werd verwezen naar het huidige document. Dat kan nuttig zijn om te bestuderen via welke externe ingangen Webpagina’s bezocht worden. De server kan in zijn antwoord (response) onder andere de volgende headers gebruiken. De Content-Type:-header geeft aan wat het MIME-type is van het geretourneerde document. De Content-Length:-header geeft aan hoe groot (in bytes) het document is (waarbij de headers-bytes niet meetellen). De Last-Modified:-header geeft aan wanneer het document voor het laatst veranderd is. Deze informatie kan in een later stadium gebruikt worden bij een GET die met If-Modified-Since: conditioneel is gemaakt. De Expires:-header geeft aan wanneer de data in het document ongeldig wordt. Dit is bedoeld voor het beïnvloeden van de caching in browsers en proxy-servers. De Server:-header geeft aan wat de gebruikte Web-server is, bijvoorbeeld Apache of IIS. De eerste regel van het antwoord van de server geeft de statuscode weer. Deze code geeft aan of het verzoek wel of niet succesvol afgehandeld kon worden en wat de oorzaak is van eventuele problemen. In onderstaand overzicht zijn de belangrijkste statuscodes samengevat. Statuscode 200 204 301 304 401 403 404 500 503 Betekenis Operatie succesvol uitgevoerd Operatie succesvol uitgevoerd, client krijgt geen nieuwe pagina. URL van het document is veranderd (Nieuwe URL in Location:-header) Client deed een If-Modified-Since en het document is onveranderd. Client is niet geautoriseerd voor gevraagde operatie. Gevraagde operatie is verboden. Gevraagde document bestaat niet. Interne fout opgetreden in server (mogelijk configuratiefout). Server niet in momenteel niet in staat verzoek af te handelen, mogelijk door te hoge belasting. blz. 24