Communicatie

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.76

kmt.hku.nl

De computer heet kmt, binnen het domein hku.nl en het IP-adres is 192.87.219.66

dwdd.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.3

Er 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, 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.

FTP

File Transfer Protocol (FTP) is een protocol voor het versturen van files. Het handige van FTP is dat het vele typen systemen voor de gebruiker toch hetzelfde werkt. Het verbergt de specifieke eigenschappen van systemen.

SCP

Secure Copy is een beveiligde manier om files tussen computers uit te wisselen.

ping

Met ping kun je vaststellen of een computer in het netwerk aanwezig is. Dat wil zeggen... als die computer toestaat dat je hem 'pingt'. Niet iedereen wil zichtbaar zijn. Ping is afgeleid van het geluid van de sonar van onderzeeboten.

Simple Mail Transfer Protocol (SMTP)

SMTP is een tekst-protocol voor het versturen van e-mail. Dit is nog steeds het protocol om e-mail te versturen en het kan eigenlijk alleen maar tekst versturen en geen binaire files. Dat je tegenwoordig toch plaatjes, muziek etc. via e-mail kunt versturen komt omdat die binaire files met een MIME-codering omgezet worden in tekst.