RIOT
Remote Internet Operated Terminal . Gebruikers handleiding v1.0
2) Computer netwerken. Daar we in de volgende hoofdstukken gaan hebben over men netwerk-enabled toestellen ontwerpt, is het hier op zijn plaats iets te vertellen over netwerken. Dit is echter geen complete cursus over hoe men computernetwerken onwerpt, implementeert en onderhoudt! De bedoeling is echter om voldoende termen en principes uit te leggen om de rest van deze uiteenzetting te kunnen begrijpen. Doorheen deze tekst zullen we het hebben over 10base-T Ethernet netwerken die gebruik maken van TCP/IP protocollen.
Netwerk Hardware. Wat is een computernetwerk? Een netwerk is een verzameling (twee of meerdere) computers die met elkaar verbonden worden om gegevens en recources (zoals vb. printers) te delen met elkaar. Netwerken worden meestal gecatalogeerd aan de hand van hun geografische grootte. Een local area network (een LAN) is een groep computers die een gemeenschappelijke communicatielijn delen en die typisch op een kleine oppervlakte gelocaliseerd zijn, zoals in een kantoorruimte, een afdeling van een bedrijf, of een school of een woning… Een LAN kan enkele (vb een drietal ) computers met elkaar verbinden in een thuisomgeving, of enkele honderden in een bedrijf. Een metropolian area network (een MAN) is een netwerk dat computers en LAN's met elkaar verbindt die verspreid liggen over een gebied van enkele kilometers, zoals gebouwen van eenzelfde bedrijf of universiteit in een stad. Een wide area network (een WAN) is een netwerk dat bestaat uit verschillende MAN's en LAN's die geografisch zeer verspreid liggen (in een land of wereldwijd). Het Internet (soms het WEB of het NET genoemd) is een wereldwijd netwerk dat bestaat uit verschillende computernetwerken (LAN's, MAN's en WAN's) en dat toegankelijk is voor honderden miljoenen gebruikers.
Het simpelste netwerk. Wanner we twee computers met elkaar verbinden hebben we het meest simpele netwerk opgebouwd zoals aangegeven wordt in figuur 2.1. De computers die in een netwerk dikwijls hosts of nodes worden genoemd worden met elkaar verbonden langs een network interface card (NIC). Deze netwerk interface is een kaart of een chip op het moederbord die de nodige logica bevat om data te ontvangen van en te verzenden naar een andere computer. Er zijn verschillende manieren om computers met elkaar te verbinden maar de meest gebruikte manier is via een Ethernet verbinding. 192.168.0.100
192.168.0.110
NIC
NIC Netwerk kabel
Computer 1
Computer 2
Figuur 2.1 Het simpelste netwerk
Versie 1.0
3
[dp] D. Pauwels
RIOT
Remote Internet Operated Terminal . Gebruikers handleiding v1.0
Ethernet is tegenwoordig de meest gebruikte LAN technologie. Het wordt volledig beschreven in de IEEE standaard 802.3. 10Base2 Ook bekend als Thin Ethernet, Cheapernet of gewoon als BNC netwerk. Alle deelnemers worden hier parallel op een coaxiale kabel geschakeld, die aan beide zijden wordt afgesloten op zijn karakteristieke impedantie van 50 Ω. 10BaseT Het meest geïnstalleerde Ethernet systeem wordt 10BASE-T genoemd en voorziet in datasnelheden tot 10Mbps, vandaar de "10". "BASE" staat voor baseband signalisatie (geen breedband, geen modulatie), wat aangeeft dat er maar één Ethernet signaal over de kabel wordt overgedragen. De "T" geeft aan dat het over twisted pair bekabeling gaat. De reden waarom we dit aangeven is omdat andere types Ethernet ook meer populair beginnen te worden, zoals 100BASE-T (100Mbps) en 100BASE-F ("F" van Fiber). Iets wat we ook nog moeten vermelden is dat de twee computers in dit simpel netwerkje met elkaar verbonden zijn met wat we een "crossover" kabel noemen . Dit is een speciaal type Ethernet kabel die wordt gebruikt om twee computers met elkaar te verbinden door hun respectievelijke zend- en ontvangst- signaaldraden gekruisd door te verbinden. Het laat toe dat de verzonden data van één computer wordt verbonden met de ontvangs-pin van de andere computer. Nog een belangrijk punt: elke node in het netwerk heeft een uniek adres, het netwerk adres. Dit is een minder belangrijk gegeven bij het verbinden van twee computers, maar wanneer het netwerk wordt uitgebreid met verschillende LAN's en WAN's wordt dit heel belangrijk. We komen hierop later uitvoerig terug.
Een klein netwerkje. Meerdere computers met elkaar verbinden tot een klein netwerkje (thuis of in een kantoorruimte) is bijna even eenvoudig als het vorige twee-computer voorbeeld. Het vraagt enkel een paar extra componenten zoals in figuur 2.2 wordt aangegeven. Het eerste wat opvalt is het gebruik van een netwerk-hub, meestal gewoon hub genoemd. Iedere deelnemer wordt hier via een twisted pair kabel verbonden met een Hub (sterverdeler), deze Hub zal alle datapaketten naar alle andere aangesloten deelnemers doorsturen. Een 10BaseT systeem werkt fysisch als een stervormig netwerk, maar logisch net zoals 10Base2, dus als een busstructuur. De hub vervult dus ook de crossover functie die door de kabel werd gemaakt in het vorige voorbeeld. Dit netwerk is dus opgebouwd met "straight through" netwerkkabels die niet gekruisd zijn. De draden op pinnen 1 tot 8 worden verbonden met pinnen 1 tot 8 aan het andere uiteinde van de kabel zonder kruising. Hubs worden met elkaar doorverbonden aan de hand van een uplink port. Een uplink port is een port waar de bedrading intern niet is gekruist zodat hij hierlangs kan verbonden worden met een andere hub om het aantal nodes in het netwerk te vergroten. Als de hub niet beschikt over een uplink port, dan moeten de hubs doorverbonden worden met elkaar via een crossover kabel. Ongeacht welke fysische structuur gebruikt wordt, de logische opbouw van de gebruikte datapaketten blijft steeds dezelfde. Alle netwerkdeelnemers ontvangen alle datapaketten, ook diegenen die voor andere gebruikers zijn bestemd en ze verwerken slechts de paketten die aan hen geadresseerd zijn!
Versie 1.0
4
[dp] D. Pauwels
RIOT
Remote Internet Operated Terminal . Gebruikers handleiding v1.0 Computer 5
Computer 1
NIC
NIC 192.168.0.100
Computer 6
192.168.0.121 NIC
HUB HUB
Computer 2
192.168.0.134
NIC
192.168.0.101 Computer 4
Computer 3 NIC
NIC
192.168.0.102
192.168.0.124
Figuur 2.2: Een klein netwerkje.
Een LAN verbinden met het Internet (of met een LAN, MAN of WAN). Breedband verbinding. Nu we een LAN hebben zoals hierboven werd aangegeven, hoe verbinden we dit dan met andere netwerken, zoals een LAN, een WAN of het Internet? Dit wordt gedaan aan de hand van een gamma aan verschillende netwerk devices: •
• • • • •
Versie 1.0
Hub - Een hub is de algemene benaming voor een toestel waarmee verschillende nodes worden verbonden met het netwerk. Een hub kan een repeater zijn, of een switch, of een router. Een hub kan verschillende van deze functies in zich verenigen. Gateway - Een gateway is de algemene benaming voor een toestel dat gebruikt wordt om verschillende netwerken met elkaar te verbinden. Een gateway kan een repeater zijn een bridge of een router. Repeater - Een repeater is een netwerk hub die dient als verbinding tussen twee segmenten van een netwerk. Een repeater versterkt al de ontvangen informatie en stuurt deze naar al zijn poorten. Router - Een router is een intelligente hub, die verschillende segmenten van een netwerk met elkaar verbindt, die werken met een verschillend protocol. Switch - Een switch is een netwerk hub die zich gedraagt als een repeater maar die een directe verbinding opzet naar de betreffende bestemmeling, inplaats van de data naar alle poorten te sturen. Bridge - Een bridge is een toestel om verschillende segmenten van een netwerk, of verschillende netwerken, die hetzelfde protocol gebruiken met elkaar te verbinden.
5
[dp] D. Pauwels
RIOT
Remote Internet Operated Terminal . Gebruikers handleiding v1.0
Soms worden de functies van verschillende van deze componenten gecombineerd in één toestel. We verbinden onze LAN met het Internet via een gateway. Deze gateway verbinden we met een modem. Een modem moduleert uitgaande digitale signalen van een computer of een ander digitaal toestel op een analoog signaal dat bruikbaar is om transporteren over een gewone telefoonlijn, kabel TV coax kabels, Digital Subscriber Line (DSL) of fiber en demoduleert het binnenkomende analoog signaal en zet het om in een digitaal signaal. Dit principe wordt aangegeven in figuur 2.3. Deze LAN kan met een andere LAN of WAN worden verbonden langs een Hub zonder een modem. Maar indien we opteren voor een hub dan zal het LAN niet als een afzonderlijk netwerk kunnen werken omdat de hub alle info van een ingang doorgeeft naar al zijn uitgangen. Indien een switch i.p.v. een hub gebruikt wordt voor de koppeling met een ander LAN, zal de data voor een locale computer niet worden doorgegeven naar de andere LAN. Op deze manier vermindert de data-traffiek in beide LAN's, zijn er minder collisions, en werkt het netwerk vlotter. Dit is juist één van de redenen waarom we kleinere netwerken of sub-netwerken creëren, om data transmissie te isoleren tussen computers die elkaars data niet nodig hebben.
Computer 1 NIC
Als ROUTER, router heeft een IP adres (vb. 204.186.165.45) Als HUB, alle IP adressen zijn ‘zichtbaar’ vanuit het WAN, of Internet.
192.168.0.100
HUB/ROUTER Computer 2 Breedband Modem
NIC 192.168.0.101
Twisted pair, Coax, Fiber ….
Computer 3 NIC 192.168.0.102
Breedband Modem Naar WAN of Internet
Figuur 2.3: Een breedband netwerk
Versie 1.0
6
[dp] D. Pauwels
RIOT
Remote Internet Operated Terminal . Gebruikers handleiding v1.0
Dial up verbinding. Een ander alternatief om een LAN te verbinden met een WAN of het Internet is het gebruik van een PPP verbinding via een dial-up modem. Dit wordt aangegeven in figuur 2.4. Point-to-Point Protocol (PPP) is een protocol om te communiceren tussen twee computers via een seriële interface, meestal een PC met een modem verbonden via een telefoonlijn met een service provider. Maar het kan ook een directe seriële verbinding zijn zonder modem. Wat PPP eigenlijk doet is de TCP/IP paketten van de computer verpakken in een protocol en deze verzenden naar de server. Computer 1 NIC 192.168.0.100 Naar WAN of Internet
HUB/ROUTER Computer 2
Telefoon Modem ISP
NIC
192.168.0.101 Computer 3 NIC1
192.168.0.102
Telefoonlijn PPP verbinding
Telefoon Modem
Tijdelijk IP adres 208.185.134.24 vanuit de ISP
Figuur 2.4: Een PPP netwerkverbinding.
Versie 1.0
7
[dp] D. Pauwels
RIOT
Remote Internet Operated Terminal . Gebruikers handleiding v1.0
De 10/100 Base-T kabel. Ethernet gebruikt een speciaal type kabel: twisted pair genoemd. Twisted pair kabel bestaat (in dit geval) uit vier paar geïsoleerde geleiders die per paar in elkaar zijn gedraaid om de storingseigenschappen te verbeteren. De combinatie van vier paren in elkaar gedraaide geleiders vormt een netwerkkabel die Category-5 of CAT 5 kabel genoemd wordt. Deze naam is afgeleid van de ANSI/EIA standaard 568 waar ook nog andere types kabel worden gespecifieerd. De twee populairste specificaties zijn CAT 3 en CAT 5 . Deze kabels lijken sterk op elkaar maar zijn bedoeld voor andere datasnelheden zoals wordt aangegeven in tabel 2.1. Dit type van kabel wordt ook wel UTP (Unshielded Twisted Pair) kabel genoemd. Tabel 2.1: Netwerk kabel categoriën. Categorie CAT 1 CAT 2 CAT 3 CAT 4 CAT 5 CAT 5e CAT 6 CAT 7
Maximum Data snelheid < 1 Mbps 4 Mbps 16 Mbps 20 Mbps 100 Mbps 100 Mbps 250 Mbps 600 Mbps
Toepassing Voice telephone service ISDN 10 Base-T Ethernet 100 Base-T Ethernet 100 Base-T Ethernet met betere transmissie Voorgestelde standaard Voorgestelde standaard
De connector aan een 10/100 Base-T kabel is een RJ45 (Registered Jack -45). Dit is een 8 pin connector die meestal gebruikt wordt voor Ethernet netwerkkabels. Figuur 2.5 toont de verbindingen in een straight through en een crossover Ethernet kabel. 8 7 6 RD5 4 3 RD+ 2 TD1 TD+
8 7 RD- 6 5 4 RD+ 3 TD- 2 TD+ 1
100Base-T straight through kabel
8 7 6 RD5 4 3 RD+ 2 TD1 TD+
8 7 RD- 6 5 4 RD+ 3 TD- 2 TD+ 1
100Base-T Crossover kabel
Figuur 2.5:10/100Base-T kabel configuraties.
Versie 1.0
8
[dp] D. Pauwels
RIOT
Remote Internet Operated Terminal . Gebruikers handleiding v1.0
Tabel 2.2 geeft de kleuren van de geleiders weer voor een straight through en een crossover kabel. Eigenlijk worden alleen de pinnen 1,2,3 en 6 gebruikt in 10/100Base-T netwerk kabels. Door ze echter allemaal aan te sluiten is de kabel bruikbaar voor verschillende mogelijke netwerk configuraties. Tabel 2.2:10/100 Base-T kleurcode. Straight through kabel (beide zijden) 1-Wit/Oranje 2-Oranje 3-Wit/Groen 4-Blauw 5-Wit/Blauw 6-Groen 7-Wit/Bruin 8-Bruin
Crossover kabel (een zijde) 1- Wit/Groen 2- Groen 3- Wit/Oranje 4- Blauw 5- Wit/blauw 6- Oranje 7- Wit/Bruin 8- Bruin
Netwerk adres Elke computer of node in een netwerk heeft eigenlijk twee adressen. Of beter: elke NIC in een computer heeft twee adressen, een computer kan immers meerdere NIC's bevatten. Deze adressen zijn het Internet adres en het Ethernet adres. Het Internet adres is een logisch adres, het Ethernet adres is een hardware adres waardoor de NIC eenduidig wordt gespecifieerd. Het Ethernet adres Het Ethernet adres (ook MAC-ID genoemd) wordt door de fabrikant van de NIC (Network Interface Card) hierin vast ingesteld. Het Ethernet adres bestaat uit een 6 byte code, die meestal hexadecimaal wordt aangegeven : vb. 00-c3-43-00-a5-f1. De eerste drie bytes geven de code van de fabrikant weer en de laatste drie worden door de fabrikant doorlopend genummerd. De opbouw van een Ethernet datapakket waarin deze adressen gebruikt worden ziet er als volgt uit: Preamble
00c34300a5f1 0506fd456aff 0800 Nuttige data Destination Source Type Data Figuur 2.6: Opbouw van een Ethernet pakket.
Checksum FCS
Preamble
Bitpatroon met verschillende wisselingen tussen 0 en 1.(8 bytes) Dit dient om de start van een datapakket aan te geven aan de verschillende deelnemers, deze kunnen hierop a.d.h.v. de digitale PLL van de NIC ontvanger synchroniseren op het frame. Het einde van de preamble wordt aangegeven door de ‘11’ bitcombinatie Destination Ethernet adres van de bestemmeling.(6 bytes) Source Ethernet adres van de afzender.(6 bytes) Type Geeft het gebruikte protocol aan vb. IP=Internet Protocol=0800h.(2 bytes) Data Het nuttig te verzenden datapakket.(46<=n<=1500 bytes) FCS Frame Checkum.(4 bytes)
Versie 1.0
9
[dp] D. Pauwels
RIOT
Remote Internet Operated Terminal .
Gebruikers handleiding v1.0 Ethernet alleen beschikt niet over de mogelijkheid om verschillende netwerken te adresseren. Daarenboven werkt ethernet zonder bevestiging voor goede ontvangst vanwege de bestemmeling uit. De afzender weet dus niet of zijn pakket goed is toegekomen bij de bestemmeling. Er moet met een aantal bovenliggende protocollen (vb. IP en TCP) gewerkt worden om hieraan te voldoen. Internet adres. Het internet adres wordt ook het IP adres of Host adres genoemd. Het is een logisch adres dat wordt toegekend aan iedere NIC in iedere computer. Aan de hand van een IP adres (IP betekent Internet Protocol) kan een computer iedere andere computer op het netwerk terugvinden. Elke node moet zijn eigen IP adres kennen en dat van de andere computer waarmee hij wil communiceren. Het Internet Protocol gebruikt 32-bit adressen (IP adressen) die een eenduidige identificatie van een netwerkdeelnemer mogelijk maken. Dit IP adres wordt meestal aangegeven door een decimaal formaat met een punt tussen de verschillende bytes vb. 10.30.22.134 is een geldig IP adres. Domein namen. De numerische versie van het IP adres wordt meestal vervangen door een naam of een reeks namen die we de domein naam noemen. De vertaling tussen dit IP adres en de meer gebruikelijke domein naam zoals : denayer.wenk.be wordt gedaan door het Dynamic Name System (DNS) . Het DNS is een hierarchische database die gebruikt wordt voor het vertalen van de domein naam naar een IP adres. Waneer een computer een vertaling moet maken van een domein naar een IP adres, vraagt hij aan een domein naam server om deze informatie. Netwerk klassen Het IP adres bestaat uit een netwerkadres en een hostadres om verschillende gebruikerstoegangsmogelijkheden te hebben. De eerste bits van het IP adres specifiëren hoe de rest van het adres moet worden opgedeeld in een netwerk en een host deel. Er zijn vijf classes van IP adressen. Voor de adressering van normale netwerken gebruikt men enkel de 3 volgende netwerkklassen: Class A adressen: Deze adressen gebruiken 7 bits voor het netwerk en 24 bits voor het host adresdeel van het IP adres. Op deze manier kunnen 126 netwerken van 16777214 hosts worden geadresseerd. Gebruikt voor netwerken met een extreem groot aantal hosts. Het bereik gaat van 1.0.0.0 tot 127.255.255.255 . Zie figuur 2.7.
101.
16.
232.
23
01100101
00010000
11101000
00010111
0 31
Net ID
Host ID
24 23
0
Figuur 2.7: Class A IP adressen
Versie 1.0
10
[dp] D. Pauwels
RIOT
Remote Internet Operated Terminal . Gebruikers handleiding v1.0
Class B adressen: Deze adressen gebruiken 14 bits voor het netwerk en 16 bits voor het host adresdeel van het IP adres. Op deze manier kunnen 16382 netwerken van 65534 hosts worden geadresseerd. Het bereik gaat van 128.0.0.0 tot 191.255.255.255 . Zie figuur 2.8.
181.
16.
232.
23
01100101
00010000
11101000
00010111
10
Net ID
Host ID
31
16
15
0
Figuur 2.8: Class B IP adressen. Class C adressen: Deze adressen gebruiken 21 bits voor het netwerk en 8 bits voor het host adresdeel van het IP adres. Op deze manier kunnen 2097150 netwerken van 254 hosts worden geadresseerd. Gebruikt voor netwerken met een klein aantal gebruikers. Het bereik gaat van 192.0.0.0 tot 223.255.255.255 . Zie figuur 2.9.
197.
16.
232.
23
01100101
00010000
11101000
00010111
110 31
Net ID
Host ID 8 7
0
Figuur 2.9: Class C IP adressen. Niet alle TCP/IP netwerken zijn met elkaar doorverbonden over het internet. Speciaal voor deze geïsoleerde lokale netwerken zijn er drie adresbereiken in de netwerkclasses A, B en C gereserveerd. Hosts met adressen in deze bereiken mogen niet rechtstreeks op het internet aangesloten worden. Op deze manier staan deze adressen voor verschillende netwerken ter beschikking, en een bijkomend voordeel is dat voor deze IP adressen geen voorafgaandelijke reservering nodig is. Voor Class C is dit adresbereik 192.168.0.0 tot 192.168.255.255 . Dit is bijvoorbeeld het adresbereik dat na een residentiëele gateway ter beschikking staat van een gebruiker met meerdere PC’s die op het internet moeten worden aangesloten. Subnetwerken. Wanneer een afzender en bestemmeling éénzelfde Net-ID hebben in hun IP adres, bevinden ze zich in hetzelfde netwerk, stemmen ze niet overeen dan zal de bestemmeling zich in een ander netwerk bevinden dan de afzender. Langs Gateways / Routers worden de verschillende netwerken met elkaar verbonden en vormen zo het internet. In de netwerk klassen A, B, en C is gedefiniëerd welk deel van het IP adres het NetID en het Host-ID is. Versie 1.0
11
[dp] D. Pauwels
RIOT
Remote Internet Operated Terminal . Gebruikers handleiding v1.0
Nu is het weliswaar ook mogelijk een netwerk verder onder te verdelen in kleinere netwerken of subnetwerken. Voor de adressering van zulke subnets volstaat de in de netwerk Class aangegeven Net-ID niet meer. Een deel van het Host-ID wordt dan mee gebruikt voor de adressering van de Subnets. Eigenlijk vergroot zo de Net-ID en verkleint op deze wijze de Host-ID. Welk deel van het IP adres er nu gebruikt wordt als Net-ID en Host-ID wordt aangegeven in het Subnet-mask. Het Subnet-mask is net zoals het IP adres een 32 bit getal die in ‘dot-notatie’ wordt aangegeven. In de binaire voorstelling van dit Subnet-mask is het deel dat voorzien is als Net-ID opgevuld met logisch’1’ en het deel voor de Host-ID met nullen. Bij elk te verzenden datapakket vergelijkt de IP driver zijn eigen IP adres met dat van de bestemmeling. Hierbij worden de bits van het Host-ID met de nullen van het Subnet-mask gemaskeerd. Als de overblijvende bits van de IP adressen gelijk zijn zit deze bestemmeling in hetzelfde netwerk als de verzender. De IP driver kan nu het Ethernetadres te weten komen via ARP bemiddeling (zie verder bij Netwerkcommunicatie), en deze aan de Packet driver doorgeven voor directe adressering. Zijn de overblijvende bits van beide IP adressen niet gelijk dan zit de bestemmeling niet in dit subnetwerk. In dit geval moet het IP pakket over een gateway of router naar het andere netwerk worden gebracht. Gateway’s en routers zijn in principe niets anders dan computers met twee netwerk interfaces, laat ons ze voor de eenvoud A en B noemen. Ethernet Data pakketten die op interface ‘A’ binnenkomen worden door de Ethernet driver uitgepakt, en het IP adres wordt doorgegeven aan de IP driver. Deze kijkt of het IP adres van de bestemmeling behoort tot het subnet dat op interface B is aangesloten, en dus of het pakket direct hiernaar kan doorgegeven worden. In het andere geval moet het datapakket doorgegeven worden aan een volgende gateway. Op deze manier kan een datapakket op zijn weg verschillende gateway’s/routers vinden. Terwijl op IP vlak over het hele netwerktraject het IP adres van de bestemmeling ingevuld wordt, wordt op Ethernet vlak altijd de volgende gateway geadresseerd. Alleen in het deel van de laatste gateway/router tot de bestemmeling wordt in het Ethernet pakket het Ethernetadres van de bestemmeling ingevuld. DHCP Tot nu toe zijn we steeds van de veronderstelling uitgegaan dat IP adressen statisch zijn toegekend. Dynamic Host Configuration Protocol (DHCP) is een protocol dat een netwerk automatisch een IP adres laat toekennen aan iedere node die met het netwerk verbonden wordt (iedere computer die wordt opgestart in het netwerk). Door het toenemende aantal Internet gebruikers worden IP adressen dynamisch toegekend vanuit een groep gealloceerde adressen. Dit is meestal het geval bij het gebruik van een dial-up TCP/IP verbinding of bij een DSL breedband verbinding met een provider. Hierbij zal het toegekende IP adres veranderen bij iedere login sessie, omdat het toegekend wordt uit een groep van IP adressen die veel kleiner is dan het totaal aantal gebruikers. Men gaat er hier van uit dat alle gebruikers toch nooit allemaal tegelijk online gaan. Zo is het bijvoorbeeld ook mogelijk dat een router meerdere gebruikers via een breedband verbinding op het Internet kan brengen, en dat deze router een geïntegreerde DHCP service kan aanbieden aan de gebruikers. De met de router verbonden computers zullen bij het booten door de router worden herkend en van een IP adres worden voorzien.
Versie 1.0
12
[dp] D. Pauwels
RIOT
Remote Internet Operated Terminal . Gebruikers handleiding v1.0
Netwerk communicatie. Over dit topic zijn reeds vele boekwerken verschenen, die allen deze materie ten gronde behandelen. Dit is zeker niet de bedoeling van deze tekst. Hier willen we alleen de grondbeginselen in verband met networking aanhalen, om de gebruiker zo de nodige basiskennis te verschaffen om met dit systeem te kunnen werken, en de nodige parameters oordeelkundig in te kunnen stellen. Alle netwerkentopologiën hebben één gemeenschappelijk element: iedere netwerk-deelnemer beschikt over een eigen ‘adres’. De nuttige data die over het netwerk wordt verzonden zal steeds in een ‘frame’ worden verpakt samen met de nodige ‘netwerk-informatie’, zoals vb. het adres van de bestemmeling, het adres van de afzender, een checksum… Met de hulp van deze adresinfo in de zo ontstane datapaketten kan de nuttige data over een gemeenschappelijke medium (vb. bedrading) tot bij de bestemming doorgegeven worden. De bestemmeling kan nu aan de hand van de checksum uitmaken of de data foutvrij is toegekomen of niet. We gaan nu de werking van TCP/IP even van naderbij bekijken, omdat we dit nodig hebben waneer we spreken over sockets en enkele andere protocollen verder in de tekst. Alhoewel TCP en IP meestal in één woord worden uitgesproken gaat het hier wel degelijk over twee verschillende protocollen. Het Internet Protocol (IP) zorgt voor het verbergen van het onderliggende fysische netwerk en creëert een virtueel netwerk. Het zorgt voor de juiste adressering en samenstelling van het datapakket, maar is verder een onbetrouwbaar ‘connectionless delivery protocol’. Dit wil zeggen dat pakketten die verzonden zijn door IP verloren kunnen geraken, in een verschillende volgorde kunnen toekomen, of zelfs meerdere keren kunnen toekomen. IP gaat er van uit dat een hoger gelegen protocol deze anomaliën zal oplossen! Dit hoger gelegen protocol is het Transport Control Protocol (TCP) dat zorgt voor het foutvrije transport van data en een betrouwbare logische verbinding tussen de deelnemers. De TCP/IP protocol stack is een abstract model die het netwerk in lagen opdeelt gebaseerd op functies en communicatie protocollen gedefinieerd in deze lagen. Bij het doorgeven van de informatie doorheen de stack wordt ze 'ingekapseld'. Inkapseling is een proces waarbij men een, voor een protocol specifieke, header toevoegt aan de informatie die vanuit een hoger gelegen laag wordt doorgegeven. Door zich aan dit concept van een protocol stack te houden, kan software en hardware ontworpen worden zonder zich zorgen te moeten maken over details in alle lagen van de stack. Alleen de naburige lagen zijn van belang. Op deze manier worden software modules herbruikbaar, transporteerbaar en device onafhankelijk. De figuur 2.10 geeft de structuur en de hierarchie aan van de TCP/IP communicatie software. Men herkent hier de donker gekleurde “TCP/IP stack”, die de interface vormt tussen de toepassingen zoals Telnet, Http, Ftp of een user programma en de driver van de ethernet controller. Voor het besturen van de ethernet controller is de bijhorende driversoftware nodig; de Packet Driver. Deze Packet Driver is de interface tussen de IP software en de gebruikte ethernetcontroller en is daarom afhankelijk van het type ethernetcontroller. De boverste laag, de application laag, heeft enkele nuttige functies waarmee we nog in contact zullen komen in deze tekst: Telnet, HTTP, FTP en SMTP.
Versie 1.0
13
[dp] D. Pauwels
RIOT
Remote Internet Operated Terminal . Gebruikers handleiding v1.0
• • • •
Telnet is een terminal emulatiepakket (te vergelijken met Hyperterminal ) dat toelaat om te communiceren met andere computers over het netwerk. HyperText Transfer Protocol (HTTP) is een protocol voor het uitwisselen van multimediafiles over het Web. Een web server stuurt files naar je web browser gebruik makend van het HTTP protocol. File Transfer Protocol (FTP) is een simpel protocol voor het uitwisselen van files tussen computers in een netwerk. Simple Mail Transfer Protocol (SMTP) is een TCP/IP protocol gebruikt voor het zenden en ontvangen van e-mail boodschappen. Telnet
FTP
HTTP
Toepassing
Transmission Control Protocol (TCP)
DNS
Toepassing
User Datagram Protocol (UDP)
Internet Protocol (IP)
Packet Driver
Ethernet Controller
Figuur 2.10 TCP/IP protocol stack
Versie 1.0
14
[dp] D. Pauwels
RIOT
Remote Internet Operated Terminal . Gebruikers handleiding v1.0
IP internet protocol Het Internet Protocol (IP) zorgt voor het transporteren van data tussen de verschillende systemen over het internet, het bekommert zich om het adresmanagement en de segmentering van de data. IP data frame. IP header
IP datapakket
Bij het transporteren van data over het internet, worden de nuttige data in een frame gestopt samen met de nodige adres- en andere informatie. TCP- Transport Control Protocol. Omdat IP een onzeker connectionless protocol is werkt het samen met het bovenliggend TCP protocol . TCP maakt een verbinding tussen twee netwerkdeelnemers voor de duur van de data-overdracht. Bij de opbouw van de verbinding worden tussen de netwerkdeelnemers afspraken gemaakt over de grootte van de datapakketten die gebruikt worden voor de duur van de verbinding. Client/server TCP werkt volgens het zogenaamde ‘Client-Server’ principe. De netwerk deelnemer die de verbinding opbouwt noemt men de Client. De netwerk deelnemer waarnaar een verbinding wordt opgebouwd noemt men de Server. Een Server doet uit zichzelf niets, maar wacht alleen op een Client die een verbinding naar hem opbouwt. TCP voorziet de overgedragen nuttige data van een Checksum, en voorziet elk verzonden datapakket van een sequentie nummer. De bestemmeling controleert a.d.h.v. de checksum de ontvangen data. Als een TCP server een datapakket correct ontvangen heeft, wordt via een algorithme uit het sequentie nummer een acknowledge nummer berekend. Dit acknowledge nummer wordt in het volgende zelf te sturen pakket naar de Client mee teruggestuurd als bevestiging. De Server voorziet zijn eigen datapakket ook met een sequentie nummer, dat door de Client op zijn beurt weer wordt bevestigd met een acknowledge (Ack) nummer. Als er na een time-out nog geen Ack nummer van de tegenpartij is gekomen zal het datapakket opnieuw worden verzonden. Aan de ontvangerzijde zorgt TCP a.d.h.v. de sequentie nummers ervoor dat de datapakketten in de juiste volgorde worden herschikt, of dat gedupliceerde pakketten worden geëlimineerd. TCP geeft ook de nuttige data door aan het juiste gebruikersprogramma, doordat het het betreffende gebruikersprogramma aanspreekt op zijn eigen ‘port number’.
Versie 1.0
15
[dp] D. Pauwels
RIOT
Remote Internet Operated Terminal . Gebruikers handleiding v1.0
Opbouw van een TCP/IP datapakket.
TCP Data
TCP header
IP header
IP Data
Ook TCP verpakt de nuttige data in een frame samen met, voor het protocol, andere benodigde informatie. Het pakket dat zo ontstaat wordt dan als data in het IP pakket opgenomen.
TCP/IP – Ethernet. TCP/IP is een zuiver logisch protocol en heeft altijd een fysische grondlaag nodig. Ethernet is heden de meest gebruikte fysische netwerktopologie. Dit is ook in combinatie met TCP/IP het geval. Ieder IP pakket dat op zich een TCP pakket heeft ingekapseld zal nu op zijn beurt worden ingekapseld in een frame van de fysische laag; in dit geval Ethernet.
TCP Data
TCP header
IP header
IP Data
Ethernet header
Ethernet Data
FCS
De te transporteren data ondergaat bij zijn weg vanuit een toepassingsprogramma tot in het netwerk verschillende stappen. Het toepassingsprogramma bepaalt naar welke andere netwerkdeelnemer de data moet getransporteerd worden, en geeft het IP adres en de TCP port door aan de TCP/IP stack. De TCP/IP stack (driver) coördineert de opbouw van de TCP verbinding. De uit de toepassing afkomstige data wordt, afhankelijk van de hoeveelheid data, door de TCP driver in kleinere overdraagbare blokken data verdeeld. Iedere datablok wordt daarna in een TCP pakket gestopt. De TCP driver geeft dit TCP pakket samen met het IP adres van de bestemmeling door aan de IP driver. De IP driver verpakt dit TCP pakket in een IP pakket. De IP driver zoekt in de zogenaamde ARPtabel (Address Resolution Protocol) naar het het Ethernet adres van de door het IP adres aangegeven bestemmeling. Daarna wordt het IP pakket samen met het bekomen Ethernet adres doorgegeven aan de packet-driver van de Ethernet chip. Hier wordt het IP pakket verpakt in een Ethernet frame en verstuurt op het netwerk.
Versie 1.0
16
[dp] D. Pauwels
RIOT
Remote Internet Operated Terminal . Gebruikers handleiding v1.0
Aan de bestemmeling zijde gebeurt dan de complementaire reeks handelingen om de originele data terug te krijgen. Op het eerste zicht lijkt deze manier van data transport overdreven ingewikkeld, maar het is juist door de strikte scheiding tussen het logische protocol (TCP/IP) en het fysische protocol (Ethernet) dat het mogelijk is data hardware-onafhankelijk en netwerkoverschrijdend te transporteren.
ARP Address Resolution Protocol. Voor het bekomen van het Ethernet adres van de bestemmeling gebruikt de IP driver het Address resolution Protocol ARP. In elke computer met een TCP/IP stack bevindt er zich een ARP tabel, die door de IP driver wordt geactualiseerd en die tot doel heeft de Ethernetadressen op te zoeken die horen bij de IP adressen van de bestemmelingen. Kan het Ethernetadres dat hoort bij een bepaald IP adres niet teruggevonden worden in de tabel dan start de IP driver een ARP request. Een ARP request is een rondvraag (broadcast) aan alle netwerkdeelnemers op het netwerk. De IP driver geeft als Ethernetadres de waarde FF FF FF FF FF FF aan. Aan de hand van dit adres wordt het pakket door iedere netwerkdeelnemer gelezen. In het IP pakket wordt als bestemming het gewenste IP adres aangegeven en in het protocol veld van de IP header wordt aangegeven dat het over ARP gaat. Diegene die in dit ARP request zijn IP adres herkent, zal bevestigen met een ARP reply. Deze ARP reply is een aan de ARP request afzender gericht datapakket, met de ARP aanduiding in het protocol veld van de IP header. De IP driver van de afzender kan nu het Ethernet adres van de bestemmeling halen uit de ARP reply, en deze toevoegen aan zijn ARP tabel. Deze ARP tabel entry’s zijn dynamisch, wat wil zeggen dat ze na een bepaalde tijd (ongeveer 2 minuten bij Windows) weer worden gewist. Dit zorgt voor een beperkte tabel.
Versie 1.0
17
[dp] D. Pauwels
RIOT
Remote Internet Operated Terminal . Gebruikers handleiding v1.0
De Interface tussen een toepassingsprogramma en de TCP/IP stack. De interface tussen de TCP of UDP netwerklaag en het TCP/IP toepassingsprogramma wordt gevormd door een zogenaamde 'socket-interface' van het OS die aanspreekbaar is via een socket API. Zie figuur 2.11. Voor meer info over de systeem API's verwijzen we naar Hfdst 5 ' De API’s van het OS'. Een TCP/IP toepassingsprogramma is typisch een netwerkprogramma dat uit twee delen bestaat nl. een cliëntdeel en een serverdeel. Deze communiceren over het netwerk (internet) via een TCP/IP stack en de nodige 'sockets API'. De netwerkdeelnemer die de verbinding opbouwt noemt men de Client. De netwerkdeelnemer waarnaar een verbinding wordt opgebouwd noemt men de Server. Een Server doet uit zichzelf niets, maar wacht alleen op een Client die een verbinding naar hem opbouwt. Een TCP/IP toepassingsprogramma Toepassing Client deel
Toepassingsprotocols
Socket API
Toepassing Server deel
Toepassingslaag
Socket API
TCP en UDP
Transportprotocols
TCP en UDP
IP en ICMP
Netwerkprotocols
IP en ICMP
Netwerklaag
Device interface
Data Link Control protocols
Device interface
Datalinklaag
Transportlaag
IP netwerk
Figuur 2.11:Situering van de socket interface. Een socket. Een socket definiëert op een unieke manier één logisch eindpunt voor een IP netwerk-verbinding tussen twee toepassingsprogramma's. Het is als het ware het communicatiepunt van het OS waar het toepassingsprogramma wordt ingeplugd (zie figuur 2.12). Twee communicerende programma's hebben dus elk hun socket die hun communicatie-eindpunt beschrijft. 'Sockets' en 'Ports' zijn nodig om te bepalen welk gebruikersprogramma, op een lokale host computer, communiceert met welke remote computer en met welk protocol, en met welk specifiek gebruikersprogramma. Dit is nodig omdat grote processoren die TCP/IP draaien typisch multitasking systemen zijn die meerdere links tegelijk afhandelen. Een socket (logisch communicatie-eindpunt) wordt oa. bepaald door twee dingen: -
Versie 1.0
Een Host adres: dit is een IP adres, dat hoort bij de netwerklaag. Een Port nummer: dit is een 16 bit getal dat uniek is voor een toepassing die op een CPU loopt, een port nummer hoort bij de transportlaag. Vb: 206.62.226.35 , p21 Twee eindpunten bepalen een communicerend socketpaar. Vb: 206.62.226.35 , p21 + 198.69.10.2 , p1500.
18
[dp] D. Pauwels
RIOT
Remote Internet Operated Terminal . Gebruikers handleiding v1.0
APIfunctie: send()
APIfunctie: opensocket()
Gebruikers toepassing.
APIfunctie: bind()
Gebruiker Socket descriptor
Socket layer Gebufferde data die nog moet verzonden worden voor de toepassing.
TCP layer
APIfunctie: recv()
Gebufferde data die nog moet gelezen worden door de toepassing.
Socket parameters (in socket descriptor tabel)
Operating system
Port getal
Figuur 2.12: Conceptueel beeld van een socket. Ports. Elk process (programma) dat wil communiceren met een ander process identificeert zichzelf bij de TCP/IP laag door één of meerdere ports. Een port is een 16 bit getal dat aangeeft bij welk hoger gelegen protocol of gebruikersprogramma de binnenkomende berichten moeten afgeleverd worden. Er zijn twee soorten Ports: • •
Well-known: deze gereserveerde ports horen bij standaard services, vb.Telnet gebruikt port 23, FTP gebruikt port 21, SMTP gebruikt port 25, HTTP gebruikt port 80 enz… Het bereik van deze well-known ports gaat van 0 tot 1023. Vrije ports: deze ports kan men voor eigen toepassingen gebruiken en hebben het bereik van 1024 tot 65535.
Wanneer men een eigen specifieke link opzet, vb: een directe TCP link tussen een microcontroller en een PC, vermijdt men best het gebruik van well-known 'Port' getallen. Onthoudt ook dat een service naam of 'Port' getal een manier is om een toepassingsprogramma aan te spreken dat loopt op de remote host. Maar omdat een specifieke service naam of 'Port' getal wordt gebruikt, wordt nog niet garandeerd dat de service ook beschikbaar is! Het is immers ook niet omdat men een telefoonnummer intoetst dat de telefoon aan de andere zijde wordt opgenomen en wordt beantwoord. Vanuit het standpunt van de programmeur is alleen de sockets API belangrijk. De sockets API is de meest gebruikelijke programmeer interface boven de TCP/IP transport protocols.
Versie 1.0
19
[dp] D. Pauwels
RIOT
Remote Internet Operated Terminal . Gebruikers handleiding v1.0
De basis sockets API functies zijn afgeleid van de functies die een programma gebruikt om een file aan te spreken. De sockets API is nl. op hetzelfde model gebaseerd! Socket types en hun karakteristieken. De socket interface is een algemeen interface mechanisme dat niet alleen verschillende vormen van netwerkcommunicatie supporteert, maar in de UNIX wereld ook een inter-process communicatie op éénzelfde computer. STREAM
Toepassingsprogramma
Stream
Datagram
Raw
Betrouwbaarheid
Groot, connectie georienteerd
Datagrootte
Grote hoeveelheden
Sockets
TCP
UDP
IP en ICMP
TCP/IP Protocol interface
TCP
DATAGRAM Verantwoordelijkheid van de toepassingssoftware Vaste datagram lengte UDP
RAW Verantwoordelijkheid van de toepassingssoftware Vaste netwerkpakketgrootte IP
Interfaces
Figuur 2.13:Socket types en hun eigenschappen. Er wordt een onderscheid gemaakt tussen deze verschillende soorten sockets, en deze soorten worden Adres Families (AF) genoemd. De Internet adresfamilie (INET) supporteert communicatie via TCP/IP protocols, en deze adresfamilie wordt ook op de IPC@CHIP ondersteund. Een toepassingsprogrammeur kan drie types sockets gebruiken: een stream socket (het meest gebruikte socket type), een datagram socket, en een raw socket. Zie figuur 2.13. Stream sockets voorzien in een betrouwbare sequentiële tweeweg datastroom met de garantie dat er geen data verloren gaat, beschadigd wordt of gedupliceerd wordt tijdens het transport. Stream sockets worden gesupporteerd door het TCP protocol van de Internet adres familie (INET). Datagram sockets voorzien ook in een tweeweg datatransfert maar, in tegenstelling met stream sockets is er geen garantie dat de boodschappen zullen toekomen, of in de gewenste volgorde toekomen. Ze kunnen zelfs meerdere malen toekomen of beschadigd zijn. Datagram sockets worden gesupporteerd door het UDP protocol van de Internet familie. Raw sockets geven de toepassingsprogramma's toegang tot de onderliggende protocols. Zo is het mogelijk een raw socket te openen naar een ethernet device en het raw IP dataverkeer te onderscheppen.
Versie 1.0
20
[dp] D. Pauwels
RIOT
Remote Internet Operated Terminal .
Gebruikers handleiding v1.0 De adresseringsaspecten van een TCP/IP socket. Figuur 2.14 geeft aan welke adressen door welke delen van de TCP/IP stack worden gebruikt om de data naar de toepassingssoftware door te geven. User toepassings programma
User server toepassing
Telnet
Port2531
Port23 Port2000
Port nummer
Port2000
TCP
UDP
Transport protocol
ARP (Adres Resolution Protocol) wordt gebruikt om het IP adres te vertalen naar het hardware adres op het netwerk (MAC Medium Access Control)
IP protocol
IP en ICMP IP adres: 112.0.12.18
Hardware Adres
Interfaces MAC adres IP Netwerk
MAC adres
Stuur TCP data naar IP adres 112.0.12.18 op port 2000.
IP Header
TCP Header
User data
MAC trailer
TCP segment IP Pakket MAC frame
Figuur 2.14: Adresseringsaspecten bij een TCP/IP stack. Een socket heeft een structuur met adresgegevens. Deze adresstructuur wordt bepaald door de Adres Familie (AF) vb. INET ( Internet adres familie) waartoe de socket behoort. Alle socketadresstructuren starten met 1 byte die de lengte aangeeft van de adresstructuur, met daarop volgend een byte die de adres familie (AF) identifier bevat. Het daarop volgende deel van de adresstructuur wordt bepaald door de AF. Een TCP/IP socket heeft ofwel als identifier AF_INET wat overeenstemt met de waarde 2 (voor IPv4) ofwel AF_INET6 wat overeenstemt met de waarde 19 (voor IPv6). Een IPv4 adres is 4 bytes lang, en een IPv6 adres is 16 bytes lang. De socket adresstructuur wordt gedefinieerd in de TCPIPAPI.H file en ziet er als volgt uit: struct sockadr { unsigned char unsigned char char };
sa_len; /*totale lengte*/ sa_family; /*adres familie AF_xxx*/ sa_data[14]; /*tot 14 bytes protocol specifiek adres*/
struct in_addr { unsigned long };
s_addr;
Versie 1.0
/*32 bit IPv4 hostadres in netwerk byte order*/
21
[dp] D. Pauwels
RIOT
Remote Internet Operated Terminal . Gebruikers handleiding v1.0
struct sockaddr_in { short sin_family; unsigned int sin_port; struct in_addr sin_addr; char sin_zero[8]; };
/*AF_INET*/ /*TCP/UDP port nummer in netwerk byte order*/ /*IPv4 adres in netwerkbyte order*/ /*niet gebruikt*/
Verschillende functies (bind(), connect(), sendto() ) van de sockets API geven deze adressstructuur door van een toepassingsprogramma naar de socket interface van het OS. Andere functies ( accept(), recvfrom() ) geven adresstructuur door van de socket interface van het OS naar de toepassingsprogramma's. Stream socket client/server communicatie. Doordat de taken van een server en een cliënt verschillen, zal hun gebruik van sockets ook anders zijn. De rol die voor de beide communicerende partijen is weggelegd wordt aangegeven in de sockets die iedere partij gebruikt. Servers gebruiken wat we noemen passieve sockets en cliënten actieve sockets. Wanneer een serverprogramma opstart moet het een socket creëren, daarna moet het deze socket koppelen aan een lokale ongebruikte port (bind). De serversocket moet daarna 'luisteren' of er nieuwe verbindingen zijn van cliënten, en zoniet, er op wachten, vandaar de benaming passieve sockets. Wanneer er een verbinding toekomt op de wachtende socket, moet deze de verbinding accepteren (accept) en een nieuwe 'verbonden' socket creëren die gebruikt wordt voor de communicatie met de cliënt. Deze nieuwe socket staat in verbinding met de remote socket van de cliënt. Door de creatie van een nieuwe socket voor het afhandelen van de verbinding, is de 'luisterende' socket weer vrij om te luisteren naar verbindingen met andere cliënten. Cliënten gebruiken sockets op een andere manier. Een cliënt creëert een socket op dezelfde manier als een server, maar daarna verschilt het gebruik ervan. De cliënt gebruikt de socket om te trachten een verbinding te maken met een server. Eens de verbinding geaccepteerd wordt door de server, kan de cliënt beginnen met het verzenden en ontvangen van data naar de server.
Versie 1.0
22
[dp] D. Pauwels
RIOT
Remote Internet Operated Terminal .
Gebruikers handleiding v1.0 Stream socket netwerkprogramma's (gebaseerd op het TCP transport protocol) zijn veruit het meest gebruikte type sockets. De cliënt/server communicatie (Figuur 2.15) verloopt als volgt:
Server zijde socket()
Open een logisch communicatie eindpunt.
bind()
Koppel een gekend adres aan socket.
listen()
Systeem klaarmaken om verbindingsaanvragen te ontvangen en ze in een queue bij te houden.
accep()
De accept() methode wacht tot een verbinding vanuit een cliënt is gemaakt.
accept() creëert een nieuw socket om de nieuwe cliënt request af te handelen
Wanneer er van een cliënt een verbindingsaanvraag is binnengekomen voor deze socket, zal accept() de eerste aanvraag uit de queue nemen en een nieuw socket creëeren met dezelfde eigenschappen, en de server gebruikt deze socket voor de communicatie met de cliënt. De server heeft op dat moment twee sockets; de socket die communiceert met de cliënt, en de socket die luistert of er andere verbindingsaanvragen binnenkomen. Wanneer er geen verbindingsaanvraag is zal accept() wachten tot een verbindingsaanvraag binnenkomt.
Client zijde socket()
Open een logisch communicatie-eindpunt.
connect()
Maak een verbinding met een server.
Verbinding opzetten
Data (aanvraag) recv()
send()
Zenden van data.
Verwerking van de data request. Data (antwoord) send()
t
close()
recv()
Ontvangen van data.
close()
Verbinding afsluiten.
Figuur 2.15: De cliënt/server communicatie
Versie 1.0
23
[dp] D. Pauwels
RIOT
Remote Internet Operated Terminal .
Gebruikers handleiding v1.0 De beschikbare functies in de sockets API. De TCP/IP API van de IPC@CHIP bevat de nodige functies om via sockets aan netwerkcommunicatie te doen. De benodigde constanten en structures en functieprototypes worden in de headerfiles tcpipapi.h en tcpip.h gedefinieerd. Bij elke socket in een systeem hoort een socket descriptor (SD), dit is een integer getal dat in de socketdescriptor tabel aangeeft wat de socketadres-eigenschappen zijn die horen bij een bepaalde socket zoals wordt aangegeven in figuur 2.16. IP adres cliënt: 10.10.3.43
IP adres server:10.10.1.1
Remote cliënt
Lokale server TCP luister socket SD3
10.10.3.43 2300 TCP
TCP verbonden socket SD4
10.10.1.1 999 TCP
Lokaal: 10.10.1.1 , 999 , TCP Remote: 10.10.3.43 , 2300 , TCP
Connect (10.10.1.1 , 999)
Descriptor
Lokaal deel (IP adres, port, protocol)
SD3 (socket descriptor 3)
10.10.1.1 , 999 ,TCP
SD4 (socket descriptor 4)
10.10.1.1 , 999 , TCP
Remote deel (IP adres, port, protocol)
10.10.3.43 , 2300 ,TCP
Socket descriptor tabel van de lokale server
Figuur 2.16: Sockets en socketdescriptors. Hieronder volgen een aantal van de beschikbare functies uit de TCP/IP API van de IPC@CHIP die door een software-interrupt 0xAC kunnen opgeroepen worden. De inhoud van AH is de parameter die aangeeft welke functie moet uitgevoerd worden. Voor de volledige beschrijving van deze API verwijzen we naar de IPC@CHIP BIOS beschrijving. •
APIfunctie opensocket: AH=0x01,AL=1(TCP streamsocket) of AL=2 (UDP datagram) Deze functie creëert een nieuw socket. De socketdescriptor wordt bij het creëren van een socket als integerwaarde teruggegeven in AX. DX geeft aan of er al dan niet een fout is opgetreden. Hiermee wordt er in de socketdescriptor tabel een nieuwe entry gecreëerd waaraan echter nog geen port en IP adres is gekoppeld.
•
APIfunctie bind: AH=0x03, BX=socketdescripor, DX:SI=pointer naar een sockaddr_in structuur. Deze functie zal een socket met gegeven socket descriptor koppelen (bind) aan een adres dat is gespecifiëerd in een adresstructuur van het type sockaddr_in. In de socketdescriptor tabel is dan het lokaal deel compleet.
Versie 1.0
24
[dp] D. Pauwels
RIOT
Remote Internet Operated Terminal . Gebruikers handleiding v1.0
•
APIfunctie listen: AH=0x0E, BX=socketdescriptor, CX=maximaal aantal (max.5) connecties. Deze functie plaatst de socket (servertoepassing) in de passieve luister mode, en bepaalt hoeveel gelijktijdige connecties de kernel toelaat voordat een cliënt die tracht een verbinding te maken een 'connection refused' fout zal ontvangen.
•
APIfunctie connect: AH=0x04,BX=socketdescriptor,DX:SI= pointer naar een variabele met een sockaddr_in structuur die het host IPadres en portnummer bevat. Deze functie maakt een verbinding tussen de lokale socket, aangegeven door de socketdescriptor, en een remote socket waarvan het socketadres is gespecifiëerd in een variabele met de sockaddr_in structuur.
•
APIfunctie accept: AH=0x0D, BX=socketdescriptor, DX:SI= pointer naar een variabele met de sockaddr_in structuur. Deze functie creëert een nieuwe socket die is verbonden met een remote socket. De remote socket wordt aangegeven door de eerste verbindingsaanvraag in de verbindingsqueue. De nieuwe socket heeft dezelfde eigenschappen als diegene aangegeven door de socketdescriptor. De functie vult de opgegeven sockaddr_in structuur op met het IPadres en het port nummer van de geaccepteerde verbinding. In de socketdescriptortabel is bij deze socketdescriptor zowel het lokaal als het remote deel opgevult.
•
APIfunctie send: AH=0x0F, BX=socketdescriptor, DX:SI= pointer naar een variabele met de send_params structuur (zie tcpipapi.h). De variabele met deze structuur bevat oa. een pointer naar een char buffer met de te verzenden data, en de bufferlengte. De functie verstuurt een boodschap naar een ander socket, en mag alleen gebruikt worden indien de lokale socket zich in de 'connected' toestand bevindt.
•
APIfunctie recv: AH=0x10, BX=socketdescriptor, DX:SI= pointer naar een variabele met de recv_params structuur (zie tcpipapi.h). De variabele met deze structuur bevat oa. een pointer naar een char buffer voor de te ontvangen data, de bufferlengte, en een flagvariabele (int). De functie ontvangt een boodschap van een ander socket, en mag alleen gebruikt worden indien de lokale socket zich in de 'connected' toestand bevindt. Indien de flagvariabele in de recv_params structuur de waarde msg_dontwait heeft zal deze functie onmiddellijk terugkeren. Als er geen data beschikbaar is zal -1 teruggegeven worden in DX met de errorcode 235 in AX. Als de flagvariabele de waarde msg_blocking heeft wacht de functie tot er data ontvangen is. Default zal bij het openen van een socket deze in de blocking mode staan.
•
APIfunctie closesocket: AH=0x02, BX= socketdescriptor. De functie closesecket sluit de aangegeven socket en geeft al de geassocieerde recources weer vrij.
Versie 1.0
25
[dp] D. Pauwels
RIOT
Remote Internet Operated Terminal . Gebruikers handleiding v1.0
De sockets API is een low-level API waarbij de gebruiker veel details zelf moet afhandelen, en van veel details op de hoogte moet zijn, zoals oa.: •
Cliënten moeten het socketadres van de server kennen voor ze er contact kunnen mee maken. Er is geen mechanisme dat de server 'ondekt' op de sockets API layer. Socket programma's moeten verschillende dataformaten kunnen verwerken, en moeten de • nodige convertieroutines bevatten zoals voor little Endian/ big Endian fixed integer convertie, IEEE floating point/ toepassingsafhankelijke floating point formaat convertie en soms ASCII/EBCDIC conversie. • User identificatie. De gewone standaard sockets API heeft geen functies om de eind-users te identificeren voor ze toegang krijgen tot het server programma. SSL (Secure Sockets Layer) kan de gebruikers wel identificeren bij het tot stand komen van de verbinding. Dit is voorzien in het volgende type IPC@CHIP . De gebruiker moet dus wel degelijk weten hoe de socket interface werkt! De firma Beck voorziet ook in een C-library (tcpip.c) die een C 'omhulsel' plaatst rond de software interrupt calls, dit laat de gebruiker toe op een iets hoger abstractieniveau te programmeren. Voor meer informatie over dit onderwerp verwijzen we graag naar een handleiding over ‘socket programming’. Voor een volledige uiteenzetting van de internet protocols verwijzen we graag naar het boek ‘TCP/IP Tutorial and Technical overview’ van IBM te vinden op http://www.ibm.com/redbooks .
Versie 1.0
26
[dp] D. Pauwels