IP-Stack



  • Hallo Leute,

    gibt es ein Tutorial ueber TCPIP-Stack?
    versuche einen eignen TCPIP-Stack zu bauen, braeuchte aber mehr Informationen.

    Gruss Olli.



  • google??

    wofür denn? reichen dir die sockets nicht?



  • DocJunioR schrieb:

    google??

    wofür denn? reichen dir die sockets nicht?

    Google hat zwar einiges ausgespuckt, aber ohne Beispiel-Code.

    Das Project muss in DOS, EPROMS, WIN32 und LINUX lauffaehig sein.
    Darum ist es besser, wenn das Programm einen eignen IP-Stack besitzt.

    Das Project hat zwar einen IP-Stack, aber es fehlt noch das TCP-Protokoll. z.b. Ping-Befehl funktioniert in allen OS-Systeme. Es soll aber auch
    Telnet und andere Dienste verarbeiten koennen.

    Gruss Olli.



  • Viel Spaß dabei, wenn du fertig bist, kannste dich ja mal melden ( So in 3 Jahren, wenn du gut bist) 😃



  • Da gibt es bereits Projekte wie http://www.sics.se/~adam/lwip/ (steht unter der BSD-Lizenz)

    Ansonsten musst du eben fleißig RFCs lesen und folgendes Buch dürfte dich ganz besonders interessieren
    TCP/IP Illustrated: The implementation | ISBN: 020163354X

    @MisterX
    Das Projekt ist doch absolut nicht übertrieben. Niemand erwartet einen hoch optimierten und tausend Protokolle unterstützenden TCP/IP-Stack, wie ihn Kernel wie Linux oder BSD benutzen.



  • kingruedi schrieb:

    Da gibt es bereits Projekte wie http://www.sics.se/~adam/lwip/ (steht unter der BSD-Lizenz)

    Ansonsten musst du eben fleißig RFCs lesen und folgendes Buch dürfte dich ganz besonders interessieren
    TCP/IP Illustrated: The implementation | ISBN: 020163354X

    @MisterX
    Das Projekt ist doch absolut nicht übertrieben. Niemand erwartet einen hoch optimierten und tausend Protokolle unterstützenden TCP/IP-Stack, wie ihn Kernel wie Linux oder BSD benutzen.

    Hauptsächlich soll Telnet funktionieren.
    Danke fuer den TIPP mit dem Buch.

    Hab da gleich eine Frage

    CLIENT:
    IP : len 48 10.10.190.5->10.10.150.200 ihl 20 ttl 128 prot TCP
    TCP: 3458->23 Seq xEE1594A1 Ack x00000000 SYN Wnd 16384 MSS 1460
    
    SERVER
    IP : len 48 10.10.150.200->10.10.190.5 ihl 20 ttl 63 DF prot TCP
    TCP: 23->3458 Seq x77DDEB28 Ack xEE1594A2 ACK SYN Wnd 5840 MSS 1460
    

    Der Client sendet Sequence Nr. xEE1594A1 und Acknowlegde Nr. x00000000 zum Server.
    Der Server antwortet mit Sequence Nr. ??!?! und Acknowlegde Nr. vom Client + 1 xEE1594A2.

    Wie wird die Sequence Nr. "x77DDEB28" erstellt ? Da bin ich noch nicht dahinter gestiegen:((

    Gruss Olli.



  • Is' bei mir jetzt 'ne ganze Ecke her, aber die könnte ja ebenso wie beim Client "pseudo-zufällig" sein.



  • Sgt. Nukem schrieb:

    Is' bei mir jetzt 'ne ganze Ecke her, aber die könnte ja ebenso wie beim Client "pseudo-zufällig" sein.

    Richtig:
    Die SEQ-Nummern werden von den jeweiligen Hosts *generiert* (bei den ersten im 3WH ausgetauschten SEQ-Nummer kann man also von initialen Sequenznummern sprechen).

    Trotzdem habe ich noch ein Problem, das Frame vom Server zum Client sieht
    z.Z. so aus:

    CLIENT 1.Frame:
    IP : len 48 10.10.190.5->10.10.40.1 ihl 20 ttl 128 prot TCP
    TCP: 3237->23 Seq x546EC8EE Ack x00000000 SYN Wnd 16384 MSS 1460
    
    SERVER 1.Frame:
    IP : len 40 10.10.40.1->10.10.190.5 ihl 20 ttl 31 prot TCP
    TCP: 23->3237 Seq x85BE2E1E Ack x546EC8EF ACK SYN Wnd 16384 Data 20
    @WLÑà¥.^Tn+´@R@@þ¢@@
    

    Mein TCP-Header wird wie folgt gefüllt:
    /* Dest-Port 16Bit. (23)/
    put16((unsigned short)tcp.dstPort, bp);
    /* Source-Port 16Bit. (3237)
    /
    put16((unsigned short)tcp.srcPort, bp);
    /* Seq-Nummer 32Bit (x85BE2E1E) */
    put32((unsigned long)tcp.acknum, bp);
    /* Ack-Nummer 32Bit (x546EC8EF + 1) */
    put32((unsigned long)++tcp.seqnum, bp);
    /* TCP-Flags SYN + ACK. /
    put16((unsigned short)tcp.flags, bp);
    /* Fenstergroesse.
    /
    put16((unsigned short)tcp.window, bp);
    /* Checksum */
    put16((unsigned short)checksum, bp);
    /* Urgent Pointer */
    put16((unsigned short)tcp.urgentPointer, bp);

    Versteh das nicht, das im Server-Frame die Data 20 (@WLÑà¥.^Tn+´@R@@þ¢@@)
    erreicht.

    Gruss Olli.



  • Im TCP-Header koennen auch OPTIONEN sein,
    wie z.B. die MSS Maximum Segment Size.

    Ich braeuchte eine genauere Beschreibung von allen 4 16Bit eintraegen:
    1.Option ??? (bekomme vom Nachbarn ein wert von 516)
    2.Option 1460 das ist die Maximum Segment Size
    2.Option ??? (bekomme vom Nachbarn ein wert von 257)
    3.Option ??? (bekomme vom Nachbarn ein wert von 1026)

    Was bedeuten die 516, 257 und 1026?

    Danke im vorraus, gruss Olli.



  • es gibt laut rfc793 nur 3 options die alle tcp's können müssen. 0,1 und 2 (mss, nop und end-of-option list). natürlich kann man auch selber eigene options anhängen, aber die werden wohl von den meisten tcp's ignoriert

    btw: einen recht guten tcp-stack gibt es auch hier: http://sourceforge.net/projects/opentcp


Anmelden zum Antworten