[alg/asm] internet/netwerk (-kaart) en de protocollen

Pagina: 1
Acties:

  • wacco
  • Registratie: Augustus 2002
  • Laatst online: 21-03-2023

wacco

cli, hlt.

Topicstarter
Wat ik eigenlijk wil vragen is een hoop info. En voordat jullie nou allemaal RTFM! of "zie de policy" beginnen te roepen: hear me out first. please. :)

Laat ik eerst even een reden geven waarom ik dit wil weten. Ik wil op een paar oude pc's in m'n eigen OS-in-wording internet/netwerk krijgen. En daarvoor moet ik weten hoe dus het hele verhaal werkt. Maar jammer genoeg is informatie vinden een pittige klus (vind maar eens de goede keywords) en dus ben ik een beetje vast gelopen.

Mijn eerste probleem is al het aanspreken van een netwerk kaart of modem. Ik zal netwerk kaarten moeten gaan aanspreken, maar informatie over routers / modems aanspreken is ook erg welkom (en ook over PPP inbellen ed). Voor de netwerk kaarten die in een pci slot geprikt worden moeten de interrupts afgehandeld worden, en ik heb het idee dat hier standaarden voor ontwikkeld zijn. Of in ieder geval: dat deze 'drivers' niet te complex zijn. Maar weet iemand ook RFC nummers of iets vergelijkbaars?

Dan: netwerkprotocollen. Enig keyword is al welkom want ik heb geen flauw idee. D'r staan verder alleen windows computers aangesloten op het netwerk. Hoe wordt het dynamische IP geregeld? Hoe steekt het 'delen van de internetverbinding' in elkaar? Worden die packets gewoon het netwerk opgeschopt? En als dat zo is kan ik dan concluderen dat het netwerk ook gewoon TCP/IP gebruikt?

Ten slot het TCP/IP in het algemeen. TCP draait op het IP. Ik vind dit nogal moeilijk in te beelden. Moet ik dit nu zien als volgt: [ip header met info over grootte packet][tcp header][data blok][tcp afsluiting][ip afsluiting]? En een meer praktischere vraag: moet ik zo'n packet helemaal kant en klaar maken en afleveren bij m'n netwerk kaart of vertel ik mijn netwerk kaart welk ip / poort etc, en geef ik hem later een stukje data waarna dit automatisch allemaal geregeld wordt?

Ik heb op het moment als leesvoer liggen:
de Art of Assembly volledig, zit nu ergens in hoofdstuk 5 en 6 tegelijk (array's ging m'n neus uit hangen dus ik was alvast aan 6 begonnen). Verwacht zeer binnenkort dus te weten hoe ik PCI kaarten kan aanspreken en hoe ik iets van interrupts kan instellen zodat die goed worden afgehandeld.
RFC 760 DoD standard internet protocol
RFC 762 Assigned numbers
RFC 768 UDP
RFC 791 IP
RFC 793 TCP
Ik heb ze nog niet helemaal gelezen, maar dit hebben m'n zoekacties tot nu toe opgeleverd. Ik vraag me een beetje af wat ik met 762 moet, maar daar werd door de andere naar verwezen dus ik denk dat ik daar snel genoeg achter ben. :) Verder vraag ik me een beetje af wat de verschillen zijn tussen 760 en 791. En of iemand goede RFCs weet over netwerkprotocollen. De google directory kon me daar niet echt op weg helpen.

Dus, kort samengevat (ik zwam te langdradig ;)), wie kan me helpen aan;
- het paginanummer waar AoA over PCI kaarten begint of een goed document dat hier op in gaat?
- RFCs of vergelijkbaar over netwerken
- RFCs of vergelijkbaar over aanmeldingsprotocollen op netwerken (en dus ook het internet)
En dan de programmeerzijde van het hele verhaal:
- documentatie over het aanspreken van routers/modems via COM
- documentatie over initialisatie en aansturing van netwerk kaarten

