Atom Nieuws 2002 nummer 1
../../../images/back.gif ../../../images/exit.gif ../../../images/forward.gif
pagina 5
Internet
TCP/IP met de Atom ??

Inleiding:
Ik liep al langer met het idee rond om eens te kijken of het mogelijk is om via de Atom data op te halen van internet. Je kunt dan bv. HTML pagina’s van het internet halen en dan een soort simpele browser te maken in combinatie met Atomic Windows.
Toen versie 1.33 van de Atom emulator van Wouter Ras uitkwam was het mogelijk om via de emulator rechtstreeks de seriële poort van de PC te besturen. Wanneer je een modem aan de seriële poort hebt aangesloten, kun je deze dus ook besturen. Na wat experimenteren lukte het om contact te maken met mijn internet provider maar toen hield het op. Het invullen van Username en Password ging nog wel maar dan verscheen er een heleboel rare data waarvan ik niet wist wat dit betekende. Ik had dus geen flauw idee hoe deze communicatie nu eigenlijk werkte en welke data er verstuurd moest worden. Na een intensieve zoektocht op internet vond ik veel informatie over hoe het internet werkt en veel voorbeelden over het koppelen van een computer aan een netwerk. Al snel bleek dat communiceren via internet hetzelfde is als communiceren in een netwerk. Dit opende perspectieven. Het moest dus mogelijk zijn om de Atom in een netwerk te plaatsen om zo data uit te wisselen of internet te gebruiken.

Internet:
Voordat ik verder in ga op hoe je de Atom in een netwerk kunt plaatsen wil ik eerst even een algemeen verhaaltje houden over internet. Wat is internet eigenlijk en hoe werkt het? Internet wordt beschreven als een of meerdere netwerken waarover computers met elkaar kunnen communiceren. Deze computers communiceren met elkaar volgens bepaalde regels. Deze regels zijn vastgelegd in zogenaamde protocollen en worden RFC’s (Request for Comments) genoemd. Deze zijn vrij down te loaden van het internet.
Hieronder staat een voorbeeld van een netwerk.

internet1.gif

Lagenstructuur:
Wanneer je de structuur van internet software op een computer bekijkt, blijkt dat deze opgebouwd is uit zogenaamde lagen. Deze lagen hebben elk een eigen functie en kunnen alleen met de onder- en bovenliggende laag communiceren. De internetstructuur is in principe terug te brengen tot 4 hoofdlagen, nl de link-, netwerk-, transport- en applicatielaag. Ook wordt wel eens gesproken van het OSI (Open Systems Interconnection) model. Dit is in principe dezelfde structuur maar dan verdeeld in 7 lagen. De applicatielaag is dan verder onderverdeeld in 3- en de linklaag in 2 extra sublagen. Het principe van beide structuren is gelijk Wanneer je een computer in een netwerk plaatst, zal deze via bovengenoemde internetstructuur moeten werken om te kunnen communiceren. De internetstructuur ziet er dus als volgt uit:

internet2.gif

Elke computer zit via de linklaag met het netwerk verbonden. Het is ook mogelijk dat er meerdere link lagen met een netwerklaag verbonden zijn. De netwerklaag bepaald dan naar welk netwerk de data gestuurd moet worden.
De transportlaag zorgt voor de distributie naar de juiste service in de applicatielaag. Er kunnen namelijk meerdere services in een applicatielaag geïnstalleerd zijn. Elke geïnstalleerde service verricht een specifieke taak en wordt via een poort-nummer geïdentificeerd. Een geïnstalleerde service wordt ook wel server genoemd. Een server verricht dus een specifieke taak en wordt geïdentificeerd door een uniek poortnummer. De poortnummers lopen van 0 tot 65536.

Link laag:
Deze laag is verantwoordelijk voor het ontvangen en verzenden van data. De data wordt als pakketje verstuurd met een kop waarin informatie staat van welke computer de data af komt en naar welke computer de data toe moet. Aan elk pakketje wordt ook een checksum toegevoegd om juiste dataoverdracht te kunnen controleren.
Elke computer heeft een uniek adres, het zogenaamde IP adres. Elke netwerkkaart heeft ook een unieke code. De link laag houdt zelf een tabel bij waarin staat welk IP adres bij welke netwerkkaart code hoort. Hiervoor is het zogenaamde ARP protocol (Adress Resolution Protocol) verantwoordelijk. De tabel wordt automatisch gevuld omdat het ARP protocol de netwerkkaart code, van de computer waarnaar data verstuurd moet worden, opvraagt indien deze niet in de ARP tabel staat. De tabel wordt regelmatig ge-update om te controleren of een computer nog on-line is.
Verder zorgt een netwerk driver ervoor dat de data van- en naar het netwerk gestuurd wordt.

