Communicatie tussen mensen is soms best lastig. Het is belangrijk om duidelijk te zijn maar tegelijk respect te hebben voor de ander en de omgangsvormen die binnen een bepaalde cultuur heersen. Bovendien is het zinvol om vast te stellen of de boodschap goed is overgekomen.
Bij communicatie tussen computers of onderdelen daarvan zijn eigenlijk dezelfde dingen belangrijk: duidelijkheid en respect voor cultuur, al hebben die begrippen een iets andere betekenis dan we gewend zijn.
Het is noodzakelijk om duidelijk te zijn. Stel je voor dat de ene computer
tegen de andere zegt
"Ik heb zin om een paar bytes van jouw harddisk in mijn geheugen te
laden"
of het besturingssysteem vraagt aan een proces "Vind je het
vervelend om even te wachten ?"
In het eerste geval zal er waarschijnlijk weinig gebeuren want de ontvanger heeft geen opdracht gekregen om iets te doen. In het tweede geval krijg je als het meezit het antwoord "NEE" maar daar houdt het dan ook weer mee op.
Duidelijke opdrachten zouden zijn: "Stuur mij de file /home/gebruiker/Desktop/liedje.mp3" en "Stop uitvoering en wacht tot je weer aan de beurt bent".
Ook moet de zender de omgangsvormen (in computertermen zijn dat protocollen) kennen om de boodschap juist te kunnen versturen.
Parallel en serieel
Afhankelijk van diverse ontwerpkeuzes in zowel hardware als software worden berichten bit voor bit of met meerdere bits tegelijk verstuurd. Bit voor bit heet serieel:Meerdere bits tegelijk heet parallel:
Protocollen
In een communicatieprotocol is vastgelegd hoe berichten verstuurd worden en hoe ze geïnterpreteerd moeten worden. Het is belangrijk dat de zender en de ontvanger hetzelfde protocol gebruiken, anders zullen ze elkaar niet begrijpen.
Een bericht zou er bijvoorbeeld zo uit kunnen zien:
Dit is een schematische weergave. In werkelijkheid bestaat een bericht uit
een aantal bits, meestal gegroepeerd in bytes of grotere groepjes
van bijvoorbeeld 32 bits.
Als je berichten over een netwerk wilt versturen zul je in veel gevallen willen aangeven aan wie het bericht gericht is. Vaak wil de ontvanger ook weten van wie het bericht afkomstig is en dat kun je ook in het bericht zetten.
Ethernet en Internet
Ethernet is iets anders dan Internet. Ethernet duidt op het netwerk waarmee computers met elkaar verbonden zijn in een Local Area Network (LAN), bijvoorbeeld binnen één gebouw, en heeft dan vooral betrekking op de bekabeling en andere hardware.
Internet heeft meerdere betekenissen. Er is "het internet", je kunt spreken over "een internet" en dan is er nog zoiets als het "internet protocol" (IP). Het internet ken je wel. Het internet protocol moet even toegelicht worden.
TCP/IP
Als je twee computers gegevens wilt laten uitwisselen zou je in theorie genoeg hebben aan één directe verbinding waarover je bits en bytes kunt verzenden zonder aan te geven waar ze vandaan komen of waar ze naartoe moeten. Wil je echter meer dan twee computers in een netwerk laten communiceren dan is het handig als je kunt aangeven waar berichtjes naartoe moeten of zelfs waar ze vandaan komen. Dat kan bijvoorbeeld met een "packet switched network".
In een packet switched network kunnen alle aangesloten systemen pakketjes
informatie het netwerk in sturen. Door in elk pakketje aan te geven voor
welk systeem het bestemd is komt het op de goede plek doordat het systeem
waarvoor het bestemd is in het pakketje zijn eigen adres herkent. De andere
systemen kunnen het pakketje gewoon negeren.
Denk bij een pakketje aan een klein aantal bytes, bijvoorbeeld 64 bytes.
In een packet switched network (eigenlijk zo'n beetje alle netwerken die wij
gebruiken) wordt alle communicatie verstuurd in dit soort kleine pakketjes.
Of je nou een mailtje stuurt, een Youtube-filmpje kijkt of een MAX-MSP
patch bestuurt via OSC, realiseer je dan dat dit geen aaneengesloten stroom
bytes is maar dat die bestaat uit kleine pakketjes.
Het internetprotocol (IP) is een van de protocollen die gebruikt worden voor communicatie over een netwerk. Het is een protocol op een vrij laag niveau, dat wil zeggen dicht bij de hardware, en beschrijft hoe bits in pakketjes (IP-packets) verstuurd worden.
Boven op IP vinden we TCP en UDP.
TCP/IP is een protocol voor verbindingen die
langere tijd bestaan. Of er nou gegevens uitgewisseld worden of niet, de
verbinding blijft gewoon open staan. TCP zorgt voor foutvrije overdracht,
maar is daardoor wel wat trager dan UDP/IP. Verkeer over een TCP-verbinding
kan twee kanten op lopen: de server en client kunnen tegen elkaar praten.
UDP wordt vooral gebruikt voor het met hoge snelheid versturen van
pakketjes over een niet-permanente verbinding. Je kunt je voorstellen dat
de zender pakketjes het netwerk in stuurt zonder te weten of er een
ontvanger is die ze opvangt. Het is dan ook niet primair bedoeld voor
tweerichtingsverkeer.
De UDP-pakketjes kunnen in willekeurige volgorde
bij een ontvanger aankomen en er kunnen pakketjes ontbreken. UDP biedt
weinig mogelijkheden om dergelijke problemen op te lossen, maar is wel
snel.
TCP zorgt dat zender en ontvanger eerst een verbinding opbouwen en dat de
ontvanger alle pakketjes krijgt en in de juiste volgorde. Hierdoor wordt
het wel iets trager dan UDP.
Nog even over die foutvrije overdracht omdat ik de vraag kreeg wat er
allemaal fout kan gaan. Nou... heel wat.
Een voorbeeld: stel je voor dat je met iemand in
gesprek bent. Uit beleefdheid praat je niet door elkaar heen, dus je laat
de ander netjes uitpraten. Maar wanneer weet je dat die ander echt
uitgepraat is? Als hij/zij 1 seconde niet gesproken heeft? Of 5 seconden?
Hoe lang moet je wachten?
Laten we zeggen dat je 1 seconde wacht en dan met je antwoord begint. In
die ene seconde kan de ander ook besluiten om opnieuw te gaan praten. Je
praat dan alsnog door elkaar heen. Uit beleefdheid zal minstens een van
beiden ophouden met praten, maar je bent wel de eerste paar woorden
kwijtgeraakt. Wij mensen kunnen dan meestal nog wel begrijpen waar de zin
over gaat, maar een computerprogramma heeft de hele zin nodig, dus ook de
eerste woorden. Je wilt niet de eerste 64 letters van een mailtje
kwijtraken.
In een computernetwerk speelt hetzelfde: twee computers of programma's die
het netwerk willen gebruiken wachten tot ze niks meer op het netwerk
'horen' voordat ze beginnen te 'praten'. Als er eentje begint met een pakketje
te versturen stopt hij direct als blijkt dat een ander ook tegelijk
begonnen is. Ze wachten dan een random tijd voordat ze opnieuw beginnen.
OSC is een voorbeeld van communicatie over UDP: voor het snel versturen van grote hoeveelheden data en als er af en toe een bit omvalt of een packet te laat of helemaal niet aankomt is dat niet erg.
Netwerk-adressering
Adressen in een IP-netwerk worden IP-adressen genoemd. Die heb je vast wel eens gezien: 192.87.219.66 bijvoorbeeld. Zo'n IP-adres is een unieke aanduiding van een computer in een netwerk en correspondeert met een unieke combinatie van naam en domein. Een paar voorbeelden:www.hku.nl
De computer heet www, binnen het domein hku.nl en het IP-adres is 192.87.219.76kmt.hku.nl
De computer heet kmt, binnen het domein hku.nl en het IP-adres is 192.87.219.66dwdd.vara.nl
Dit is een alias voor redir.omroep.nl. De computer heet redir, werkt binnen het domein omroep.nl en het IP-adres is 145.58.30.3Er zijn een heleboel speciale IP-adressen die je niet zomaar kunt gebruiken. Welke dat precies zijn is niet in twee regels uit te leggen en niet voor iedereen belangrijk om precies te weten. Als je meer wilt weten over IP-adressen, netmask, domeinen, IPV4, IPV6 en gereserveerde adressen dan zou je eens bij Wikipedia kunnen beginnen.
Port
Behalve een IP-adres heb je meestal een poortnummer of poort-adres nodig omdat je ook moet aangeven met welk programma op de computer achter het IP adres je wilt communiceren. Een programma kan aangeven naar welke poort het luistert voor binnenkomende aanvragen voor communicatie.Unicast, multicast, broadcast
Als je op het internet een webpagina opvraagt of met FTP een file op een andere computer zet is er sprake van een "één op één" verbinding. Elk pakketje data wordt van een computer naar één andere computer verstuurd. Dit noemen we unicast.
Als een computer op het netwerk een bericht wil sturen naar meerdere computers op dat netwerk kan hij dat doen met een "broadcast" message. Dat is efficient omdat het bericht maar één keer verstuurd wordt en niet, zoals bij unicast, per computer apart. Broadcast is een nogal hardhandige manier van communiceren waar ook echt ALLE computers op het netwerk naar moeten luisteren.
Soms wil je gegevens versturen je naar een aantal computers, maar niet allemaal. In dat geval is "multicast" heel efficient, omdat het bericht maar één keer verstuurd wordt en ontvangers die op dat type bericht geabonneerd zijn kunnen het ontvangen. Dit zie je bijvoorbeeld bij internet-radio.
Hub, switch, router en modem
In ethernet-netwerken kom je allerlei kastjes tegen die allemaal op elkaar lijken en ook soortgelijke dingen doen, maar niet precies dezelfde. Hoe zit dat ?
Modem
Laten we beginnen bij de modem. De naam modem is een afkorting van MOdulator/DEModulator. Een modem wordt meestal gebruikt om digitale signalen over een analoog communicatiemedium te versturen, zoals bijvoorbeeld een telefoonlijn. Zo kunnen twee computers via een analoge lijn gegevens uitwisselen:Hub
Een hub verbindt meerdere systemen (computers) met elkaar, in principe alleen digitaal. Daarbij heeft de hub zelf geen idee wat die systemen met elkaar uitwisselen of welke adressen ze hebben. Een hub heeft een aantal aansluitpunten (poorten) en elk aangesloten systeem ziet alle data die via elke poort naar binnen of naar buiten gaat.Switch
Een switch heeft net als een hub een aantal poorten en verbindt systemen met elkaar, maar op een iets intelligentere manier. Een switch analyseert namelijk de data die voorbijkomen en kan op basis van adressen van zenders en ontvangers het dataverkeer efficienter regelen dan een hub dat doet.Router
Een router gaat nog een stapje verder dan een switch en kan het netwerk nog efficienter en zelfs veiliger maken met behulp van een firewall.Een compleet netwerk
Bekende protocollen
Enkele veel gebruikte protocollen :- http
- ftp
- www
- SMTP
- ssh
- scp
- pop
- ping
- telnet
HTTP, HTTPS
Deze protocollen ken je van de manier waarop web-pagina's worden aangeduid.
HTTP staat voor HyperText Transfer Protocol en beschrijft de manier waarop
je met een webserver communiceert.
Een HTTP-request bestaat uit het request-type, de URL, headers en eventueel een inhoud. De twee meest gebruikte requests zijn GET om data op te vragen en POST om data naar de server te versturen.
Probeer het volgende maar maar eens uit (vanuit de terminal):
telnet kmtweb.hku.nl 80
Dit maakt verbinding met poort 80 van kmtweb.hku.nl. Achter die poort
wacht de webserver op binnenkomende verzoeken. Als de verbinding is
opgebouwd type je het volgende:
GET http://kmtweb.hku.nl/clk/show
HTTPS is de beveiligde variant van HTTP. Deze is vooral nuttig bij het versturen van privegegevens zoals bankgegevens of je credit card nummer.