Copyright © 2008-2009 Leo Rutten
| Wijzigingen | ||
|---|---|---|
| Herziening $Revision: 1.4 $ | $Date: 2009/02/17 12:51:26 $ | RL |
| Fout verbeterd | ||
| Herziening 0.1.5 | 24/ 5/2002 | RL |
| TCP tekst bijgevoegd, deze tekst is nu definitief voor academiejaar 2001-2002 | ||
| Herziening 0.1.4 | 20/ 5/2002 | RL |
| overige figuren, IP tekst, UDP tekst en laatste Java voorbeeld bijgevoegd | ||
| Herziening 0.1.3 | 11/ 5/2002 | RL |
| twee nieuwe figuren en TCP Java voorbeelden bijgevoegd | ||
| Herziening 0.1.2 | 23/ 4/2002 | RL |
| Test nieuwe tekening | ||
| Herziening 0.1.0 | 16/ 3/2002 | RL |
| Omzetting van Lotus WordPro | ||
Samenvatting
Inleiding tot datacommunicatie
Inhoudsopgave
Lijst van figuren
Het belang van de datacommunicatie stijgt in de computersector. Tegenwoordig worden computers meer en meer in netwerken geschakeld. Wereldwijde netwerken zoals Internet kennen nu een groot succes. De programmatuur voor de toegang tot Internet wordt nu standaard meegeleverd met het besturingssysteem.
De werking van netwerkprogrammatuur kunnen beschreven worden met het OSI lagenmodel:
Binnen elk van deze lagen worden er een aantal afspraken vastgelegd. Twee computersystemen, die met elkaar contact willen nemen, moeten zich aan deze afspraken houden. Anders ontstaan er misverstanden en zal de communicatie tussen beiden mislopen. In datacommunicatie gebruikt men niet de term afspraak maar wel protocol. Je zult dus dikwijls de vraag horen: 'volgens welk protocol verloopt de communucatie tussen 2PC's?'.
We geven een korte uitleg bij elk van de lagen:
In deze laag wordt beschreven welke kabel en welke bitsnelheid gebruikt wordt.
Deze laag legt vast hoe en op welk moment een bericht van een computer naar een andere computer aan de zelfde kabel verstuurd kan worden. Ook het vastleggen van de adressen en berichtenformaten behoort tot de afspraken binnen deze laag.
Indien meerdere netwerken aan elkaar gekoppeld worden zijn afspraken nodig: Hoe gebeurt de globale adressering en op welke wijze wordt de route gekozen die een bericht moet volgen.
Deze laag verzorgt de controle tussen de twee eindpunten. Op deze wijze verkrijgen we een betrouwbare netwerkverbinding.
Dit zijn afspraken die vastleggen op welke wijze gegevens in de berichten worden gecodeerd. Ook afspraken in verband met encryptie vinden we hier terug.
Deze laag legt vast op welke wijze een gebruiker een sessie kan starten met een afgelegen computer.
Deze laag legt vast welke toepassingen er voor de gebruiker ter beschikking staan. Voorbeelden zijn:
bestanden raadplegen
post versturen
gegevensbanken raadplegen
Web raadplegen
procesbesturing via netwerk
In de fysisch laag worden afspraken gemaakt over het type kabel en de wijze waarop de bits over deze kabel verstuurd worden.
Voor de communicatie van een PC via een telefoon is een modem vereist. Een modem is een extern apparaat of kan ook als een insteekkaart voorkomen. De term modem is de afkorting van mo dem - dem odulator. De modem wordt aan de ene zijde met een seriele poort van de PC gekoppeld en aan de andere zijde met een telefoonlijn. De seriele bitstroom die de PC via de seriele poort naar buiten stuurt, wordt in de modem omgezet als een reeks signalen met wisselende frequentie (bijvoorbeeld bit 0 = 1200 Hz, bit 1 = 2400 Hz). In omgekeerde richting zorgt de modem voor de omzetting van de van de telefoonlijn ontvangen signalen in een digitale bitstroom. Een digitale bitstroom kan niet rechtstreeks via een telefoonlijn verstuurd worden. Deze beperking heeft te maken met de beperkte bandbreedte van een telefoonlijn (300 - 3000 Hz).
Bij de seriele poorten COM1 en COM2 van de PC wordt informatie teken per teken verstuurd. Men spreekt hier van asynchrone transmissie omdat een teken op elk moment verzonden kan worden. Het formaat van een teken ziet er als volgt uit:
Als de verbinding in rust is, is het niveau op de lijn hoog. De start van het teken wordt aangegeven met de startbit. Het niveau is laag. Daarna volgen de 8 bits die samen het teken vormen. Na de laatste tekenbit volgt de pariteitsbit. Deze bit wordt voor controle gebruikt. Men past even of oneven parieteit toe. Even pariteit betekent dat in de 9 bits samengesteld uit de 8 databits en de pariteitsbit, het aantal hoog niveau's even is. De laatste bit in het teken is de stopbit; dit is een hoog niveau. Onmiddellijk daarna kan de startbit volgen van het volgende teken. Soms is het aantal databits niet 8, maar 7. Ook kan de pariteitsbit weggelaten worden. Met een pariteitsbit kan een even of een oneven pariteit gekozen worden.
De verbindingskabel tussen COM2 en de modem voldoen aan de RS232 norm. De spanningen varieren tussen +12V en -12V. Seriele poorten op PC's zijn er met 9 polige of 25 polige connector.
PC's die in hetzelfde gebouw geplaatst zijn, kunnen via een LAN gekoppeld worden. LAN is de afkorting van L ocal Area N etwerk. Elke PC moet met een netwerkkaart uitgerust worden.
Eén van de PC's heeft een speciale functie: deze PC is de fileserver. Het is zijn taak om zijn harde schijf toegankelijk te stellen aan alle andere PC's in het netwerk. De netwerksoftware zorgt er wel voor dat de gebruikers van de PC's niet zomaar aan elkaars bestanden kunnen.
In het labo wordt als netwerksysteem Ethernet toegepast. Bij Ethernet kan als kabel dikke coax, dunne coaxkabel of niet afgeschermde kabel (UTP) gebruikt worden. De snelheid is 10 Mbit/s. In het labo wordt een combinatie van verschillende kabelsoorten gebruikt.
Dikke coax kabel wordt niet meer toegepast in nieuwe installaties. Voor de aansluiting is een dure aansluitdoos vereist. De volgende tekening toont de bekabeling met dunne coax.
De kabel op een punt het labo binnen en loopt aan elke PC voorbij. Elke PC is met de kabel verbonden met een BNC T-stuk. De kabel moet aan het einde afgesloten worden met een afsluitweerstand. Indien deze ontbreekt, zal er geen communicatie op de kabel mogelijk zijn. Een ander nadeel is de gevoeligheid voor het ganse kabelsegment voor slechte aansluitingen. Als iemand een PC loskoppelt van het T-stuk, valt het netwerk buiten dienst. Het opsporen van deze fout is lastig. Alle PC's moeten met het netwerk gekoppeld blijven.
Een andere oplossing is het gebruik van een concentrator.
Een concentrator (hub in het Engels) is een apparaat (in het labo tegen het plafond gemonteerd) dat alle PC's met het netwerk koppelt. Vanuit elke PC loopt er een UTP kabel (niet afgeschermde kabel) naar de concentrator. De concentrator in het labo heeft 12 poorten voor UTP kabel en een BNC aansluitig voor dunne coax. Met deze laatste wordt de concentrator aan het Ethernet netwerk gekoppeld. Het voordeel van dit systeem is dat PC's nu wel losgekoppeld kunnen worden vanhet netwerk zonder dat het globale netwerk buiten dienst valt. In het labo zijn kabelgoten met stopcontacten toegepast om de koppeling nog gemakkelijker te laten verlopen.
Als nadeel hebben we wel de kostprijs van een concentrator per 12 PC's. Deze kostprijs is recent wel gedaald.
In het bovenstaande voorbeeld wordt nog coaxkabel gebruikt. De laatste tijd wordt coax helemaal niet meer toegepast. De koppeling van de hub naar andere hubs, bridgen en switchen is nu altijd UTP.
UTP kabel bestaat uit 4 aderparen, dus 8 aparte aders. Elk aderpaar bestaat uit 2 aders in torsie. Elk aderpaar vervoert één signaal.
De pinnen van UTP kabel zien er als volgt uit:
De bovenstaande figuur toont de aansluiting aan de zijde van de Ethernetkaart van de PC. Het paar 1-2 wordt gebruikt om data te verzenden. Het paar 3-6 wordt gebruikt om berichten te ontvangen. Meestal wordt een rechtdoorverbonden kabel gebruikt. Dit betekent dat de pin aansluiting aan beide zijden dezelfde is.
| PC zijde | Hub-zijde | |
| Data + van PC naar hub | 1 | 1 |
| Data - van PC naar hub | 2 | 2 |
| Data + van hub naar PC | 3 | 3 |
| 4 | 4 | |
| 5 | 5 | |
| Data - van hub naar PC | 6 | 6 |
| 7 | 7 | |
| 8 | 8 |
Zoals duidelijk wordt uit bovenstaande tabel is pin aan de PC zijde een uitgang en aan de hubzijde een ingang. Dit betekent ook dat een rechtdoorverbonden kabel niet kan gebruikt worden om twee PC's zonder tussenliggende hub met elkaar te verbinden. In dit geval moet een gekruiste kabel gebruikt worden.
| PC1 zijde | PC2 zijde | |
| Data + van PC1 naar PC2 | 1 | 3 |
| Data - van PC1 naar PC2 | 2 | 6 |
| Data + van PC2 naar PC1 | 3 | 1 |
| 4 | 4 | |
| 5 | 5 | |
| Data - van PC2 naar PC1 | 6 | 2 |
| 7 | 7 | |
| 8 | 8 |
De aders 4, 5, 7 en 8 worden niet gebruikt door Ethernet.
Door het feit dat er met rechtdoorverbonden kabels wordt gewerkt zijn er twee soorten poorten:
Dit is de poort aan de PC zijde.
Dit is de poort aan de hub zijde.
Steeds moet een opgaande met een neergaande poort gekoppeld worden. Bij veel hubs is het mogelijk om 1 poort om te schakelen van neergaande naar opgaande poort. Hiervoor is er dan een kleine schakelaar voorzien. Dit biedt de mogelijkheid om hubs in cascade te plaatsen.
Een hub werkt op laag 1. Berichten die op 1 poort ontvangen worden, worden op alle andere poorten verstuurd. Wanneer 2 PC's tegelijkertijd een bericht naar hun poort versturen, dan ontstaat er een botsing, die op alle andere poorten wordt verspreid. Veel hubs hebben een rode led die bij botsingen aangaat.
Voor hoge snelheden wordt glasvezel gebruikt. Een systeem dat reeds een tijd bestaat is FDDI. Recenter is ATM. Bij glasvezel kan een ader één signaal in één richting transporteren. Meestal zijn er meerdere aders nodig.
Bij ATM wordt gebruik gemaakt van een optische verbinding met een hoge snelheid (150 Mbit of meer). Dit is beter geschikt voor de overdracht van geluid en beeld. Dit komt omdat ATM een minimum bandbreedte kan garanderen voor elke verbinding. De data wordt verpakt in blokjes van 53 bytes. Een verschil met Ethernet is het feit dat bij ATM eerst een verbinding moet opgebouw worden. Na deze faze wordt er gegarandeerd dat er een constant debiet mogelijk is.
ATM tot bij de PC komt nog niet zoveel voor. Meestal wordt ATM gebruikt voor verbindingen tussen switchen en routers.
Eerst bespreken we zeer kort ATM als verbindingslaag. Bij ATM wordt gebruik gemaakt van een optische verbinding met een hoge snelheid (150 Mbit of meer). Dit is beter geschikt voor de overdracht van geluid en beeld. Dit komt omdat ATM een minimum bandbreedte kan garanderen voor elke verbinding. De data wordt verpakt in blokjes van 53 bytes. Een verschil met Ethernet is het feit dat bij ATM eerst een verbinding moet opgebouw worden. Na deze faze wordt er gegarandeerd dat er een constant debiet mogelijk is.
ATM tot bij de PC komt nog niet zoveel voor. Meestal wordt ATM gebruikt voor verbindingen tussen switchen en routers.
We bespreken nu verder de verbindingslaag van Ethernet die in het labo wordt toegepast. Het doel van de verbindingslaag is het foutloos overbrengen van een gegevenspakket van een PC naar een andere PC. Omdat alle PC parallel met de ethernetkabel zijn gekoppeld, moet er een systeem van unieke adressering toegepast worden. Dit is nodig om ervoor te zorgen dat een bericht slechts door de PC aan de welke het bericht verstuurd wordt, wordt verwerkt. Daarom is in elke Ethernet-netwerkkaart een uniek adres van 6 bytes vast geprogrammeerd. Dit adres wordt toegekend door de fabrikant van de netwerkkaart. Een Ethernet adres ziet er als volgt uit:
00:20:ac:23:56:fe
Men schrijft de waarde van elke byte in het hexadecimaal. De getallen worden gescheiden door een dubbele punt. Op deze wijze verkrijgt elke PC een uniek Ethernetadres. Er zullen dus geen twee PC's in de wereld zijn met hetzelfde adres.
Berichten worden in Ethernet verstuurd in het volgende formaat:
Het bericht start met een aantal bytes met constante waarde die de start van het bericht aangeven. Dan volgen het bestemmelingsadres en het afzenderadres. Dan volgt het veld dat ofwel het type ofwel de lengte aangeeft. Er zijn namelijk twee standaarden voor Ethernetberichten. Dan volgen de gegevens met minimum 46 en maximum 1500 bytes. Op het einde bevindt zich de controlesom. De ontvanger van het bericht gebruikt deze som om na te gaan of het ontvangen bericht correct is.
Hoe wordt nu beslist op welk moment een bericht verstuurd mag worden. Het is duidelijk dat er problemen ontstaan wanneer er gelijktijdig 2 PC's beginnen te zenden. De twee verzonden berichten worden dan verminkt.
De te volgen procedure voor het starten van het zenden is als volgt
Een PC die wil zenden wacht tot het netwerk in rust is.
Als het netwerk in rust is, start de PC het zenden
Als een tweede PC op hetzelfde moment begint te zenden, worden beide beruchten verminkt. De beide PC's, die trouwens moeten meeluisteren nar hunt eigen verzonden berichten, ontdekken dat er wat misloopt. Deze situatie kan niet vermeden worden: beide PC's hebben het zenden gestart bij een netwerk in rust. Deze situatie heet botsing. Dan worden de volgende stappen doorlopen:
Elke PC die betrokken is in de botsing start een timer. De tijd van deze timer is voor elke PC verschillend. Er wordt hiervoor een getallengenerator gebruikt. De PC bij wie de timer het eerst afloopt, start opnieuw het zenden
Indien er bij een tweede poging opnieuw een botsing optreedt, wordt de wacht procedure met de timers herhaald. Deze keer worden grotere tijden gekozen.
Indien nodig wordt de voorgaande stap herhaald tot alle berichten verstuurd zijn.
Een netwerkkaart die een bericht ontvangt gaat het bericht alleen maar aannemen indien het zijn eigen adres in het bericht als bestemmeling herkent. Onmiddellijk daarna zendt de netwerkkaart een kort bevestigingsbericht terug naar de afzender. Zo weet de afzender dat het door hem verzonden bericht goed is aangekomen. De volgende figuur geeft dit weer:
Deze hele cyclus bestaande uit het wachten tot verzending, de verzending en wachten op bevestiging wordt volledig door de netwerkkaart verricht door de netwerkaart.
De verbindingslaag van Ethernet zorgt ervoor dat dat we foutloos tot 1500 bytes gegevens per bericht naar een andere PC versturen.
Inhoudsopgave
Omdat we voor communicatie op lange afstand te maken krijgen met verschillende lokale netwerken die verbonden zijn, moet er ook een netwerklaag zijn. Twee aspecten zijn belangrijk:
Als we te maken krijgen met een wereldwijd aan elkaar gekoppelde netwerken, moet er een methode van adressering bestaan om elke computer in dit werldwijde netwerk te kunnen bereiken.
Omdat computers nu niet meer via een zelfde kabel zijn doorverbonden, moet er een mechanisme bestaan dat een bericht de juiste route volgt om tot de computer van bestemming te geraken. Dit mechanisme noemt men routing.
Deze beide aspecten treffen we aan in de netwerklaag. De routing functie wordt door de volgende figuur weergegeven:
De figuur toont drie netwerken A, B en C. Als een PC van netwerk A een bericht wil versturen naar een PC van netwerk C, dan zorgen de routers ervoor dat dit bericht de juiste weg volgt.
Bij de netwerklaag van Internet wordt er een speciale adressering toegepast. Dez adressen worden IP adressen genoemd. IP is de afkorting van I nternet P rotocol. Elk IP adres is een uniek getal van 4 bytes. Voor elke Internet aansluiting is er één IP adres nodig. Omdat alle IP adressen uniek in de wereld zijn, moeten IP adressen bij een Internet organisatie aangevraagd worden.
Door de unieke adressering van de IP adressen is het mogelijk om berichten te versturen naar om het even welke Internet computer in de wereld. Het IP adres identificeert op een unieke wijze de bestemmeling. Aan de hand van de IP adres van de bestemmeling kan ook bepaald worden welke route het bericht tot aan de bestemmeling moet volgen. Deze routing maakt deel uit van het IP protocol.
Er zijn verschillende soorten IP adressen: klasse A, klasse B, klasse C en nog enkele gereserveerde klassen. De meest beduidende bits van het IP adres bepalen tot welke klasse een IP adres behoort. De volgende figuur maakt dit duidelijk:
De volgende tabel geeft de bereiken van de verschillende klassen weer:
| KLASSE | meest beduidende bits | BEGIN | EINDE |
| klasse A | 0xxxxxxx | 0.0.0.0 | 127.0.0.0 |
| klasse B | 10xxxxxx | 128.0.0.0 | 191.255.0.0 |
| klasse C | 110xxxxx | 192.0.0.0 | 223.255.255.0 |
| klasse D/E | 1110xxxx | 244.0.0.0 | 255.255.255.0 |
Een IP adres wordt geschreven als een reeks van 4 decimale getallen gescheiden met punten.
Bij elke klasse is er een deelbereik gereserveerd voor prive gebruik. Dit betekent dat de adressen in deze bereiken niet toegekend zijn aan Internet computers. Ze kunnen gebruikt worden als adressen voor comuters die het Internet protocol in een lokaal netwerk, dat niet met Internet gekoppeld is. Dit noemt men intranet.
| KLASSE | BEGIN | EINDE |
| klasse A | 10.0.0.0 | 10.255.255.255 |
| klasse B | 172.16.0.0 | 172.31.0.0 |
| klasse C | 192.168.0.0 | 192.168.255.255 |
IP adres bestaat uit steeds uit twee delen:
netwerkgedeelte
computergedeelte
Het gevolg van deze opdeling is dat computers die aan dezelfde fysische kabel gekoppeld zijn een gemeenschappelijk netwerk gedeelte in hun IP adres hebben. Deze afspraak vergemakkelijkt het vinden van de juiste route van computer A naar computer B.
Het netwerkmasker geeft aan welk deel van een IP adres tot het netwerkgedeelte behoort:
255.0.0.0
255.255.0.0
255.255.255.0
De bytes met getalwaarde 255 behoren tot het netwerkgedeelte. Hieruit volgt dat in een netwerk van klasse A er 16.777.216 (2 tot de macht 24) computers kunnen zijn (dit is meer dan fysisch mogelijk). In een klasse B netwerk zijn er dat 65.536 (2 tot de macht 16) en in een klasse C adres zijn er slechts 256 (2 tot de macht 8). In de drie bovenstaande voorbeelden val de grens tussen netwerk- en computergedeelte op de bytegrens. Deze grens mag ook middenin een byte vallen. Deze techniek wordt verder niet besproken.
Elk netwerk en elke computer krijgt een vast IP adres toebedeeld. Er is ook een situatie waarin een computer een tijdelijk IP adres verkrijgt. Deze situatie ontstaat wanneer een gebruiker met zijn huis-PC een internetleverancier opbelt en hiermee een verbinding opbouwt. Tijdens het opbouwen van de verbinding wordt er aan de gebruikersPC een tijdelijk IP adres toegekend. Bij het verbreken van de verbinding is het IP adres niet meer toegekend en kan het gebruikt worden voor de volgende gebruiker die inbelt op deze telefoonlijn. Een internetleverancier heeft hierdoor maar zoveel IP adressen nodig als er modems voor inbellers zijn.
De toekenning van IP adressen gebeurt in twee stappen.
netwerkdeel van IP adres aan netwerken toekennen
per aansluiting aan PC netwerkdeel van IP adres aanvullen met computerdeel van IP adres
We kiezen voor het netwerk in de bovenstaande figuur een klasse B adres. We veronderstellen dat dit adres bij de officiele instantie is aangevraagd. Het netmasker voor dit adres is 255.255.0.0 . Dit betekent dat de twee hoogst beduidende bytes het netwerkadres bepalen. De twee minst beduidende bytes zijn 0. Hiermee geven we aan dat we het IP adres van het netwerk bedoelen.
In een volgende stap nummeren we elke netwerkkaart die toegang heeft tot het netwerk met een IP adres. We gebruiken steeds het netwerkgedeelte 130.37.0.0 . Dit zien we in de volgende figuur:
We wensen het lokale netwerk in B106 te koppelen met een lokaal netwerk in K101. Omdat de afstand tussen beide labo's groot is, gebruiken we een seriële verbinding (eventueel via de telefooncentrale van de school). In de internetgedachtengang is een seriële verbinding tussen twee computers ook een netwerk. Daarom hebben we in dit voorbeeld eigenlijk drie netwerken.
We kennen aan elk van de netwerken een IP adres toe
| lokaal netwerk B106 | 130.37.0.0 | klasse B |
| seriële verbinding | 130.50.0.0 | klasse B |
| lokaal netwerk K101 | 130.42.0.0 | klasse B |
Daarna geven we elk van de sëriele poorten en netwerkkaarten een IP adres met het overeenkomstige netwerkgedeelte dat eerder is toegekend.
Dit laatste voorbeeld dat het uitwisselen van gegevens tussen twee computers nu in verschillende etappen verloopt. Als we een zendopdracht starten van 130.37.14.1 naar 130.42.20.1 dan krijgen we drie etappen:
van 130.37.14.1 naar 130.37.14.3
van 130.50.32.1 naar 130.50.32.2
van 130.42.20.3 naar 130.42.20.1
De computers B10C03 en K101C03 doen dienst als router. Ze zijn verantwoordelijk voor het doorgeven van berichten in de richting van de bestemmeling.
Het kiezen van de juiste weg voor een internet bericht is een van de taken het IP protocol. De volgende figuur toont de schematische werking van de routing van het bericht.
Een datapakket vertrekt in PC met IP adres 130.27.14.1 vanuit de netwerkaart eth0. Het pakket komt aan in de eth0 netwerkaart met IP adres 130.27.14.3. Deze PC ontdekt dat dit bericht niet voor zich zelf bestemd is. Daarom wordt het bericht onmiddellijk verder verstuurd via de seriële naar poort sl1 naar de volgende PC. Ook deze PC ontdekt dat het bericht verder verstuurd moet worden. Uiteindelijk komt het bericht op de eindbestemming aan via de netwerkaart eth0 met IP adres 130.42.20.1. De gebruiker voor wie dit bericht verstuurd werd merkt niets van al deze etappes. Ook is de gebruiker niet verantwoordelijk voor het vinden van de juiste te volgen route. Deze beslissing wordt genomen door het IP protocol met behulp van routing tabellen. Elke PC die in Internet gekoppeld is heeft een routing tabel. Deze tabel geeft aan naar welk volgend IP adres een bericht moet verstuurd worden voor een bepaald IP bestemmelingsnetwerkadres.
Routingtabellen
B106C01
| Bestemming | Volgend IPadres | Apparaat |
| 130.42.0.0 | 130.37.14.3 | eth0 |
| 130.50.0. | 130.37.14.3 | eth0 |
| default | 130.37.14.3 | eth0 |
De routing tabel van B106C01 toont dat voor alle bestemmingen het volgende IP adres altijd 130.37.14.3 is. Dit is het IP adres van de PC die de routing verzorgt naar de rest van het complete netwerk. in de kolom van bestemming komt ook het woord default voor. Hiermee worden alle overige bestemmingen mee bedoeld. Het is onpraktisch om alle bestemmingen in de routing tabel op te nemen. Indien we een bericht naar een bestemming sturen die niet in de kolom van bestemming voorkomt, dan wordt als volgend IP adres het adres dat bij default hoort, genomen.
De routingtabellen voor de twee andere PC's zien er zo uit:
B106C03
| Bestemming | Volgend IPadres | Apparaat |
| 130.42.0.0 | 130.50.32.1 | sl1 |
| 130.37.0.0 | 130.37.14.3 | eth0 |
| default | 130.50.32.1 | sl0 |
K101C03
| Bestemming | Volgend IPadres | Apparaat |
| 130.42.0.0 | 130.42.20.3 | eth0 |
| 130.37.0.0 | 130.50.32.2 | sl1 |
| default | 130.42.20.3 | eth0 |
Al het verkeer met onbekend adres als bestemming komt bij 130.42.20.3 terecht. Het is de bedoeling dat deze PC een verdere verbinding met Internet heeft.
Een probleem dat bij routing ontstaat zijn cirkelvormige verwijzingen in de routingtabellen. De volgende figuur toont een computer A die met een netwerk verbonden is met een netwerk van routers B, C, D en E. Computer A verstuurt een berciht naar een zekere bestemming. De routingtabel in B geeft aan dat dit bericht dan verder naar C moet. Van C gaat het dan naar D en daarna naar E. In E geeft de routingtabel aan dat de volgende stap terug B en zo is de cirkel rond. Het bericht blijft circuleren en komt nooit bij de eindbestemming aan. De fout is ontstaan door foutieve routingtabellen. Hierdoor blijven berichten nodeloos in verzending en wordt het netwerk zwaarder belast en kan uiteindelijk blokkeren wegens verstopping.
De oplossing voor dit probleem is een teller die in elk bericht is opgenomen. Dit is de zogenaamde sprongteller (in het Engels: hopcounter). Bij de afzender wordt in de sprongteller een constante waarde geladen, bijvoorbeeld 16. In elke router wordt de sprongteller met één verminderd. Als een bericht in een router aankomt met een sprongteller met waarde 0, wordt het bericht in de vuilbak gegooid en niet verder verstuurd.
We geven nog een samenvatting van de eigenschappen van het IP protocol
De taak van het IP protocol is het verzenden van een blok gegevens naar een bestemmeling die niet aan dezelfde fysische kabel is aangesloten als de afzender.
Eventueel worden de gegevens geknipt in verschillende pakketten. Dit is nodig omdat de technologie die onder IP wordt gebruikt, meestal niet in staat is om grote blokken data te versturen.
Het IP protocol verzorgt routing van de berichten. Een blok data kan niet rechtstreeks aan de eindbestemming afgeleverd worden en doorloopt bijgevolg een aantal routers onderweg.
Het IP protocol garandeert geen goede aflevering. Soms kunnen berichten onderweg verloren gaan. Het is zelfs mogelijk dat routers onderweg beslissen om berichten weg te gooien omdat er bijvoorbeeld te veel verkeer is.
Het pakket dat door IP verstuurd wordt, noemt men een IP datagram. Een IP datagram bestaat uit een IP header en de data. Dit geheel wordt dan nog een keer ingepakt in een een fysische laag pakket. De volgende tekening toont hoe IP ingekapseld wordt in Ethernet.
De header van IP is minimum 20 bytes lang.
We overlopen de verschillende datavelden in de header.
Versie van het IP protocol.
Lengte van de header.
Dit veld is een indicatie voor het soort dienst dat met IP datagram wordt verzorgd. Dit veld wordt niet altijd gebruikt.
Dit is de totale lengte van het IP datagram, header en data inbegrepen. Deze lengte is in bytes uitgedrukt.
Dit is het identificatieveld. In dit veld plaatst een afzender een uniek nummer. Alle fragmenten van een IP datagram krijgen hetzelfde nummer. Hierdoor wordt re-assembly van alle fragmenten een stuk eenvoudiger.
Dit veld is 3 bit breed, 1 bit is steeds 0 en de twee overige bevatten de vlaggen DF en MF.
Don't Fragment. 0 betekent dat fragmentatie is toegestaan, 1 betekent dat fragmentatie niet is toegestaan.
More Fragments. 0 betekent dat dit fragment het laatste van een datagram is. Een 1 betekent dat er nog fragmenten volgen.
Dit getal geeft aan wat de plaats van dit fragment in het datagram is. Er wordt hier per 8 bytes geteld. Een waarde 2 betekent dus dat de plaats byte 16 is. In het eerste fragment is fragment offset altijd 0.
Dit is Time To Live. Dit veld bevat de toegestane reistijd. Elke router onderweg wordt verondersteld van dit veld 1 af te trekken. Als dit veld 0 wordt is de toegestane reistijd op en moet het pakket weggegooid worden. Hierdoor wordt er vermeden dat pakketten oneindig lang in een gesloten lus blijven reizen in het netwerk.
Dit veld bevat het nummer van het bovenliggende protocol. Deze getallen zijn gestandardiseerd. Zo is 1 ICMP en 6 is TCP.
Dit is de checksum van de header alleen. Hiermee kan de ontvanger verifiëren of de ontvangen header intact is.
Dit 4 byte veld bevat het IP adres van de afzender.
Hier staat het IP adres van de bestemmeling.
De header heeft een variabele lengte. Er kunnen een aantal optionele velden voorkomen. Dit wordt hier verder niet besproken.
Deze opvulling wordt gebruikt om de data op een 32 bit grens te laten starten. Er worden dan met 0 gevulde bytes gebruikt.
Dit is de data die in het IP datagram wordt verstuurd. De betekenis van deze data wordt door het getal in het protocol-veld bepaald.
Wanneer een IP datagram door middel van verschillende fysische netwerken (Ethernet, ADSL, kabelmodem, ...) wordt verstuurd, dan moet er telkens rekening gehouden worden met de maximum pakkettgrootte (MTU of Maximum Transmission Unit). Elke in de fysische laag gebruikte technologie heeft zijn eigen maximum lengte. Deze lengte beperkt de hoeveelheid databytes in één keer met een frame over het fysisch netwerk kan verstuurd worden. Daarom verzorgt IP de fragmentatie van IP datagrammen zodat een lang datagram opgedeeld kan worden in meerdere korte fragmenten die allen korter zijn dan de MTU van het gebruikte fysisch netwerk. Bij ontvangst worden alle fragmenten terug samengesteld tot het originele datagram. Indien er één van de fragmenten verloren gaat, dan wordt het hele datagram als verloren beschouwd.
In een niet-gefragmenteerd datagram zijn de beide vlaggen DF en MF 0. Wanneer er tot fragmentatie besloten wordt dan worden de volgende stappen uitgevoerd:
De DF vlag wordt gelezen om na te gaan of fragmentatie toegestaan. Als deze vlag 1 is, dan wordt fragmentatie niet toegestaan en wordt het datagram weggegooid. IP verstuurt ook nog een foutmelding naar de afzender om dit te melden.
Op basis van de MTU in kwestie wordt het datagedeelte van het datagram in meerdere delen gesplitst. Alle nieuwe datadelen behalve de laatste moeten een lengte hebben die een veelvoud van 8 is.
Al deze datadelen worden opnieuw in een datagram met header geplaatst. Deze headers zijn een kopie van het origineel met deze uitzonderingen:
De MF vlag wordt 1 gemaakt in alle datagrammen behalve de laatste.
In het fragment offset veld wordt de positie van dit datadeel relatief ten opzichte van het begin van het originele datagram ingevuld. Deze offset wordt geteld in blokken van 8 bytes.
De header lengte wordt ingevuld.
De totale lengte veld van het datagram wordt ingevuld.
De header checksum wordt opnieuw uitgerekend en in het veld ingevuld.
Elk van deze nieuwe datagrams wordt verzonden via het fysische netwerk als een normaal IP datagram. IP behandelt elk IP datagram afzonderlijk en daarom kan elk van deze fragmenten een andere weg nemen in het Internet. En elk van deze datagrams kan nog eens gefragmenteerd worden als er onderweg nog een kleinere MTU voorkomt.
In de bestemmeling worden alle fragmenten terug samengesteld tot het originele datagram. De bestemmeling gaat daarom alle fragmenten met dezelfde ID verzamelen en daarna aan de hand van de fragment offset de verschillende datadelen in volgorde plaatsten en zo het originele datagram terug herstellen.
Alle fragmenten moet binnen een zekere tijd bij de bestemmeling binnenkomen. De bestemmeling bewaakt dit met behulp van een timer. Deze timer wordt gestart bij de ontvangst van het eerste fragment. Wanneer de timer afloopt en niet alle fragmenten zijn ontvangen, dan kan het originele datagram niet meer samengesteld worden en worden alle reeds ontvangen fragmenten weggegooid.
Het adresresolutieprotocol maakt het mogelijk dat het hardwareadres van een bepaalde bestemming via netwerk kan opgevraagd worden.
Wanneer de IP laag in PC1 een bericht wil versturen naar de IP laag van PC2 dan heeft PC1 het probleem dat het hardwareadres van PC2 voor hem onbekend is. Om dit adres te bekomen zal PC1 een ARP aanvraag versturen via een Ethernet broadcast. Deze ARP aanvraag bevat het IP adres van PC2. Alle PC's in het netwerk zullen deze broadcast ontvangen. Alleen PC2 herkent zijn eigen IP adres in de ARP aanvraag. PC2 reageert dan door een antwoordbericht terug naar PC1 te sturen. Hierdoor leert PC1 het hardwareadres van PC2. PC1 houdt alle vertalingen van IP adres naar hardwareadres bij in een tabel. Deze tabel noemt men de ARP cache. Deze tabel kan met
arp -a
opgevraagd worden.
Inhoudsopgave
Omdat het IP protocol geen goede aflevering garandeert is er nog een eindcontrole nodig. Deze controle vindt plaats in de transportlaag. In de transportlaag van Internet zijn er twee protocols die toegepast kunnen worden:
zonder eindcontrole
met eindcontrole
UDP is een werkwijze om gegevens naar de eindbestemming te versturen zonder bevestiging van de eindbestemming. UDP is de afkorting van User Datagram Protocol. In feite is UDP een API voor IP. De enige taak die UDP vervult is de multiplexing en demultiplexing op basis van poortnummers. De volgende tekening maakt dit duidelijk.
De reden waarom in een aantal gevallen UDP in plaats van TCP wordt gebruikt, is het feit UDP slechts een dunne laag boven IP is. Bijgevolg vraagt UDP slechts weinig overhead en gaat daarom sneller zijn dan TCP. De protocols zoals onder andere DNS, LDAP en NFS maken gebruik van UDP.
De belangrijkste velden in de header zijn de twee poortennummers.
Omdat het IP protocol geen betrouwbare overdracht kan garanderen, is er boven nog een extra laag nodig. Deze laag is TCP, een transport protocol met gegarandeerde overdracht. Deze garantie is weliswaar niet absoluut. Indien de dataoverdracht toch zou mislukken wegens een of andere fatale fout (kabelbreuk, partner bestaat niet of valt uit, ...), krijgt de afzender in elk geval een foumelding. Deze garantie betekent dus dat de afzender altijd de zekerheid krijgt of data data zeker wel of zeker niet is aangekomen.
Het TCP protocol bewaakt goede overdracht naar de bestemmeling. Wannneer een bericht in de eindbestemming aankomt, bouwt de TCP laag daar een antwoord op dat onmiddellijk terug gestuurd wordt naar de afzender. Dit bericht wordt als een bevestinging naar de afzender teruggestuurd. Hiermee weet de afzender dat zijn gegevens goed zijn aangekomen bij de eindbestemming.
Deze bevestiging wordt ook gebruikt als middel om de afzender en de eindbestemmeling te synchroniseren. De afzender gaat pas de volgende blok gegevens versturen nadat hij de bevestinging van de vorige blok gegevens heeft ontvangen.
Wie via TCP gegevens wil versturen naar een eindbestemming moet eerst een verbinding opbouwen. Hierbij speelt ook het poortnummer een belangrijke rol. Een poort is een lokaal nummer binnen een computer. Deze lokale nummers zijn noodzakelijk omdat er meerdere verbindingen tegelijkertijd kunnen bestaan. Elke zijde van de verbinding heeft een poortnummer. De poortnummers van afzender en bestemmeling worden met het bericht verstuurd.
Wanneer een bericht in een computer aankomt, wordt met behulp van de poortnummers bepaald voor welk programma binnen deze computer dit bericht bestemd is.
Elke dienst bereikbaar op een poort. De poortnummers voor alle welbekende
diensten zijn beschreven in het bestand /etc/services:
ftp 21/tcp
Telnet 23/tcp
smtp 25/tcp
http 80/tcp
Poortnummers kleiner dan 256 worden gebruikt voor de welbekende Internet diensten. Wanneer een gebruiker Netscape start, wordt hiervoor een verbinding met de bestemming opgebouwd met poort 80 (dit is de poort waarop het http protocol bereikbaar is). Als de verbinding lukt, krijgt de gebruiker ook een poortnummer toegewezen. Dit poortnummer is een getal groter dan 1024. De combinatie van poortnummer en IP adres is een unieke identificatie voor een opgebouwde verbinding met een bepaald programma. Deze combinatie wordt socket genoemd.
De bovenstaande tekening toont drie PC's die één of
twee verbindingen hebben opgebouwd met de PC informatica. Binnen de PC
informatica lopen processen die wachten tot gebruikers een verbinding
opbouwen. De processen zijn ftpd, telnetd en httpd. De poortnummers bij
deze processen zijn lager dan 256: dit zijn voor Internet gereserveerde
diensten. We zien ook dat er meerdere processen zijn met hetzelfde poortnummer. Dit
is het geval voor telnetd. De eindletter d in de naam telnetd is de afkorting
van daemon (=spook). De processen telnetd, ftpd
en httpd zijn
achtergrondprocessen die niet zichtbaar zijn voor de gebruiker op deze computer en
die de dienstaanvragen van gebruikers in Internet afhandelen.
| beginpunt | eindpunt | dienstverlener |
| 111.112.113.61 2007 | 111.112.113.90 23 | telnetd |
| 111.112.113.62 5673 | 111.112.113.90 23 | telnetd |
| 111.112.113.62 8732 | 111.112.113.90 21 | ftpd |
| 111.112.113.63 6521 | 111.112.113.90 80 | httpd |
De bovenstaande tabel toont de vijf verbindingen uit het voorbeeld. Vanuit één
computer kunnen er meer dan één verbinding op te bouwen.
Binnen de computer informatica kunnen meerdere externe computers een dienst
aanvragen. Zo zien we dat er gelijktijdig twee telnet sessies lopen. Hier komt het
aspect multitasking duidelijk naar voren.
De volgende figuur toont de positie van TCP boven IP.
We overlopen nog even de eigenschappen van TCP:
Applicaties maken gebruik van TCP om data via het netwerk naar andere computers te versturen. Vanuit deze applicaties gezien verzendt TCP een continue stroom bytes. Dit betekent dat de applicatie niet verplicht is om de data in blokken te verdelen en zo te verzenden. Het is de taak van TCP om de data te groeperen in blokken. Men noemt deze blokken TCP segmenten. TCP geeft deze blokken ter verzending door aan IP. Het is TCP die beslist hoe en wanneer de data in segmenten wordt verdeeld en doorgegeven wordt aan IP.
Zoals reeds eerder vermeld is TCP in staat om op een betrouwbare wijze de data bij de bestemmeling af te leveren. Het is de verantwoordelijkheid van TCP om na te gaan of er tijdens de verzending geen data is verloren gegaan. Deze controle is mogelijk door zogenaamde ACK meldingen te gebruiken. De ontvanger moet deze ACK meldingen terug sturen naar de afzender. Hiermee weet de afzender dat de data goed is aangekomen. Indien er binnen een zekere tijd geen ACK melding bij de afzender aankomt, dan gaat de afzender de data opnieuw versturen.
Wanneer de ontvanger de ACK melding terugstuurt naar de afzender, zit er in deze melding ook nog een getal dat bepaalt hoeveel data de afzender nog mag versturen. Door dit mechanisme wordt er vermeden dat de afzender meer data verstuurt dan dat de afzender kan ontvangen.
Hiervoor worden de poortnummers gebruikt.
De continue datastroom kan beschouwd worden als een logische connectie. De term connectie wordt hier gebruikt om aan te duiden dat er sprake is van een opbouw van de verbinding. De logische connectie wordt geidentificeerd door het IP adres en poortnummer van de afzender en de ontvanger.
Dit betekent dat er gelijktijdig een datastroom kan zijn in de twee richtingen. Dit betekent dat de beidde partners in de logische connectie gelijktijdig ontvanger en afzender zijn.
Het vensterprincipe is een speciale manier om de ACK's te versturen. We bespreken dit principe algemeen, los van TCP en daarna hoe het in TCP wordt toegepast.
Een eenvoudig transportprotocol zou het volgende principe kunnen gebruiken: zend een pakket en wacht eerst op de ACK voor het volgende pakket wordt vestuurd. Als de ACK niet binnen een zekere tijd ontvangen wordt door de afzender, dan wordt het pakket opnieuw verzonden.
Dit eenvoudig principe geeft een goede betrouwbaarheid, maar in dit geval wordt niet de volledige bandbreedte van het netwerk benut.
Beschouw nu een protocol waarbij de afzender de te verzenden pakketten groepeert zoals in de volgende figuur wordt weergegeven. Er worden de volgende regels gevolgd:
De afzender kan alle pakketten binnen het venster versturen zonder een ACK af te wachten, maar moet een timer starten voor elk van de pakketten.
De ontvanger moet met een ACK elk ontvangen pakket bevestigen. Hierbij wordt het sequentienummer van het laatst goed ontvangen pakket meegegeven.
De afzender verschuift het venster bij elke ontvangen ACK.
In dit voorbeeld kan de afzender de pakketten 1 tot en met 5 versturen zonder een ACK af te wachten.
Op het moment dat de afzender de ACK 1 (bevestiging voor pakket 1) ontvangt, wordt het venster 1 pakket naar rechts verschoven.
Vanaf dit moment mag de afzender pakket 6 verzenden.
Er zijn enkele speciale gevallen:
De afzender ontvangt geen ACK 2, en daarom blijft het venster in positie 1 staan. Vermits de ontvanger het pakket 2 niet heeft onvangen, gaat deze pakketten 3, 4 en 5 bevestigen met ACK 1 omdat pakket 1 het laatst goed ontvangen pakket is. Aan de zijde van de afzender gaat er een timeout voor pakket 2 optreden. Hierdoor gaat de afzender pakket 2 opnieuw versturen. Merk op dat de ontvangst van dit pakket een ACK 5 bij de ontvanger veroorzaakt. Dit is zo omdat alle pakketten van 1 tot en met 5 goed ontvangen zijn. Het venster bij de afzender wordt nu 4 posities opgeschoven bij de ontvangst van deze ACK 5.
De afzender ontvangt geen ACK 2, maar zal een ACK 3 ontvangen. ACK 3 is de bevestiging van alle pakketten tot en met 3 (hier hoort pakket 2 ook bij) en de afzender kan het venster verschuiven naar pakket 4.
Het hierboven beschreven vensterprincipe wordt in TCP toepast maar er zijn enkele verschillen:
Vermits TCP een bytestroom connectie levert, zijn er sequentienummers geassociëerd met iedere byte in de stroom. TCP verdeelt de continue bytestroom in TCP segmenten. Deze segmenten worden verstuurd met een zendopdracht aan IP. Het vensterprincipe wordt hier op byteniveau toegepast. Dit betekent dat in de segmenten die verstuurd worden en ACK's die ontvangen worden, er byte sequentienummers voorkomen. Verder wordt de venstergrootte uitgedrukt in bytes in plaats van pakketten.
De venstergrootte wordt bepaald door de ontvanger wannneer de connectie opgebouwd wordt en is variabel tijdens de dataoverdracht. Ieder ACK bericht bevat de venstergrootte die op dat moment geldig is voor de ontvanger.
De datastroom bij de afzender kan als volgt bekeken worden:
Bytes die verstuurd en bevestigd zijn.
Bytes die verstuurd zijn, maar nog niet bevestigd zijn.
Bytes die verstuurd kunnen worden zonder een bevestiging af te wachten.
Bytes die nog niet verstuurd mogen worden.
De volgende figuur toont het formaat van de TCP header.
Hier volgt de uitleg over de verschillende velden:
Het 16 bit poortnummer van de afzender.
Het 16 bit poortnummer van de bestemmeling.
Het sequentienummer van de eerste byte in het databereik.
Indien de ACK vlag gezet is, dan bevat dit veld het sequentienummer van de volgende byte die de ontvanger verwacht.
Het aantal 32 bit woorden in de header. Hiermee wordt bepaald waar de data in het pakket terug te vinden is.
Deze 6 bits zijn gereserveerd en moeten 0 zijn.
Deze vlag geeft aan dat het Urgent Pointer veld in dit pakket ingevuld is.
Deze vlag geeft aan dat de ontvanger een bevestiging doet.
Push functie.
Met deze vlag wordt de connectie gereset.
Met deze vlag worden de sequentienummers gesycnhronizeerd.
Deze vlag geeft aan dat er geen data meer te verwachten is van de afzender.
Dit 16 bit getal geeft de grootte van het venster aan. Dit veld is alleen maar geldig als de ACK bit gezet is.
Deze checksum maakt een controle op juistheid van de header mogelijk.
Deze pointer wijst naar de eerste data met hoge prioriteit. Dit veld is alleen maar geldig als de URG bit gezet is.
Er kunnen opties in de TCP header voorkomen. De betekenis ervan wordt hier niet besproken.
TCP verzendt de data in segmenten met een variabele lengte. De sequentienummers zijn gebaseerd op bytenummers. Ack meldingen bevatten het sequentienummer van de volgende byte die de ontvanger verwacht.
Beschouw even een segment dat verloren geraakt of onderweg verminkt wordt. In dit geval zal de ontvanger alle verder goed ontvangen segmenten bevestingen met een sequentienummer dat verwijst naar de eerste byte van het ontbrekende pakket. De afzender stopt met zenden wanneer alle bytes in het venster verstuurd zijn. Uieindelijk gebeurt er een timeout en het ontbrekende pakket wordt opnieuw verstuurd.
De volgende figuur illustreert dit met een voorbeeld waarbij de venstergrootte 1500 bytes en de segmentgrootte 500 bytes is.
Het probleem dat nu ontstaat is dat de afzender wel weet dat segment 2 verloren is, maar niets weet over segmenten 3 en 4. De afzender moet ten minste segment 2 opnieuw verzenden en zou eventueel ook nog segmenten 3 en 4 kunnen verzenden (deze 2 liggen binnen het huidige venster). Het is mogelijk dat:
Segment 3 is goed ontvangen, en van segment 4 weten we het niet.
Segment 3 is verloren gegaan en we ontvingen de ACK 1500 bij de ontvangst van segment 4.
Elke TCP implementatie is vrij om te reageren op een timeout. Ofwel wordt alleen segment 2 opnieuw verstuurd ofwel kunnen we wachten tot d timeout van segment 3 afloopt. In dat geval verliezen we natuurlijk het bandbreedte voordeel van het vensterprincipe. Een laatste mogelijkheid is dat TCP alle segmenten in het huidige venster opnieuw stuurt. Wat ook de keuze is, we verliezen hierdoor aan bandbreedte.
Voor er data kan verstuurd worden, moet de connectie tussen de 2 processen opgebouwd worden. Eén van de processen (de server) start de passieve open functie. De andere start de actieve open functie. De passieve open blijft wachten tot een ander proces probeert de connectie op te bouwen met een actieve open functie.
Er wroden drie TCP segmenten over het netwerk verstuurd:
Dit proces noemt men een driewegs handshake.
Merk op dat in de verstuurde segmenten de startwaarde van de sequentienummers van beide zijden voorkomt. Deze sequentienummers moeten in de daaropvolgende dataoverdracht gebruikt worden.
Een connectie wordt gesloten door een TCP segment met een FIN vlag op 1 gezet te versturen. Vermits de connectie full-duplex is, wordt met dit FIN segment de connectie slechts in één richting gesloten. Het andere proces verzendt nu nog de overblijvende data en zendt dan ook een segment met FIN gezet. De connectie wordt verwijderd als de datastromen in beide richtingen zijn gesloten.
De socket-interface is een, oorspronkelijk alleen in C beschikbare, bibliotheek met hierin een reeks functies die het mogelijk maken om via TCP te communiceren met processen op andere computers. De programmeertaal Java heeft een eigen implementatie van de socket-interface die een stuk eenvoudiger is dan de C versie. We tonen 3 voorbeelden in Java.
Het eerste voorbeeld bestaat uit twee programma's SimpleClient en SimpleServer.
Eerste moet de server gestart worden en dan de client. De client maakt eerst een connectie met de server.
De server stuurt dan een string naar de client en daarna antwoordt de client met het woord "einde".
Tot slot verbreken de client en de server de connectie en stoppen.
Merk op dat voor de in- en uitvoer dezelfde methoden worden gebruikt als voor in- en uitvoer naar het scherm.
Dit is de listing van de client.
import java.io.*;
import java.net.*;
public class SimpleClient
{
public static void main(String[] args)
{
Socket client;
BufferedReader in;
PrintWriter out;
try
{
// maak een socket object
// localhost: binnen de eigen pc
// 5000: dit is het poortnummer op de server
client = new Socket("localhost", 5000); // vervang localhost door een IP adres
System.out.println("verbinding gemaakt");
// haal de in- en uitvoerkanalen op
out = new PrintWriter(client.getOutputStream() );
in = new BufferedReader(new InputStreamReader(client.getInputStream()) );
// lees een string van de server
String data = in.readLine();
System.out.println("Server zegt:" + data);
// schrijf een string naar de server
out.println("einde\n");
out.flush();
// sluit de verbinding
in.close();
out.close();
}
catch (IOException e)
{
}
System.out.println("einde van de client");
}
}
Dit is de listing van de server.
import java.io.*;
import java.net.*;
public class SimpleServer
{
public static void main(String[] args)
{
Socket channel;
BufferedReader in;
PrintWriter out;
ServerSocket server;
try
{
// maak een server socket object
server = new ServerSocket(5000);
// wacht op een binnenkomende verbinding
System.out.println("wacht op een verbindingsaanvraag");
channel = server.accept();
// haal in- en uitvoerkanalen op
out = new PrintWriter(channel.getOutputStream() );
in = new BufferedReader(new InputStreamReader(channel.getInputStream()) );
System.out.println("verbindingsaanvraag aangekomen");
// schrijf een tekst naar de client
out.println("Wat kan ik voor je doen?\n");
out.flush();
// lees een tekst van de client
String data = in.readLine();
System.out.println("Client zegt:" + data);
}
catch (IOException e)
{
}
}
}
In dit voorbeeld is er sprake van een server die nooit stopt en in staat
is om meerdere connectieaanvragen na elkaar te beantwoorden.
Dit programma kan getest worden samen met de SimpleClient voorbeeld van hierboven.
import java.io.*;
import java.net.*;
public class HttpMirror
{
public static void main(String[] args)
{
int port = 5000;
try
{
// maak een server socket object
ServerSocket server = new ServerSocket(port);
for (;;) // zonder te stoppen
{
// wacht op een binnenkomende verbinding
System.out.println("wacht op een verbindingsaanvraag");
Socket channel = server.accept();
// haal in- en uitvoerkanalen op
PrintWriter out = new PrintWriter(channel.getOutputStream() );
BufferedReader in = new BufferedReader(new InputStreamReader(channel.getInputStream()) );
System.out.println("verbindingsaanvraag aangekomen");
// schrijf een tekst naar de client
// dit is dezelfde tekst die een webserver naar een browser verstuurd.
out.println("HTTP/1.0 200 "); // nummer http protocol
out.println("Content-Type: text/plain"); // mime type is gewone tekst
out.println();
out.flush();
// lees de aanvraag van de client en
// stuur terug naar de client
String line;
while ((line = in.readLine()) != null) // zolang geen eof
{
if (line.length() == 0)
break;
out.println(line);
}
out.close(); // verbreek verbinding
in.close();
channel.close();
}
}
catch (IOException e)
{
}
}
}
Dit voorbeeld doet hetzelfde als het vorige voorbeeld, maar kan tegelijkertijd meerdere connectie parallel verwerken. Om dit mogelijk te maken wordt voor elke connectie een aparte thread aangemaakt.
import java.io.*;
import java.net.*;
public class HttpMirror_th implements Runnable
{
private Socket channel;
public HttpMirror_th()
{
}
public void doe()
{
int port = 5000;
try
{
// maak een server socket object
ServerSocket server = new ServerSocket(port);
for (;;)
{
// wacht op een binnenkomende verbinding
System.out.println("wacht op een verbindingsaanvraag");
channel = server.accept();
// start een thread voor deze aanvraag
Thread th = new Thread(this);
th.start();
}
}
catch (IOException e)
{
}
}
// Dit is de run methode van de thread
public void run()
{
try
{
// haal in- en uitvoerkanalen op
PrintWriter out = new PrintWriter(channel.getOutputStream() );
BufferedReader in = new BufferedReader(new InputStreamReader(channel.getInputStream()) );
System.out.println("verbindingsaanvraag aangekomen");
// schrijf een tekst naar de client
out.println("HTTP/1.0 200 ");
out.println("Content-Type: text/plain");
out.println();
out.flush();
String line;
while ((line = in.readLine()) != null)
{
if (line.length() == 0)
break;
out.println(line);
}
out.close();
in.close();
}
catch (IOException e)
{
}
// einde van de thread
}
public static void main(String[] args)
{
HttpMirror_th m = new HttpMirror_th();
m.doe();
}
}
In dit voorbeeld is er sprake van een proxy server. Dit is een server waarmee een client een connectie opbouwen. De server maakt dan een nieuwe connectie naar de eindbestemming.
import java.io.*;
import java.net.*;
public class SimpleProxyServer
{
static public void runServer(String host, int remoteport, int localport)
throws IOException
{
// maak een server socket object
ServerSocket ss = new ServerSocket(localport);
final byte[] request = new byte[1024];
byte[] reply = new byte[4096];
while (true)
{
Socket client = null, server = null;
try
{
// wacht op een binnenkomende verbinding
client = ss.accept();
final InputStream from_client = client.getInputStream();
OutputStream to_client = client.getOutputStream();
try
{
server = new Socket(host, remoteport);
}
catch(IOException e)
{
}
final InputStream from_server = server.getInputStream();
final OutputStream to_server = server.getOutputStream();
Thread th = new Thread()
{
public void run()
{
int bytes_read;
try
{
while ((bytes_read = from_client.read(request)) != -1)
{
to_server.write( request, 0, bytes_read);
to_server.flush();
}
}
catch (IOException e)
{
}
try
{
to_server.close();
}
catch( IOException e)
{
}
}
};
th.start();
int bytes_read;
try
{
while ((bytes_read = from_server.read(reply)) != -1)
{
to_client.write( reply, 0, bytes_read);
to_client.flush();
}
}
catch (IOException e)
{
}
}
catch (IOException e)
{
}
}
}
public static void main(String[] args)
{
try
{
String host = "127.0.0.1";
int remoteport = 3000;
int localport = 3030;
runServer(host, remoteport, localport);
}
catch (Exception e)
{
}
}
}
We overlopen de verschillende toestellen die in netwerken worden toegepast.
HubEen hub verzamelt verschillende punt tot punt verbindingen met elkaar. Een hub is noodzakelijk bij het gebruik van UTP kabel, omdat UTP slechts 2 poorten met elkaar verbindt. De hub laat alle berichten ongewijzigd door. Dit betekent dat van alle PC's die met een hub gekoppeld zijn, er slechts één mag zenden. Een hub laat dus botsingen toe. Men past hubs toe wegens de UTP kabel. Er is geen andere manier om PC's via UTP te koppelen dan met een hub.
BridgeEen bridge heeft meer intelligentie. De werking ervan situeert zich op de datalink laag in het OSI model. Een bridge heeft 2 of meerdere Ethernetpoorten. Zoals een hub kan een bridge alle berichten doorlaten, maar niet alle berichten worden doorgelaten. Hierdoor wordt vermeden dat onnodig berichten naar een Ethernetsegment verstuurd worden. Bij de ontvangst van een bericht wordt dit bericht alleen maar doorgelaten indien de bestemmeling van het bericht aan een andere poort dan die van ontvangst gekoppeld is. Met een bridge is het dus mogelijk om verschillende Ethernetsegmenten met elkaar te koppelen en ervoor te zorgen dat alleen het nodzakelijke verkeer van het ene Ethernetsegment naar het andere Ethernetsegment stroomt. De PC's die via een bridge communiceren merken hier niets van. Een bridge werkt transparant gezien vanuit de PC's. De volgende tekening toont een voorbeeld van een bridge met twee poorten.
De bridge houdt een tabel bij die aangeeft welk hardwareadres (Ethernetadres) bij welke poort hoort. Met deze tabel weet de bridge aan welke poort elke PC gekoppeld is. Deze tabel wordt dynamisch bijgewerkt door de bridge zelf. Bij het inschakelen van de bridge is de tabel leeg en start de leerfaze. Dit betekent dat de bridge alle ontvangen berichten analyseert en hieruit het afzender adres haalt. Tegelijkertijd wordt elk ontvangen bericht op de andere poort verstuurd. De afzenderadressen worden in de tabel bij de corresponderende poort ingevuld. Zo leert de bridge na een tijdje waar welke PC zich bevindt. Na de leerfaze worden berichten doorgelaten door de bridge indien de afzender- en de bestemmelingsPC aan verschillende poorten gekoppeld zijn. Indien PC1 in de figuur een bericht verstuurt naar PC4, dan wordt dit door de bridge doorgelaten. Indien PC2 een bericht naar PC1 verstuurt, dan wordt dit niet door de bridge doorgelaten. Broadcast vormen een uitzondering op deze regel: ze worden altijd door de bridge doorgelaten.Het voordeel van een bridge is dat er botsingsgebieden ontstaan. Wanneer er hoofdzakelijk lokaal verkeer is, dan loopt het verkeer in de botsingsgebieden parallel zonder dat het elkaar stoort met botsingen.
SwitchEen switch is een verdere evolutie van de bridge. Ook hier is is het apparaat transparant voor de PC's. Dit wil zeggen dat twee PC die met elkaar communiceren niet kunnen herkennen dat er een switch tussen hun beide staat. Switchen hebben meestal meerdere poorten en zijn in staat om tegelijkertijd meerdere berichten door te laten.
De technologie en de opbouw van een switch vertoont de verwantschap met die van de telefooncentrales. Deze laatsten zijn geoptimaliseerd om snel en zonder veel tussenkomst in software een digitale bitstroom (gedigitaliseerde spraak in dit geval) door te schakelen van de ene poort naar de andere poort zonder veel vertraging. De parallele werking van een switch kan door de volgende figuur verduidelijkt worden.
De bovenstaande tekening mag niet beschouwd worden als de interne opbouw van een switch. Het dient enkel om de parallelle werking te begrijpen.Bij geavanceerde switchen is het mogelijk om meerdere switchen met elkaar te koppelen via een snelle verbinding, dikwijls glasvezel. Hierdoor is het mogelijk om netwerken op te bouwen die meerdere gebouwen overspannen. Met glasvezel is het immers mogelijk om grotere afstanden te overbruggen dan met Ethernet. De switchen onderling kunnen met elkaar communiceren om gegevens over de gekoppelde PC's uit te wisselen.Meestal worden de PC's niet rechtstreeks met de switch gekoppeld, maar via een hub.In de volgende figuur zijn drie switchen voorgesteld: switch 1, switch2 en switch 3. Glasvezel verbindingen tussen switch 1 - switch2 en switch 2-switch3 maken verkeer tussen alle switchen mogelijk. Hierdoor kan elke PC met elke PC een connectie maken. Elke switch heeft drie poorten (in praktijk is dit altijd een veelvoud van 8) waaraan telkens een hub is gekoppeld. Aan elke hub zijn telkens een aantal PC's gekoppeld.Zoals een bridge is ook een switch in staat om de Ethernetadressen van de aangesloten PC's te leren. Bij het opstarten heeft de switch lege tabellen. Naarmate het verkeer in het netwerk opgang komt, worden de tabellen met Ethernetadressen gevuld.
Na een tijdje zien de tabel van switch 1 er als volgt uit:
| Ethernetadres | Poort |
| 1 | 1 |
| 2 | 1 |
| 3 | 1 |
| 4 | 2 |
| 5 | 2 |
| 6 | 2 |
| 7 | 3 |
| 8 | 3 |
| 9 | 3 |
Bovendien kennen switchen het principe van de virtuele netwerken. Hierdoor is het mogelijk om de connecties tussen PC's te beperken afhankelijk van hun Ethernetadres of van het poortnummer waarmee ze met de switch zijn verbonden. Elke PC kan op basis van zijn Ethernetadres of het switch poortnummer aan een virtueel netwerk toegewezen worden . De tabel die deze toewijzingen bijhoudt wordt over alle switchen verspreid. Dit mechanisme laat toe om verschillende afdelingen in een bedrijf van elkaar te scheiden zodat het gemakkelijker is om gegevens binnen een afdeling te houden. De virtuelenetwerktabel kan er als volgt uitzien:
| Switch | Poort | Virtueel Netwerk |
| 1 | 1 | 1 |
| 1 | 2 | 1 |
| 1 | 3 | 2 |
| 2 | 1 | 3 |
| 2 | 2 | 1 |
| 2 | 3 | 2 |
| 3 | 1 | 2 |
| 3 | 2 | 3 |
| 3 | 3 | 1 |
Uit de tabel wordt duidelijk dat er drie virtuele netwerken zijn: vnet 1, vnet 2 en vnet3. De LAN segmenten A, B, E en I behoren tot vnet 1, C, F, G tot vnet 2 en D, H tot vnet 3.
Een router laat geen broadcast berichten door. Hierdoor blijven de broadcast berichten in het lokale Ethernetsegment. Het voordeel hiervan is dat de overige segmenten met dit verkeer belast worden. Het gebruik van een router betekent wel dat alle PC op de juiste manier moeten geconfigureerd worden om via de router te communiceren. In tegenstelling tot bridge en switch is de router niet transparant voor de PC.
De globale adressering binnen Internet gebeurt op basis van IP adressen. Nu is zo een IP adres niet gemakkelijk te onthouden. Daarom heeft men een systeem van naamgeving voor IP adressen bedacht binnen Internet. Dit wordt het Domein Naam Systeem genoemd, afgekort tot DNS. Hier zijn enkele voorbeelden van domeinnamen:
iwt.khlim.be.
www.sun.com.
Een domeinnaam bestaat uit verschillende delen gescheiden met een punt. Elke domeinnaam komt precies overeen met één IP adres. De omzetting van domeinnaam naar IP adres en omgekeerd wordt uitgevoerd door een vertalingsdient die loopt op bepaalde computers binnen Internet. Bij het configureren van een computer voor Internet moet het IP adres van de vertalingsdient ingevuld worden.
Het hele systeem van naamgeving is hierarchisch opgebouwd. Dit betekent dat men geen centrale lijst van IP adressen-domeinnamen bijhoudt, maar dat de vertaling gedecentraliseerd is. De volgende figuur geeft de hierarchie van DNS weer. Om de plaats van een domeinnaam binnen de hierarchie te vinden, moeten we de domainnaam van rechts naar links lezen. De hierarchie start bij de punt. Daaronder vallen een aantal hoofdcategories waaronder een categorie voor elk van de landen in de wereld. Commerciele organisaties vinden we terug in de categorie com. Voor elk subdomein zijn er één of meerdere vertalingsdiensten. Als een vertalingsdienst een aanvraag krijgt waarvoor het geen antwoord kent, wordt de aanvraag doorverwezen naar een andere vertalingsdienst. Zo kan men een eigen vertalingsdienst starten voor de vertaling van alle domeinnamen in Belgie. Iemand uit het buitenland moet bij deze dienst alle namen voor Belgie laten vertalen. Door de verdeling van de vertalingsopdrachten over verschillende computers is de reactietijd beter en is de naamgeving onderhoudbaar.
Inhoudsopgave
De toepassingslaag wordt ingevuld met de dienst die door de gebruiker gevraagd wordt. Enkele diensten worden kort besproken:
Met het File Transfer Protocol kunnen bestanden van en naar een andere computer gekopieerd worden. Bij het opbouwen van een verbinding moet de gebruiker een naam opgeven. Als we anonymous als naam gebruiken krijgen we steeds toegang. Als passwoor geven we dan onze eigen Internetnaam op. Bij deze wijze van aanmonsteren krijgen we alleen maar leesrecht.
login:anonymous password:jjansen@iwt.khlim.be
Als we met een andere naam aanmonsteren, dan moet deze naam bekend zijn bij de betrokken computer en moeten we het verwacht paswoord correct ingeven.
Enkele commando's die we bij ftp kunnen gebruiken zijn:
ls directory opvragen
cd naar een
andere
directory gaan
lcd naar
een andere
directory
gaan op
eigen PC
get een
bestand naar
eigen PC kopieren
put een
bestand van
eigen PC
naar andere
computer kopieren
Met telnet is het mogelijk om in tekstmodus aan te mosteren bij een andere computers an daar proramma's te starten.
Dit zijn de namen van de twee protocols om post te versturen. SMTP wordt gebruikt om post uit te wisselen tussen verschillende computers die fungeren als postkantoor. Met POP3 kan een gebruiker post afhalen van een postkantoorcomputer naar zijn eigen computer. Deze gebruiker moet wel in het postkantoor geregistreerd zijn met een aanmonsternaam.