Netwerk laag:
Indien er meerdere netwerken op een computer aangesloten zijn, zorgt de netwerklaag ervoor dat de data naar het juiste netwerk gestuurd wordt. Het zogenaamde IP protocol (Internet Protocol) is hiervoor verantwoordelijk. Het IP protocol houdt zelf een tabel bij waarin de route informatie opgeslagen wordt zodat de computer weet welk IP adres op welk netwerk aangesloten zit. Het IP protocol voegt ook een kop toe met extra informatie voor de transportlaag. Ook kan de netwerklaag als zogenaamde router functioneren. Deze zorgt ervoor dat de data van het ene netwerk naar het andere netwerk verstuurd wordt. De data komt dan via de netwerkkabel binnen in een linklaag. Deze linklaag stuurt de data door naar bovenliggende netwerklaag. De netwerklaag kijkt dan voor welke computer de data bedoeld is en stuurt de data dan door naar de linklaag waarop deze computer aangesloten zit (of naar de volgende router). Deze linklaag stuurt de data dan weer via een netwerkkabel weg.

Transport laag:
In deze laag wordt gekeken via welk protocol de communicatie gewenst is, bv TCP protocol (Transport Control Protocol) of UDP protocol (User Datagram Protocol). Het TCP protocol is erg betrouwbaar omdat er eerst een verbinding opgebouwd moet worden en elke dataoverdracht door de ontvanger bevestigd moet worden. UDP daar en tegen hoeft niet eerst een verbinding op te bouwen en de dataoverdracht hoeft ook niet bevestigd te worden. Daarom is UDP dataoverdracht sneller dan TCP. Het is aan de programmeur welk protocol hij gebruikt.
TCP en UDP zullen altijd naar het meegestuurde poortnummer kijken om te weten voor welke server de data bestemd is.
Ook de TCP en UDP protocollen voegen een kop met extra informatie toe aan de data.

Applicatie laag:
In deze laag worden de servers geïnstalleerd welk op een computer gewenst zijn. De server die wil communiceren met een andere server stuurt eerst een aanvraag weg. Deze aanvraag wordt dan via de transportlaag en de netwerklaag naar de linklaag getransporteerd waarna het pakketje het netwerk op gestuurd wordt. De desbetreffende netwerkkaart ontvangt het pakketje en stuurt deze via de netwerklaag en transportlaag naar de juiste server van de ontvangende computer. Deze bevestigt al dan niet de aanvraag of stuurt de gevraagde data in omgekeerde route terug. Enkele voorbeelden van servers zijn:

Poort   7: Echo, een service om te antwoorden als het IP adres aangeroepen wordt
Poort 13: DayTime , een service om de datum en tijd op te vragen
Poort 21: FTP (File Transfer Protocol), een service voor file handling
Poort 23:Telnet, een service om terminal-achtige commando’s te kunnen geven
Poort 25: SMTP (Simple Mail Transfer Protocol), een service voor mail handling
Poort 80: WWW-HTTP, een service om op internet te surfen

Communicatie:
Hoe verloopt nu de communicatie tussen 2 computers in een netwerk? Als eerste zal er een verbinding gemaakt moeten worden met het netwerk. Dit kan dmv bv een ethernet kaart of een modem met een aanlog/inbel protocol. Wanneer de verbinding tot stand gebracht is, zoekt de aanvragende server contact met de ontvangende server. Wanneer er contact gemaakt wordt met 2 gelijke servers spreekt men ook wel van peer-to-peer communicatie. Als het contact van weerszijden bevestigd is, is er heen en weer gecommuniceerd via welk protocol er gecommuniceerd moet worden, welke blockgrootte er overgestuurd moet worden en nog meerdere opties afhankelijk van het protocol. Daarna zal er data verstuurd worden.
Normaal gesproken zal, wanneer alle data verstuurd is, de aanvrager de verbinding moeten verbreken. De verbinding kan echter ook verbroken worden door bv een timeout error (het duurt te lang voor er antwoord komt) of de ontvanger die bepaald dat de verbinding verbroken moet worden.
Tegenwoordig is het meest gebruikte internet protocol TCP (Transport Control Protocol) en IP (Internet Protocol), vandaar de term TCP/IP netwerk. Dit is ook het protocol wat ik hieronder verder wil bespreken omdat hiervan de mogelijkheden het uitgebreidste zijn.

Atomic Link laag:
Je moet beginnen met de bodem en dat is dit geval de link laag. Het is mogelijk om op verschillende manieren een netwerk verbinding maken maar ik wil me beperken tot een netwerkverbinding via de seriële poort. Je hebt dan een aantal zaken nodig, zoals een hardware interface, een driver en een aanlog protocol:

