Offset:
Hexadecimal
ASCII
------- -----------
-----
0:
00e0 1ede 72d6 0800 2073 5ec6 0800 4500 ....r... s^...E.
16: 003c
0a1c 4000 ff06 ____ a8b0 0319 a8b0 .<..@...........
32: 036c
0015 0593 2950 13c0 008a caca 5018 .l....)P......P.
48: 2398
9b4a 0000 3230 3020 5479 7065 2073 #..J..200 Type s
64: 6574
2074 6f20 412e 0d0a
et to A...
Solución: Recordemos que el texto del RFC791 dice lo siguiente acerca del cálculo del campo del checksum para IP:
[...]
Header Checksum: 16 bits A checksum on the header only. Since some header fields change (e.g., time to live), this is recomputed and verified at each point that the internet header is processed. The checksum algorithm is: The checksum field is the 16 bit one's complement of the one's complement sum of all 16 bit words in the header. For purposes of computing the checksum, the value of the checksum field is zero. This is a simple to compute checksum and experimental evidence indicates it is adequate, but it is provisional and may be replaced by a CRC procedure, depending on further experience. [...]Es decir que el checksum para IP sólo se calcula sobre los octetos que componen el header de IP.
También debemos recordar los formatos del frame Ethernet y el header IPv4:
Formato del frame Ethernet (el tamaño de los campos está en bytes)
Ahora debemos separar del frame el header IPv4 (que es el que nos interesa para hacer nuestros cálculos):Formato del header de IPv4
4500 003c \ 0a1c 4000 | ff06 ____ > Header IPv4 a8b0 0319 | a8b0 036c /Ahora debemos sumar, con aritmetica complemento a uno, todos los campos que componen el header IP, como palabras de 16 bits
Primero sumaremos los primeros 5 enteros de 16 bits que conforman el header IP:
[Hex] Binario
[4500] 0100010100000000
[003c] 0000000000111100
[0a1c] 0000101000011100
[4000] 0100000000000000
[ff06] 1111111100000110
[18E5E] 11000111001011110
--> 1000111001011110 + 1 = 1000111001011111
[8E5F]
Ahora sumaremos los otros campos que faltan del header IP:
[Hex] Binario
[0000] 0000000000000000
[a8b0] 1010100010110000
[0319] 0000001100011001
[a8b0] 1010100010110000
[036c] 0000001101101100
[157E5] 10101011111100101
--> 0101011111100101 + 1 = 0101011111100110
[57E6]
Finalmente sumamos los dos resultados parciales para obtener el total:
[Hex] Binario
[8E5F] 1000111001011111
[57E6] 0101011111100110
[E645] 1110011001000101
[Algoritmo
de checksum de Internet]
[Checksum en IP]
[Checksum en
UDP]
[Checksum en
TCP]