Home‎ > ‎

    DSCP & TOS

    Note: I'm perfectly happy for this table and associated information to be used anywhere by anyone, that's why it's been published here, I couldn't find an easy reference, so I created one and published it for everyone, but, if you do republish the information, please attribute the source and don't try to pass it off as original work. Thanks.
     
    You have a DSCP tag on your packets, but, you can only see ToS when capturing packets? How do you work out which ToS value equates to which DSCP value? Or... You are tagging using DSCP/PHB classes but only seeing DSCP hex or decimal tags on your packets? What does it all mean? 
     
    The following table shows common decimal, hex and binary values for TOS, broken down into the meaning of the parts of that byte including DSCP values when interpretting that byte as DSCP.
     
    TOS (Dec) TOS (Hex) TOS (Bin) TOS Precedence (Bin) TOS Precedence (Dec) TOS Precedence Name TOS Delay flag TOS Throughput flag TOS Reliability flag DSCP (Bin) DSCP (Hex) DSCP (Dec) DSCP/PHB Class
    0 0x00 00000000 000 0 Routine 0 0 0 000000 0x00 0 none
    32 0x20 00100000 001 1 Priority 0 0 0 001000 0x08 8 cs1
    40 0x28 00101000 001 1 Priority 0 1 0 001010 0x0A 10 af11
    48 0x30 00110000 001 1 Priority 1 0 0 001100 0x0C 12 af12
    56 0x38 00111000 001 1 Priority 1 1 0 001110 0x0E 14 af13
    64 0x40 01000000 010 2 Immediate 0 0 0 010000 0x10 16 cs2
    72 0x48 01001000 010 2 Immediate 0 1 0 010010 0x12 18 af21
    80 0x50 01010000 010 2 Immediate 1 0 0 010100 0x14 20 af22
    88 0x58 01011000 010 2 Immediate 1 1 0 010110 0x16 22 af23
    96 0x60 01100000 011 3 Flash 0 0 0 011000 0x18 24 cs3
    104 0x68 01101000 011 3 Flash 0 1 0 011010 0x1A 26 af31
    112 0x70 01110000 011 3 Flash 1 0 0 011100 0x1C 28 af32
    120 0x78 01111000 011 3 Flash 1 1 0 011110 0x1E 30 af33
    128 0x80 10000000 100 4 FlashOverride 0 0 0 100000 0x20 32 cs4
    136 0x88 10001000 100 4 FlashOverride 0 1 0 100010 0x22 34 af41
    144 0x90 10010000 100 4 FlashOverride 1 0 0 100100 0x24 36 af42
    152 0x98 10011000 100 4 FlashOverride 1 1 0 100110 0x26 38 af43
    160 0xA0 10100000 101 5 Critical 0 0 0 101000 0x28 40 cs5
    184 0xB8 10111000 101 5 Critical 1 1 0 101110 0x2E 46 ef
    192 0xC0 11000000 110 6 InterNetworkControl 0 0 0 110000 0x30 48 cs6
    224 0xE0 11100000 111 7 NetworkControl 0 0 0 111000 0x38 56 cs7

    So, there you have it, one byte in a packet header, two ways to look at it...
    If dealing with TOS (Type of Service), the first 3 bits indicate the precedence, the 4th bit indicates the whether or not low delay is preferred, the 5th bit indicates whether or not high throughput is preferred, the 6th bit indicates whether or not high reliability is preferred and the 7th and 8th bits are reserved... More info can be found in RFC 791, written in 1981, which defines IP.
    If dealing with DSCP (Differentiated Services (Diffserv) Codepoint) only the first 6 bits are used and the last 2 are ignored... More info can be found in RFC 2474, written in 1998, which defines the Differentiated Services Field (DS Field) which is what the TOS byte is referred to when talking about differentiated services and specifically DSCP. Also, RFC 2597 and RFC 3246 which define some of the PHB (Per-hop Behaviour) classes may be useful reading...