Véase la definición de cabecera TCP en /netinet/tcp.h:¿Por qué un campo de 8 bits tiene endianness?
struct tcphdr
{
u_int16_t th_sport; /* source port */
u_int16_t th_dport; /* destination port */
tcp_seq th_seq; /* sequence number */
tcp_seq th_ack; /* acknowledgement number */
# if __BYTE_ORDER == __LITTLE_ENDIAN
u_int8_t th_x2:4; /* (unused) */
u_int8_t th_off:4; /* data offset */
# endif
# if __BYTE_ORDER == __BIG_ENDIAN
u_int8_t th_off:4; /* data offset */
u_int8_t th_x2:4; /* (unused) */
# endif
u_int8_t th_flags;
# define TH_FIN 0x01
# define TH_SYN 0x02
# define TH_RST 0x04
# define TH_PUSH 0x08
# define TH_ACK 0x10
# define TH_URG 0x20
u_int16_t th_win; /* window */
u_int16_t th_sum; /* checksum */
u_int16_t th_urp; /* urgent pointer */
};
¿Por qué el campo de 8 bits tienen un orden diferente en el orden de bits? Pensé que solo los campos de 16 bits y 32 bits importaban con el orden de bytes, y se podía convertir entre endians con ntohs y ntohl, respectivamente. ¿Cuál sería la función para manejar cosas de 8 bits? Si no hay ninguno, parece que un TCP que usa este encabezado en una pequeña máquina endian no funcionaría con un TCP en una máquina endian grande.
extraño en verdad, en el que el sistema ha encontrado esta archivo de cabecera? – fbonnet
debian linux. esta versión está incluida si __USE_BSD está #defined. – Claudiu