Nogmaals: ik heb me het ongans gezocht en heb dus ook wat RFCs gevonden, maar er is niet een goede search voor RFCs en die dingen zijn vreselijk genummerd, en ze gaan niet erg in op de programmeer kant van het verhaal.
Wat ik nog kan bedenken is linux source waar ik uit kan afleiden hoe het werkt, maar dat is ook een redelijk onmogelijke taak als ik niet weet waar ik moet beginnen met zoeken. Als iemand weet waar een goed gecommentariseerd asm/c/c++ document staat dat bijvoorbeeld een netwerk kaart initialiseerd zou me dat erg helpen.

Niet erg GoT policy like (je hoeft niet te bedanken), maar toch bedankt voor het lezen van deze lap tekst. ;)

Spolap: Interactive webcomic


  • madwizard
  • Registratie: Juli 2002
  • Laatst online: 26-10-2024

madwizard

Missionary to the word of ska

Op rfc-editor.org kun je RFC's zoeken op keyword (en op nummer e.d.). Een goed keyword voor algemene info over netwerken is OSI model (Open System Interconnection), dat is een standaardmodel voor netwerk implementatie (het beschrijft de verschillende lagen) TCP/IP komt in grote lijnen daarmee overeen.

De hele implementatie van TCP/IP wordt een TCP/IP stack genoemd (goed keyword), omdat inderdaad de verschillende protocol lagen op elkaar 'gestapeld' zijn. TCP draait bovenop IP, de headers/trailers zullen dus zo zijn als je al in je voorbeeld aangaf. Volgens het OSI model horen alle lagen volledig uitwisselbaar te zijn. Dat wil zeggen dat als je bijvoorbeeld de transport layer zou kunnen vervangen door een compleet ander protocol terwijl de andere lagen nog steeds hetzelfde doen. Bij TCP/IP zou dat ook kunnen tot op zekere hoogte.

In zo'n protocol stack heeft iedere laag z'n eigen functie. Meestal plakt elke laag een header/trailer aan de data van de vorige laag (de payload) toe. Aan de ontvangerskant wordt een pakket weer in omgekeerde volgorde door alle lagen gesluisd, waarbij steeds meer headers en trailers verwijderd worden.

Als je zoekt op OSI model of TCP/IP stack moet je een hoop info kunnen vinden denk ik. Het boek 'computer networks' van Tanenbaum legt dit alles ook redelijk gedetaileerd uit.

Voor wat je OS betreft zul je dus zo'n complete stack moeten bouwen, uiteindelijk houd je dan raw data over die je naar je netwerkkaart kan sturen.

Met het aanspreken van netwerkkaarten heb ik geen ervaring, hangt waarschijnlijk ook af van de fabrikant enzo.. Misschien dat er standaarden voor zijn of in ieder geval specs voor de meestgebruikte chips. Ik weet niet of AoA dit soort dingen uitlegd, het is wat te specifiek.

Dynamische IPs worden doorgaans via DHCP geregeld, dat bovenop IP draait (dacht ik?). "internet delen" wordt geimplementeerd met network address translation (ook een goed keyword), wat voornamelijk neerkomt op het routen van pakketjes in je interne netwerk naar het externe netwerk en andersom, rekening houdend met het aanpassen van lokale IPs naar en van je externe IP.
Het is veel te veel om uit te leggen in een post maar met de bovenstaande zoekwoorden moet je een heel eind komen denk ik.

www.madwizard.org


  • wacco
  • Registratie: Augustus 2002
  • Laatst online: 21-03-2023

wacco

cli, hlt.

Topicstarter
Okee dan, super! Al ben ik wel benieuwd naar hoe iets (DHCP) dat de ip adressen moet regelen bovenop het protocol kan werken dat het ip adres al bevat... :)
Ik denk dat ik wel weer genoeg stof kan vinden om me een weekje zoet te houden.

Spolap: Interactive webcomic


  • Nexopheus
  • Registratie: Juni 2001
  • Laatst online: 28-01 13:50

Wat niet kan is nog nooit gebeurd


  • madwizard
  • Registratie: Juli 2002
  • Laatst online: 26-10-2024

madwizard

Missionary to the word of ska

