Internet , TCP/IP met de Atom , deel 4 door Kees van Oss. Inleiding: Inleiding:In de vorige artikelen heb ik beschreven hoe je een seriële verbinding met de PC kunt maken en hoe het PPP protocol werkt. In dit artikel wil ik verder ingaan op hoe je een ethernet verbinding met de PC (of netwerk) maakt. Verder heb ik geëxperimenteerd om de Atom als webserver te laten functioneren en zal mijn bevindingen bewoorden. Ethernet kaart: Om een ethernet verbinding te maken heb je hardware nodig. Ik heb een PC ethernet kaart gebruikt met daarop een Realtek 8019AS chip. Deze ene chip bevat alle hard- en software om ethernet verbindingen tot stand te brengen inclusief een 16 kB RAM buffer voor packets. Ook is er een 64x16 bits EEPROM op geplaatst waarin het MAC adres (unieke code voor de ethernet kaart) en andere settings opgeslagen zijn. Hardware: Wat is er hardwarematig nodig om een ethernet verbinding met een PC te verkrijgen? Er zijn 2 mogelijkheden om de Atom met een PC te verbinden, nl:
Software: Softwarematig is er een driver nodig om de ethernet kaart aan te sturen en een of meerdere protocollen om met andere computers te communiceren (meestal TCP/IP). Het blokschema ziet er als volgt uit: In tegenstelling tot het PPP protocol en de seriële verbinding, ben je met ethernet meteen aanwezig in het netwerk vanaf het moment dat de hardware kabels ingeprikt worden. Je hoeft dus niet eerst in te loggen. MAC adres: In het netwerk zijn de computers niet, zoals bij PPP, met hun IP adres aanroepbaar maar met hun MAC adres. Dit is een 6-bytes uniek adres voor een ethernet kaart. De ethernet kaart ontvangt alle packets welke over het netwerk gestuurd worden maar filtert alleen die packets eruit welke voor jouw MAC adres of voor iedereen (Broadcast) bedoeld zijn en plaatst deze in de buffer. Het enigste wat je moet doen is kijken of er een packet binnengekomen is en als dit zo is deze vanuit het ethernet kaart buffer geheugen inlezen naar het Atom geheugen. Daarna kan de packet afgehandel worden door het protocol waarvoor het bedoeld is.
ARP: ARP (Address Resolution Protocol) is een specifiek ethernet protocol. De applicaties roepen andere computers aan met hun IP adres. De netwerk kaarten communiceren met elkaar dmv hun MAC adres. Om te weten welke computer welk IP adres en bijbehorend MAC adres heeft, is het ARP protocol van belang. Dit protocol houdt een tabel bij met IP adressen en bijbehorende MAC adressen en een timer per adres. Indien er een bepaalde tijd geen actie geweest is met een MAC-adres dan verdwijnt deze uit de ARP tabel. In DOS is deze tabel zichtbaar te maken dmv het ARP -A commando. ARP kent 2 functies, nl een Request en Reply. De opbouw van een ARP packet is als volgt: Request:
Reply:
TCP: TCP (Transport Control Protocol) is een protocol wat eerst een 1 op 1 verbinding met de aanvrager maakt voordat er data verstuurd wordt. Elk TCP packet bevat een Acknowledge en een Sequence veld wat een soort controle velden zijn om te kijken of data goed verzonden is en of dat de aanvraag voor een volgende blok data klopt. Als de verbinding eenmaal tot stand is gebracht kan het versturen van data beginnen. Dit ziet er dan als volgt uit: Wanneer er een TCP verbinding verbroken moet worden, zal dit aangevraagd moeten worden. Deze beëindigingsaanvraag verloopt als volgt: Webserver applicatie: Als test heb ik een basic webserver programma van Ben Zijlstra omgeschreven naar assembler en aangepast voor de Atom. In dit programma zitten de volgende modules:
Het programma bevat het minimale om een TCP verbinding voor HTTP tot stand te brengen. Het is echter een goed voorbeeld van hoe een webserver zou moeten werken. Meer informatie over het programma is te vinden op: Wanneer ik de Atom webserver via Explorer oproep op IP adres 192.168.0.10 dan is onderstaand beeld het resultaat: Hoe verder: Het TCP principe is nu duidelijk en moet in een dusdanige vorm gegoten worden dat het toepasbaar wordt voor de Atom. Enerzijds zou het mooi zijn om als aanvulling op COS (Cassete Operating System) en DOS (Disk Operating Sytem), NOS (Network Operating System) te introduceren waarin de standaard Load, Save, en Random Access file benadering werkt, maar anderzijds heeft een UIP project of Contiki ook wel iets om verder uit te werken. UIP is een TCP/IP stack waarin ethernet, ARP, TCP en IP verwerkt is en Contiki is een operating system met al dan niet grafische interface inclusief Web-browser, Web-server en Telnet server. Kijk maar eens op de volgende sites: UIP (http://dunkels.com/adam/uip/) en Contiki (www.dunkels.com/adam/contiki/). NOS: UIP: CONTIKI: Er is echter een probleem (of lees het als uitdaging ;-)): UIP en Contiki, met al zijn applicaties, zijn in C geschreven en met de CC65 compiler gecompileerd. Nu zijn er al diverse ports voor CC65 zoals de C64, Apple2 en de Atari maar nog niet voor de Atom. Ik ben op het moment bezig om CC65 ook naar de Atom te porten waardoor het mogelijk wordt om C programma's te compileren voor de Atom. Alles is nog in een experimentele fase omdat ik eerst uit moet zoeken hoe C en de CC65 compiler werken. Het compileren van standaard C-functies en Atom hardware afhankelijke routines naar een bibliotheek lukt maar om er een C programma met de Atom bibliotheek naar bruikbare 6502 code te compileren lukt nog niet. Er komt 6502 code uit maar de aanroep van de functies zijn nog niet juist. Hier wordt nog aan gewerkt. Tot zo ver weer mijn vorderingen en experimenten aan het Atomaire front. |