TCP: Verbindung aufbauen

Gast #1393332
Lesenswert?

Hallo an alle,

ich programmiere gerade eine TCP/IP Stack und versuche eine TCP 
Verbindung aufzubauen. Meine Hardware spielt dabei den Server. Als 
Testanwendung nutze ich Telnet.

Vom Client aus starte ich Telnet, das ein SYN-Paket an den Server 
sendet. Mein Server antwortet mit SYN+ACK. Doch der Client erkennt es 
nicht und sendet nach einem Timeout erneut ein SYN-Paket mit der selben 
Seq-Nummer wie beim ersten Versuch, anstatt mit ein ACK zu senden.

Folgenden Mitschnitt habe ich mit Wireshark gemacht:
1
No.     Time        Source                Destination           Protocol Info
2
      1 0.000000    192.168.1.139         192.168.1.222         TCP      daishi > telnet [SYN] Seq=0 Win=16384 Len=0 MSS=1460
3

4
Frame 1 (62 bytes on wire, 62 bytes captured)
5
Ethernet II, Src: GemtekTe_07:06:81 (00:1a:73:07:06:81), Dst: 34:12:78:56:34:12 (34:12:78:56:34:12)
6
    Destination: 34:12:78:56:34:12 (34:12:78:56:34:12)
7
    Source: GemtekTe_07:06:81 (00:1a:73:07:06:81)
8
    Type: IP (0x0800)
9
Internet Protocol, Src: 192.168.1.139 (192.168.1.139), Dst: 192.168.1.222 (192.168.1.222)
10
Transmission Control Protocol, Src Port: daishi (2870), Dst Port: telnet (23), Seq: 0, Len: 0
11
    Source port: daishi (2870)
12
    Destination port: telnet (23)
13
    [Stream index: 0]
14
    Sequence number: 0    (relative sequence number)
15
    Header length: 28 bytes
16
    Flags: 0x02 (SYN)
17
    Window size: 16384
18
    Checksum: 0x1cec [validation disabled]
19
    Options: (8 bytes)
20

21
No.     Time        Source                Destination           Protocol Info
22
      2 0.001834    192.168.1.222         192.168.1.139         TCP      telnet > daishi [SYN, ACK] Seq=0 Ack=1 Win=1446 Len=0 MSS=1024
23

24
Frame 2 (60 bytes on wire, 60 bytes captured)
25
Ethernet II, Src: 34:12:78:56:34:12 (34:12:78:56:34:12), Dst: GemtekTe_07:06:81 (00:1a:73:07:06:81)
26
    Destination: GemtekTe_07:06:81 (00:1a:73:07:06:81)
27
    Source: 34:12:78:56:34:12 (34:12:78:56:34:12)
28
    Type: IP (0x0800)
29
    Trailer: 0000
30
Internet Protocol, Src: 192.168.1.222 (192.168.1.222), Dst: 192.168.1.139 (192.168.1.139)
31
Transmission Control Protocol, Src Port: telnet (23), Dst Port: daishi (2870), Seq: 0, Ack: 1, Len: 0
32
    Source port: telnet (23)
33
    Destination port: daishi (2870)
34
    [Stream index: 0]
35
    Sequence number: 0    (relative sequence number)
36
    Acknowledgement number: 1    (relative ack number)
37
    Header length: 24 bytes
38
    Flags: 0x12 (SYN, ACK)
39
    Window size: 1446
40
    Checksum: 0x65f8 [validation disabled]
41
    Options: (4 bytes)
42
    [SEQ/ACK analysis]
43

44
No.     Time        Source                Destination           Protocol Info
45
      3 2.999384    192.168.1.139         192.168.1.222         TCP      daishi > telnet [SYN] Seq=0 Win=16384 Len=0 MSS=1460
46

47
Frame 3 (62 bytes on wire, 62 bytes captured)
48
Ethernet II, Src: GemtekTe_07:06:81 (00:1a:73:07:06:81), Dst: 34:12:78:56:34:12 (34:12:78:56:34:12)
49
    Destination: 34:12:78:56:34:12 (34:12:78:56:34:12)
50
    Source: GemtekTe_07:06:81 (00:1a:73:07:06:81)
51
    Type: IP (0x0800)
52
Internet Protocol, Src: 192.168.1.139 (192.168.1.139), Dst: 192.168.1.222 (192.168.1.222)
53
Transmission Control Protocol, Src Port: daishi (2870), Dst Port: telnet (23), Seq: 0, Len: 0
54
    Source port: daishi (2870)
55
    Destination port: telnet (23)
56
    [Stream index: 0]
57
    Sequence number: 0    (relative sequence number)
58
    Header length: 28 bytes
59
    Flags: 0x02 (SYN)
60
    Window size: 16384
61
    Checksum: 0x1cec [validation disabled]
62
    Options: (8 bytes)

Hat jemand eine Idee, warum der Client hier nicht mit einem ACK 
antwortet?
Ich sehe leider keinen Fehler mehr :(

Danke im Voraus
mfg Martin
#1393374
Lesenswert?

Wenn man die checksum validation ausschalten kann, dann kann man sie 
wahrscheinlich auch irgendwo einschalten. Und wenn das bedeutet, eine 
heute oft von der Netzwerkkarte selbst implementierte checksum dort 
abzuschalten.

Normalerweise zeigt der Wireshark sowohl farblich als auch im Detail an, 
wenn irgendwo der Wurm drin ist.
Gast #1393482
Lesenswert?

Hallo,

Der Tipp mit der Checksum Validation war es. Keine Ahnung warum 
Wireshark es ausgeschalten hat defaultmäßig. Dadurch wurde die falsche 
Checksumme als richtige dargestellt.

Beim berechnen der Checksumme hatte ich die Länge des TCP Headers falsch 
gehabt.

Danke!!

lg Martin

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren