Forum: Markt TCP: Verbindung aufbauen


von Martin (Gast)


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

von Martin (Gast)


Lesenswert?

Falsches Forum, bitte verschieben!!

von (prx) A. K. (prx)


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.

von Simon K. (simon) Benutzerseite


Lesenswert?

Das kann auch an deinem Stack liegen, aber wer soll die Frage so schon 
beantworten.

von (prx) A. K. (prx)


Lesenswert?

Sein Stack ist doch der Server und der Wireshark sitzt folglich auf 
dem Client. Wenn sein Stack also Mist baut, dann muss dieser Mist in den 
protokollierten Daten drinstehen.

von Martin (Gast)


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

von Simon K. (simon) Benutzerseite


Lesenswert?

Achso, das habe ich nicht richtig gesehen. Aber letztendlich hatte ich 
doch recht. Aber was soll es auch anderes gewesen sein :D

von (prx) A. K. (prx)


Lesenswert?

Martin schrieb:

> Keine Ahnung warum Wireshark es ausgeschalten hat defaultmäßig.

Chips für Gigabit-Ethernet berechnen die Checksum oft selbst, was dann 
zur Folge hat, dass der sie davor abfangende Wireshark die ausgehenden 
Frames mit Checksum-Fehler protokolliert.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.