Registriert seit: 10. Sep 2004
Ort: Mönchengladbach
833 Beiträge
Delphi 7 Enterprise
|
Re: Ip-Protokoll und (CRC-16) Berechnung... Und ich versteh
14. Feb 2005, 10:11
sry erstmal, das ich erst jetzt schreibe, war mir nicht anders möglich...
Zitat von shmia:
Nicht ganz. Die Nutzdaten (Payload) gehören nicht mit in die Prüfsumme.
Grund: die Prüfsumme muss jedesmal wenn das Paket durch einen Router geht neu berechnet werden
Würden die Nutzdaten mit in die Prüfsumme einfliesen, würde das den Transport verzögern.
Nun das da 1-2Bytes Nutzdaten die Geschwindigkeit so ausbremsen ??? Der Rest muß ja auch ausgelesen werden... Irgendwie muß man ja mal zu der CRC kommen...
Zitat von shmia:
Die Prüfsumme wird über den gesamten Header gebildet; also von "Version" bis einschliesslich "Padding".
Wie soll ich denn dann auf die 24Bytes kommen? Der Header ist ohne CRC nur 18 Bytes lang... weil in dem Beispielfall kein Paddig bzw. Optionen anfielen...
Zum nächsten Erzeugt deine Funktion nen Integerüberlauf
Ok mit ausgeschalteten Überprüfungen bekomm ich zwar ein Ergebniss aber nicht das Richtige...
Das ist ein komplettes IP-Packet:
Delphi-Quellcode:
Const
cProto: Array[ $00..$2D ] Of Byte =
( $45, $00, $00, $28, $A2, $EE, $40, $00, $80, $06, $0E, $55, $C0, $A8, $64, $39,
$C0, $A8, $64, $02, $06, $4D, $01, $BD, $0A, $62, $36, $C5, $47, $E8, $96, $1E,
$50, $10, $FC, $FD, $42, $12, $00, $00, $00, $00, $00, $00, $00, $00 );
Dieses nun zerlegt:
Code:
Version (4 Bit $4 ):= 4
IHL (4 Bit $5 ):= 5 --> Headerlänge 20 Byte
Type Of Service (1 Byte $00 ):= 0
Total Length (2 Byte $0028 ):= 40
Identification (2 Byte $A2EE ):= 41710
Flags (3 Bit ):= 0 1 0
Fragment Offset (1 Byte + 5 Bit ):= 0
Time to Live (1 Byte $80 ):= 128
Protocol (1 Byte $06 ):= 6
Header Checksum (2 Byte $0E55 ):= 3669
Source Address (4 Byte $C0A86439 )
Destination Address (4 Byte $C0A86402 )
-----------------------------------------
= 20 Byte
-> 0 Byte Options + 0 Byte Padding...
-> Datenteil ( 20 Byte ):
Delphi-Quellcode:
Const
cData: Array[ $00..$13 ] Of Byte =
( $06, $4D, $01, $BD, $0A, $62, $36, $C5, $47, $E8, $96, $1E, $50, $10, $FC, $FD,
$42, $12, $00, $00 );
-> 4Bytes := $00 Padding...
Soweit so gut!
Wenn du nun aus cProto den CRC $0E55 berechnest bist mein Held/Heldin
Ich habst immernoch nicht geschafft...
Ich bin scheinbar einfach zu plöd dafür
Bye
Christian
|