TCP/IP Voor newbies Preface De meesten die deze guide lezen, kennen TCP/IP waarschijnlijk al vanuit hun broekzak, maar ja! Deze text is dan ook bedoeld voor alle newbies die de TCP/IP-basisprincipes niet beheersen. Niet iedereen is geboren met een UNIX-manual in zijn hand en een Internet-aansluiting binnenin zijn wieg. Nee, zelfs Condor (Kevin Mitnick) is ergens moeten beginnen. Zolang er technologie bestaat, zullen er newbies zijn. En iedereen, jep *iedereen*, kan altijd iets bijleren! Niemand weet ooit alles... Deze text is echt een simpele -en zeer beknopte- inleiding tot TCP/IP. --[ Eerst en vooral: TCP/IP Eigenlijk is TCP/IP gewoon een set van protocollen, ontwikkeld voor WAN's, die steunen op een vierlagenmodel: Network Interface, Internet, Transport en Application. TCP/IP wordt trouwens ook veel gebruikt bij LAN's. --[ En dan nu: het vierlagenmodel De onderstaande figuur geeft een ietwat duidelijker beeld van dit model. De onderste laag is de Network Interface laag. Die is verantwoordelijk voor zowel het zetten van frames op de kabel, als het afhalen van frames van de kabel. Dan de volgende laag, de internet laag, houdt zich voornamelijk bezig met de adressering en routing functies. Die werkt volgens drie protocollen: o Het Address Resolution Protocol of ARP dat gebruikt wordt om fysieke adressen te verkrijgen van hosts die zich bevinden op hetzelfde netwerk. o Het Internet Protocol of IP dat grotendeels verantwoordelijk is voor de adressering en de routing van packets tussen hosts en netwerken. o En het Internet Control Message Protocol of ICMP dat berichten stuurt en fouten rapporteert in verband met de levering van een packet. Dan de transport laag. Die is verantwoordelijk voor de communicatie tussen twee hosts. Deze werkt ook volgens twee protocollen: o Het Transmission Control Protocol of TCP die een verbindingsgerichte en betrouwbare verbinding biedt wanneer grote hoeveelheden van data op hetzelfde moment verzonden moeten worden. Een ACK, een acknowledgement of een ontvangstbevestiging, wordt per ontvangen segment teruggestuurt. o Het User Datagram Protocol of UDP die verbindingsloze services biedt en niet garandeert dat de packets zullen aankomen. UDP wordt meestal gebruikt wanneer kleine hoeveelheden data tegelijkertijd moeten worden verzonden. Betrouwbare verzending is dus de verantwoordelijkheid van het gebruikte prog. En dan is er nog de bovenste laag, de application laag. Dat is de laag waar progs toegang krijgen tot het netwerk. --[ Ten eerste: de network interface laag Zoals ik reeds heb gezegd, is deze verantwoordelijk voor het zetten van frames op de kabel en het afhalen van frames van de kabel. De gebruikte methode verandert ook naargelang het type netwerk. Wanneer de network interface laag een packet ontvangt van de bovenliggende laag, de internet laag, wordt er een preamble en een CRC aan toegevoegd. De preamble is gewoon een reeks bytes die het begin van een frame aanduiden. De CRC of cyclic redundancy check is een wiskundige berekening die toegevoegd wordt om er zeker van te zijn dat het pakket geen fouten bevat. Nu wordt het frame op de kabel gezet. Als dit frame aankomt bij de eindbestemming (de ontvangende host), dan wordt de preamble verwijderd en de wiskundige berekening opnieuw uitgevoerd. Komt de berekende waarde overeen met de originele CRC, dan wordt er naar het fysieke eindadres gekeken binnenin de frame. Is het een broadcast adres, of komt het overeen met de network interface, dan wordt dit frame doorgegeven aan het juiste protocol in de bovenliggende laag. Komen de berekende waarde en de originele CRC niet overeen, wordt het frame gewoon verwijderd. --[ Ten tweede: de internet laag Hierop worden de packets geadresseerd voor routing. IP biedt verbindingsloze services waarmee bedoelt wordt dat er geen sessie gemaakt moet worden met een andere host vooraleer een pakket kan verzonden worden. Hierdoor is IP dan ook onbetrouwbaar. Packets kunnen bijvoorbeeld tijdens het verzenden zoekraken, niet in de juiste volgorde toekomen of zelfs twee keer voorkomen, waardoor de betrouwbaarheid de taak wordt van de bovenliggende protocollen. Wordt een packet van de transport laag doorgegeven aan de internet laag, dan voegt IP er een eigen header aan toe. Deze header bevat onder andere het bronadres, het bestemmingsadres, het gebruikte protocol, een checksum value en een TTL. De checksum value is een simpele wiskundige berekening om te controleren of het pakket wel degelijk foutloos is toegekomen. TTL, de Time To Live of gewoon de levensduur, bepaalt het aantal seconden dat een packet mag doorbrengen op de kabel. Dit voorkomt dat een packet eindeloos blijft ronddwalen op het netwerk. Wordt het bestemmingsadres herkent als een lokaal adres, dan verzendt IP het packet direct naar die host. Anders, dus als het een extern adres is, dan controleert IP de routingtabel voor een eventuele route naar die host. Wordt er een route gevonden, dan zendt IP het packet gewoon volgens die route. Wordt er geen route gevonden, dan wordt het packet naar de standaardgateway, ook een router, van de bronhost gestuurd. Als het pakket door de router ontvangen wordt, wordt het doorgegeven aan IP dat er het volgende mee doet: o het vermindert de TTL met één bij elke router, of meer als het pakket wat blijft steken door overbelasting aan de router. Is de levensduur nul, dan wordt het pakket verwijderd. o Dan berekent IP opnieuw de cheksum value. o IP vraagt het fysieke adres op van de volgende router. o IP stuurt uiteindelijk het pakket door. Dit proces wordt dus telkens herhaald per router dat het packet tegenkomt totdat het zijn eindbestemming bereikt heeft. Ontvangt de router een pakket dat te groot is voor het onderliggende netwerk, dan breekt IP het packet op in kleinere stukken. Enkel en alleen als de stukken op de eindbestemming aankomen, voegt IP de stukken terug bij elkaar tot het originele pakket terug gevormd wordt, wat fragmentatie wordt genoemd. Per stuk wordt er ook een nieuwe header aangemaakt die bestaat uit: o een vlag om aan te duiden dat er nog fragmenten volgen. o Een fragment-ID om aan te duiden welke fragmenten nu juist bij elkaar horen. o En een fragment-offset om aan te duiden in welke volgorde IP de stukken terug moet samenvoegen. Uiteindelijk wordt het samengestelde pakket door de stack doorgegeven aan ofwel TCP, ofwel UDP. Als IP packets moet routen, dan moet IP sowieso het fysieke eindadres kunnen verkrijgen. IP gebruikt hiervoor het ARP protocol bij broadcast- gebaseerde netwerken. De werking hiervan: ARP wordt aangesproken door IP en raadpleegt eerst en vooral de ARP cache om te zoeken achter het fysieke adres dat overeenkomt met de eindbestemming. Vindt ARP dit niet, dan creëert ARP een ARP request frame voor het fysieke eindadres, waarbij zowel het IP-adres als het fysieke bronadres mee in wordt opgenomen. Vervolgens wordt het frame op de kabel gezet en gestuurd naar het gehele lokale netwerk. Alle hosts ontvangen dit request frame en sturen het door naar hun ARP protocol. Komt het IP-adres van de ontvangende host overeen met het gevraagde eindadres, dan wordt er in deze host een ARP reply gemaakt dewelke zijn fysieke eindadres bevat en wordt deze reply direct gestuurd naar de bronhost. Als deze reply ontvangen wordt, dan worden zowel het IP-adres als het fysieke adres ervan opgeslagen in de lokale ARP cache. En dus nu pas kan het packet verzonden worden. -- RFC 791 - Internet Protocol (IP) -- RFC 826 - Address Resolution Protocol (ARP) Treden er fouten op tijdens het routen, dan stuurt ICMP een foutmelding met enkele gegevens over de fout naar de bronhost. ICMP kan bijvoorbeeld een source quench bericht sturen als een router niet meer kan volgen doordat hij overbelast wordt. Deze source quench laat weten dat de host zijn transmissiesnelheid moet verlagen. Of ICMP kan een redirect bericht sturen wanneer een gewenste route aangevraagd wordt, als bijvoorbeeld een bepaalde router overbelast is en dus een andere route gebruikt moet worden. Of een 'destination unreachable' bericht wanneer er geen route mogelijk is. Dit ICMP bericht wordt samengesteld tot een IP datagram en wordt gerouted naar de bron host. -- RFC 792 - Internet Control Message Protocol (ICMP) --[ Ten derde: de transport laag Deze laag voorziet de eindpunten tussen de twee hosts waartussen de communicatie zal plaatsvinden. Bij zowal UDP als TCP worden dit ports genoemd. UDP wordt meestal gebruikt wanneer kleine hoeveelheden data tegelijkertijd moeten worden verzonden. UDP heeft twee belangrijke eigenschappen: o Het is verbindingsloos waarmee bedoelt wordt dat er geen verbinding dient gemaakt te worden tussen de twee hosts vooraleer data kan worden verzonden. UDP berichten kunnen ook gebroadcast worden zodat veel hosts het bericht ontvangen. o En het garandeert ook geen foutloze verzending. Packets kunnen in een foute volgorde of zelfs dubbel aankomen. Betrouwbare verzending is dus de verantwoordelijkheid van het gebruikte prog. Als een prog data wil verzenden, dan creëert UDP een header dat een bronport, een eindport (waar uiteindelijk de data naartoe zal worden verzonden) en een checksum value (voor zowel de data als deze header te controleren) bevat. Wordt het packet bij de eindhost ontvangen, dan wordt dit doorgestuurd naar UDP die het op zijn beurt aflevert aan de eindport. -- RFC 768 - User Datagram Protocol (UDP) TCP wordt meestal gebruikt bij progs die grote hoeveelheden aan data moeten verzenden. TCP heeft drie belangrijke eigenschappen: o Het is verbindingsgericht waarmee dus bedoelt wordt dat TCP eerst een verbinding zal maken tussen de twee hosts vooraleer data kan worden verzonden. o Het is enorm betrouwbaar doordat TCP gebruik maakt van een nummering en ACK's (acknowledgment of ontvangstbevestiging). De nummering laat TCP toe de segmenten op te splitsen in verschillende packets op de bronhost zodat op de eindhost de packets gemakkelijk bij elkaar kunnen worden gebracht. o En de communicatie van TCP is bytegeoriënteerd waardoor gegevens worden behandeld als een opeenvolging van bytes. -- RFC 793 - Transmission Control Protocol (TCP) --[ Ten vierde: de application laag Dit is de laag waar progs toegang krijgen tot het netwerk. Micro$oft TCP/IP ondersteunt Windoze Sockets en NetBIOS interfaces tussen progs en de transport laag. Windoze Sockets voorzien een standaard API onder Windows voor transport protocollen met verschillende adresseringsmethoden. NetBIOS voorziet een standaard interface voor protocollen zoals TCP/IP en NetBEUI die de NetBIOS naming conventions ondersteunen met betrekking tot de adressering. --[ RFC's De verschillende protocollen die bij de vier lagen horen, worden elk behandeld in hun eigen RFC. RFC's of Request For Comments zijn artikelen waarin alle mogelijke protocollen en afspraken in verband met het Internet en netwerken genoteerd staan. Het zijn er tot nu toe ettelijke duizenden, en het aantal blijft gestadig toenemen per nieuwe afspraak er gemaakt wordt... RFC's kunnen gedownload worden op : http://www.cis.ohio-state.edu/hypertext/information/rfc.html Zym0t1c