wacco schreef op 01 March 2003 @ 11:10:
Okee dan, super! Al ben ik wel benieuwd naar hoe iets (DHCP) dat de ip adressen moet regelen bovenop het protocol kan werken dat het ip adres al bevat... :)
Volgens mij draait het zelfs nog bovenop UDP. Het is mogelijk zonder IP door broadcast adressen te gebruiken (255.255.255.255). Die worden over het hele netwek gebroadcast en de DHCP server zal het dus ook ontvangen. De repsonse van de DHCP server wordt ook weer gebroadcast en de juiste client zal het pakket eruit pikken.
Chapter 1 & 2 (van de network tutorial) leggen TCP/IP in grote lijnen wel uit maar niet gedetaileerd genoeg om je eigen TCP/IP stack te schrijven (maar genoeg om met winsock te beginnen).

www.madwizard.org


  • Rukapul
  • Registratie: Februari 2000
  • Laatst online: 23-08 14:24
Zou je niet wat kleinere stukken in een keer proberen te behapstukken? Eerst maar eens een ethernetframe van je netwerkkaart kunnen aflezen lijkt me al een hele klus door een driver te schrijven. Bovendien ben je er met de TCP/IP protocollen die je noemt er nog niet. Daarvoor zul je al ARP moeten implementeren om de binding ethernet/MAC <> IP te laten werken.

De tip is al gegeven om naar het OSI model te kijken en dat kun je dus beter ook even doen en vervolgens de software van onder naar boven te schrijven en je niet druk te maken over alle lagen tegelijk.

  • wacco
  • Registratie: Augustus 2002
  • Laatst online: 21-03-2023

wacco

cli, hlt.

Topicstarter
ARGH! ik een reply tikken, mikt internet er weer uit en crasht internet explorer. :(
Rukapul schreef op 01 March 2003 @ 11:55:
Zou je niet wat kleinere stukken in een keer proberen te behapstukken? Eerst maar eens een ethernetframe van je netwerkkaart kunnen aflezen lijkt me al een hele klus door een driver te schrijven. Bovendien ben je er met de TCP/IP protocollen die je noemt er nog niet. Daarvoor zul je al ARP moeten implementeren om de binding ethernet/MAC <> IP te laten werken.
Ethernetframe van m'n netwerkkaart aflezen, door een driver te schrijven? My point exactly! Maar hoe? :) Info vinden hierover is pure terror.

Ik heb wel een goed stuk info gevonden over DHCP (RFC2131) maar dat ben ik nog aan het lezen. Over ARP kan ik (nog) niets vinden. Ook heb ik een beetje moeite met PPP; ik dacht dat dit gebruikt werd om je aan te melden op een netwerk. En dan specifiek voor het aanmelden bij je internetprovider. Toch heb ik het idee dat het ietsje anders in elkaar steekt. Iemand enig idee?

Die pagina die Nexopheus gaf is aardig, maar ik zit niet echt meer te wachten op een socket tutorial. :) Na een complete IRC client en bot geschreven te hebben in visual basic, en een hoop ge-experimenteer met sockets in c vond ik het tijd worden om juist een tandje lager te gaan; internet in assembly. Jammer genoeg zijn er nogal weinig zotten me voorgegaan en is informatie hierover dus schaars. :)

-edit-

Na nog wat speurwerk kwam ik een site tegen die verwees naar source files van linux. Laat ik nou net geen linux hebben, maar wel een enorme intresse in deze source. :) Weet iemand waar ik uit een linux distro de volgende bestanden kan bemachtigen zonder de complete linux source binnen te hoeven halen? Ik zit hier nog steeds op een wanadoo cable...
/kernel (source tree denk ik?) /drivers/net, en dan maar net wat daarin staat.

Volgens mij zijn vele kaarten PCI NE2000 (of NEx000) compatible, en zou je dit als een 'standaard' kunnen zien. Hier zijn ook 'drivers' voor geschreven, weet iemand waar deze source op te duikelen valt? (Het zal me eigenlijk niets verbazen als die dus in de /drivers/net staan van die kernel source tree :))

[ Voor 21% gewijzigd door wacco op 01-03-2003 12:46 ]

Spolap: Interactive webcomic


  • MisterData
  • Registratie: September 2001
  • Laatst online: 09:53
Ik heb even de /usr/src/net map (zo heet 'ie hier) op m'n dedicated server ge-tar'ed en weegt nu 5 MB. Je kunt hem neerhalen op: http://213.206.89.92/~tommy/blaat.tar :)

Veel plezier ermee :P
Pagina: 1