1
Lowlevel-Coding / Berechnung der Prüfsumme im TCP Header
« am: 17. October 2015, 14:08 »
Hallo zusammen,
ich beschäftige mich zur Zeit mit der Netzwerkprogrammierung und möchte (muss) zum senden von Packeten
die Prüfsumme berechnen. Die Wikipedia Artikel sind wirklich gut, jedoch verstehe ich den Satz
Hier erstmal mein empfangenes Packet als Beispiel:
44:94:FC:13:61:AE 00:1E:C9:5C:3B:FB 0800
0x45 0x0 0x34:0x0
Ident. Flags/Fragment
0x1D85 0x4000
TTL/Prot Prüfsumme
0x80/0x06 0x4C23
QuellIP A:10:A8:C0
ZielIP 58:8C:11:34
0xC01Ch 0x0050h
seqnr 0xE64C007Ch
acknr 0x3830A282h
off/flag window
0x80/0x10 0x00FE
checksum u-pointer
0xB06A 0x0
0x38 0x30 0xA2 0x82 0x8B 0x8 0x25 0xF3
0x30 0x39 0x3A 0x33 0x38 0xAA 0xF2 0x22
0xB4 0xAB 0x99 0xD4 0x30 0x31 0x39 0x30
Zur Berechnung der Prüfsumme benötige ich die fett markierten Daten (Pseudoheader)
QuellIP A:10:A8:C0
ZielIP 58:8C:11:34
Prot 0x006
Länge 0x3400
0x1 0x1 0x5 0xA 0x38 0x30 0xA2 0x6D
0x38 0x30 0xA2 0x82 0x8B 0x8 0x25 0xF3
0x30 0x39 0x3A 0x33 0x38 0xAA 0xF2 0x22
0xB4 0xAB 0x99 0xD4 0x30 0x31 0x39 0x30
Nun liegen alle Header Daten im BigEndian Format vor. Müssen die Header Daten vorher nach LittleEndian
umgewandelt werden? Wie verfahre ich dann weiter?
Gruß und Danke
Nicky
ich beschäftige mich zur Zeit mit der Netzwerkprogrammierung und möchte (muss) zum senden von Packeten
die Prüfsumme berechnen. Die Wikipedia Artikel sind wirklich gut, jedoch verstehe ich den Satz
Zitat
Die Prüfsumme ist das 16-Bit-Einerkomplement der Einerkomplement-Summe aller 16-Bit-Wörter im Header und der Nutzdaten des unterliegenden Protokollsnicht ganz...
Hier erstmal mein empfangenes Packet als Beispiel:
Zitat
Ethernet Frame (14 Byte)Ziel Mac Quelle Mac Type
44:94:FC:13:61:AE 00:1E:C9:5C:3B:FB 0800
Zitat
IP Header (20 Byte)Version IHL Gesamtlänge
0x45 0x0 0x34:0x0
Ident. Flags/Fragment
0x1D85 0x4000
TTL/Prot Prüfsumme
0x80/0x06 0x4C23
QuellIP A:10:A8:C0
ZielIP 58:8C:11:34
Zitat
TCP Header (20 Byte)s-port d-port
0xC01Ch 0x0050h
seqnr 0xE64C007Ch
acknr 0x3830A282h
off/flag window
0x80/0x10 0x00FE
checksum u-pointer
0xB06A 0x0
Zitat
Nutzerdaten (32 Byte)0x1 0x1 0x5 0xA 0x38 0x30 0xA2 0x6D
0x38 0x30 0xA2 0x82 0x8B 0x8 0x25 0xF3
0x30 0x39 0x3A 0x33 0x38 0xAA 0xF2 0x22
0xB4 0xAB 0x99 0xD4 0x30 0x31 0x39 0x30
Zur Berechnung der Prüfsumme benötige ich die fett markierten Daten (Pseudoheader)
QuellIP A:10:A8:C0
ZielIP 58:8C:11:34
Prot 0x006
Länge 0x3400
0x1 0x1 0x5 0xA 0x38 0x30 0xA2 0x6D
0x38 0x30 0xA2 0x82 0x8B 0x8 0x25 0xF3
0x30 0x39 0x3A 0x33 0x38 0xAA 0xF2 0x22
0xB4 0xAB 0x99 0xD4 0x30 0x31 0x39 0x30
Nun liegen alle Header Daten im BigEndian Format vor. Müssen die Header Daten vorher nach LittleEndian
umgewandelt werden? Wie verfahre ich dann weiter?
Gruß und Danke
Nicky