SoloCodigo

Programación General => C/C++ => Mensaje iniciado por: Ziara en Jueves 13 de Marzo de 2008, 20:17

Título: Dudas En Un Tcp Header Struct
Publicado por: Ziara en Jueves 13 de Marzo de 2008, 20:17
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.
Título: Re: Dudas En Un Tcp Header Struct
Publicado por: Eternal Idol en Viernes 14 de Marzo de 2008, 01:09
http://en.wikipedia.org/wiki/Endianess (http://en.wikipedia.org/wiki/Endianess)

http://en.wikipedia.org/wiki/TCP_header#TC...gment_structure (http://en.wikipedia.org/wiki/TCP_header#TCP_segment_structure)