Hola, me he encontrado con la siguiente estructura de la cabecera TCP:
# struct tcphdr // structure TCP Header
# {
# //Pour processeur de type little-endian
# unsigned short source; // port source
# unsigned short dest; // port de destination
# unsigned int seq; // Sequence number
# unsigned int ack_seq; // acknowledge sequence
#
# unsigned short res1:4, // Reserved 1 : 4 bits
# doff:4, // Data Offset
# fin:1, // Flag FINISH
# syn:1, // Flag SYNCHRONIZE
# rst:1, // Flag RESET
# psh:1, // Flag PUSH
# ack:1, // Flag ACKNOLEDGE
# urg:1, // Flag URGENT
# res2:2; // Reserved 2 : 2 bits (res1 + res2 = 6 bits reserved)
#
# unsigned short window;
# unsigned short check; // checksum
# unsigned short urg_ptr; // urgent
# };
La parte intermedia:
1 unsigned short res1:4, // Reserved 1 : 4 bits
2 doff:4, // Data Offset
3 fin:1, // Flag FINISH
4 syn:1, // Flag SYNCHRONIZE
5 rst:1, // Flag RESET
6 psh:1, // Flag PUSH
7 ack:1, // Flag ACKNOLEDGE
8 urg:1, // Flag URGENT
9 res2:2; // Reserved 2 : 2 bits (res1 + res2 = 6 bits reserved)
siguiente la estructura que tiene una cabecera TCP, después del unsigned int ack_seq; vendría:
TCP header length (4bits)
6 bits reservados
1 bit de flag URG
1 bit de flag ACK
1 bit de flag PSH
1 bit de flag RST
1 bit de flag SYN
1 bit de flag FIN
entiendo que u_short son 16 bits que engloba el resto (desde la linea 1-9, donde se encuentra la parte intermedia) pero por qué en primer lugar hace res1:4, (creo que eso es que la res1 toma 4 bits) y el último lugar res2:2 si los bits reservados están entre TCP header length (doff) y fin:1??
y creo que el orden de los flags están al revés porque pone que es little-endian puede ser?
3 fin:1, // Flag FINISH
4 syn:1, // Flag SYNCHRONIZE
5 rst:1, // Flag RESET
6 psh:1, // Flag PUSH
7 ack:1, // Flag ACKNOLEDGE
8 urg:1, // Flag URGENT
pero tampoco sé qué implica ello... con little-endian, por ejemplo el campo source port, el primer bit será el menos significativo(LSB)? y al hacer la conversion con ntohs afecta en algo?
gracias por la paciencia.