Hardware interface:
Om de hoeveelheid werk te reduceren en compatible te zijn met de Atom emulator van Wouter Ras, heb ik gekozen om een ISA-slot te maken welke aan een originele Atom geknoopt is. De I/O adressen van de PC (#000-#3FF) worden geprojecteerd op de Atom adressen #B400-#B7FF. Het voordeel is dan ook dat er in de toekomst eventueel andere PC-kaarten ingeprikt kunnen worden om aangestuurd te worden via de Atom.
De adreslijnen A0-A9 en datalijnen D0-D9 worden op het ISA-slot aangesloten. Verder heb ik een externe decodering voor de Atom adressen #B400-B7FF op het printje van het ISA-slot geplaatst, welke er voor zorgt dat het ISA-slot enabled wordt. Ook heb ik in mijn Atom een PC-voeding geplaatst en de voedingsspanningen –5V, +5V, -12V, +12V en GND rechtstreeks aangesloten op het ISA-slot. Het principe schema ziet er als volgt uit:

internet3.gif
Principeschema ISA sloten

20021027.gif
Schema (voor het originele Schema )

Driver:
De driver verzorgt het versturen en ontvangen van seriële data. Er worden een aantal flags gezet afhankelijk van de gebeurtenis zoals bv. Verbinding ok, Data ontvangen, Klaar voor data versturen en Timeout error. Het TCP protocol is een programma lus waarin constant gekeken wordt of er een data pakketje binnengekomen is. Wanneer dit het geval is (Flag Data ontvangen is gezet) zal het pakketje ontdaan worden van alle Link laag informatie. Dan wordt het pakketje doorgegeven aan het IP protocol welke zijn informatie verwijdert. Het IP protocol geeft het pakketje door aan de transportlaag welke kijkt of het een TCP- dan wel UDP pakketje is. Het desbetreffende protocol verwijdert de TCP-/UDP informatie en kijkt voor welke poort het pakketje bestemd is. Het data pakketje zal dan door de juiste server afgehandeld worden.

Aanlog protocol
De Atom wordt via zijn seriële kaart met een nullmodem kabel verbonden met de seriële poort van de PC. Op de PC moet dan een server geïnstalleerd worden welke data-communicatie via de seriële poort verzorgt. Wanneer dit gebeurd is, kan de Atom volgens een aanlog protocol in het netwerk inloggen. Ik gebruik het PPP protocol (Point-to-Point Protocol) voor het aanloggen in mijn PC-netwerk. Het PPP protocol werkt volgens onderstaand schema:

internet4.gif

LCP= Link Control Protoco
PAP= Password Authentification Protocol
IPCP= Internet Protocol Control Protocol

PPP Protocol
Atomic Netwerk laag:
Dit is een eenvoudig stuk binnen de Atom. Omdat er maar 1 netwerk verbinding is, hoeft het IP protocol alleen maar een kop en een checksum toe te voegen. Normaal gesproken houdt het IP protocol een route tabel bij waarin staat welk IP adres naar welke netwerk kaart gestuurd moet worden maar dat is hier niet van toepassing.

Atomic Transport laag:
Dit is het moeilijkste stukje software omdat dit de spil is waarop het TCP/IP netwerk draait. Wanneer de Atom als server dient zal de software in een programmalus draaien waarin constant gekeken wordt of er een data pakketje binnen gekomen is. Indien dit het geval is zal het pakketje ontdaan worden van de linklaag header en daarna de netwerklaag header. In de transportlaag header staat welk protocol gebruikt gaat worden, TCP of UDP. Ook is er in de header vermeld voor welk poortnummer de data bestemd is. Wanneer het protocol TCP is, zal er eerst verbinding gemaakt moeten worden met de aanvragende computer op TCP nivo. Wanneer deze verbinding tot stand is gebracht, zal de verder binnenkomende data aan het juiste TCP-poortnummer doorgegeven worden.
Wanneer het protocol UDP is, zal de data rechtstreeks aan het juiste UDP-poortnummer doorgegeven worden zonder eerst een verbinding opgebouwd te hebben.

Atomic Applicatie laag:
Hier kan het experimenteren beginnen, er zijn talloze servers welke geïnstalleerd kunnen worden. Ik wil eenvoudig beginnen en een Ping-server schrijven zodat ik op mijn PC de Atom aan kan roepen via een ping aanvraag. Indien dit lukt werken er al diverse protocollen en kan ik verder gaan met testen. De volgende stap is dan om via FTP, data overdracht mogelijk te maken. Er kunnen dan files overgestuurd worden van en naar de PC. Ook wil ik eens experimenteren om bij mijn internet provider in te loggen met het PPP protocol om zo via TCP-poort 80 het internet op te kunnen. Je moet dan een aanvraag doen bij een site en krijgt dan de file index.html terug. Dit is de algemene startpagina van een site.

Andere projecten op internet:
Wanneer je op internet surft en zoekt naar internet verbindingen met 8-bits microcomputers, dan kom je een heleboel interessante sites tegen. Er is namelijk al heel veel geëxperimenteerd op dit gebied. Enkele projecten zijn bv.:

  • TinyTCP, een TCP/IP-programma geschreven in C voor minimaal geheugengebruik,
  • ICE, een koppeling van een Atari met internet,
  • UIP, ook een TCP/IP-programma met alleen de hoogst noodzakelijke functies geïmplementeerd, geschreven in C voor minimaal geheugengebruik,
  • CC65, een C-compiler voor de 6502 welke gebruikt kan worden om bovenstaande C-programma’s te compileren
Zoals je ziet is er genoeg informatie te vinden over dit interessante onderwerp.

Het geheel is op het moment van schrijven nog in experimentele fase en ik ben begonnen met het maken van een ISA uitbreidings slot. Er is dus nog veel te doen.

Groeten, Kees van Oss
../../../images/back.gif ../../../images/exit.gif ../../../images/forward.gif