Question

sur mon ubuntu 9.04 le /usr/include/netinet/tcp.h définit l'en-tête de tcp comme suit

struct tcphdr
  {
    u_int16_t source;
    u_int16_t dest;
    u_int32_t seq;
    u_int32_t ack_seq;
#  if __BYTE_ORDER == __LITTLE_ENDIAN
    u_int16_t res1:4;
    u_int16_t doff:4;
    u_int16_t fin:1;
    u_int16_t syn:1;
    u_int16_t rst:1;
    u_int16_t psh:1;
    u_int16_t ack:1;
    u_int16_t urg:1;
    u_int16_t res2:2;
#  elif __BYTE_ORDER == __BIG_ENDIAN
    u_int16_t doff:4;
    u_int16_t res1:4;
    u_int16_t res2:2;
    u_int16_t urg:1;
    u_int16_t ack:1;
    u_int16_t psh:1;
    u_int16_t rst:1;
    u_int16_t syn:1;
    u_int16_t fin:1;
#  else
#   error "Adjust your <bits/endian.h> defines"
#  endif
    u_int16_t window;
    u_int16_t check;
    u_int16_t urg_ptr;
};

Dans la section drapeaux, FIN, SYN, RST, PSH, ACK, les valeurs URG sont définies alors que je ne trouve pas la CEE et des drapeaux LRS. Que signifient les RES1, RES2 et les valeurs définies dans le Doff struct tcphdr signifie? Y at-il de toute façon d'accéder aux valeurs de la CEE et de drapeau CWR aussi?

Merci.

Était-ce utile?

La solution

Oui, ils font partie du "réservé 6 bits" (RES1 + RES2). Ils sont facultatifs et sont plus ou moins plus de resent (livre de Stevens ne les mentionne même pas). Doff est de 4 bits et spécifie la longueur d'en-tête qui est normalement 20 octets, mais peut être plus long si des options comme MSS est inclus.

Autres conseils

Je crois que vos drapeaux de la CEE et CWR TCP sont contenus dans l'élément de struct « RES2 » cette TCP Header image montre que la CEE et les bits CWR monter à côté de URG.

Perl 'NetPacket::TCP' Code TCP Encode-Decode montre l'interprétation bit ECN et le contrôle.
Cependant, le Networksorcery la page TCP est une meilleure référence pour ces bits.

# TCP Flags
use constant FIN => 0x01;
use constant SYN => 0x02;
use constant RST => 0x04;
use constant PSH => 0x08;
use constant ACK => 0x10;
use constant URG => 0x20;
use constant ECE => 0x40;
use constant CWR => 0x80;

Les deux drapeaux, 'CWR' et 'ECE' sont Explicit Congestion Notification tel que défini dans RFC 3168 .
lien Wikipédia est une bonne source d'information et mise en œuvre de support en option ECN.
Y compris le Floyd ECN Page de référence à la fin. < br> Il est important de noter que ECN est pas pris en charge à moins que les deux points de terminaison TCP sont capables.
A cette fin, il ne se voit pas souvent (sur le code de fil et TCP également).

Notez également que l'en-tête IP pour les implémentations qui prennent en charge ECN
également porter le deux bits champ ECN dans son TOS morceaux .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top