741 lines
9.8 KiB
HTML
741 lines
9.8 KiB
HTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
|
|
<HTML
|
|
><HEAD
|
|
><TITLE
|
|
>Traffic Control HOWTO</TITLE
|
|
><META
|
|
NAME="GENERATOR"
|
|
CONTENT="Modular DocBook HTML Stylesheet Version 1.7"><LINK
|
|
REL="NEXT"
|
|
TITLE="Introduction to Linux Traffic Control"
|
|
HREF="intro.html"></HEAD
|
|
><BODY
|
|
CLASS="article"
|
|
BGCOLOR="#FFFFFF"
|
|
TEXT="#000000"
|
|
LINK="#0000FF"
|
|
VLINK="#840084"
|
|
ALINK="#0000FF"
|
|
><DIV
|
|
CLASS="ARTICLE"
|
|
><DIV
|
|
CLASS="TITLEPAGE"
|
|
><H1
|
|
CLASS="title"
|
|
><A
|
|
NAME="AEN2"
|
|
></A
|
|
>Traffic Control HOWTO</H1
|
|
><H2
|
|
CLASS="subtitle"
|
|
>Version 1.0.2</H2
|
|
><H3
|
|
CLASS="author"
|
|
><A
|
|
NAME="AEN5"
|
|
>Martin A. Brown</A
|
|
></H3
|
|
><DIV
|
|
CLASS="affiliation"
|
|
><SPAN
|
|
CLASS="orgname"
|
|
> <A
|
|
HREF="http://linux-ip.net/"
|
|
TARGET="_top"
|
|
>linux-ip.net</A
|
|
>
|
|
<BR></SPAN
|
|
><DIV
|
|
CLASS="address"
|
|
><P
|
|
CLASS="address"
|
|
><TT
|
|
CLASS="email"
|
|
><<A
|
|
HREF="mailto:martin@linux-ip.net"
|
|
>martin@linux-ip.net</A
|
|
>></TT
|
|
></P
|
|
></DIV
|
|
></DIV
|
|
><P
|
|
CLASS="pubdate"
|
|
>"Oct 2006"
|
|
<BR></P
|
|
><DIV
|
|
CLASS="revhistory"
|
|
><TABLE
|
|
WIDTH="100%"
|
|
BORDER="0"
|
|
><TR
|
|
><TH
|
|
ALIGN="LEFT"
|
|
VALIGN="TOP"
|
|
COLSPAN="3"
|
|
><B
|
|
>Revision History</B
|
|
></TH
|
|
></TR
|
|
><TR
|
|
><TD
|
|
ALIGN="LEFT"
|
|
>Revision 1.0.2</TD
|
|
><TD
|
|
ALIGN="LEFT"
|
|
>2006-10-28</TD
|
|
><TD
|
|
ALIGN="LEFT"
|
|
>Revised by: MAB</TD
|
|
></TR
|
|
><TR
|
|
><TD
|
|
ALIGN="LEFT"
|
|
COLSPAN="3"
|
|
>Add references to HFSC, alter author email addresses</TD
|
|
></TR
|
|
><TR
|
|
><TD
|
|
ALIGN="LEFT"
|
|
>Revision 1.0.1</TD
|
|
><TD
|
|
ALIGN="LEFT"
|
|
>2003-11-17</TD
|
|
><TD
|
|
ALIGN="LEFT"
|
|
>Revised by: MAB</TD
|
|
></TR
|
|
><TR
|
|
><TD
|
|
ALIGN="LEFT"
|
|
COLSPAN="3"
|
|
>Added link to Leonardo Balliache's documentation</TD
|
|
></TR
|
|
><TR
|
|
><TD
|
|
ALIGN="LEFT"
|
|
>Revision 1.0</TD
|
|
><TD
|
|
ALIGN="LEFT"
|
|
>2003-09-24</TD
|
|
><TD
|
|
ALIGN="LEFT"
|
|
>Revised by: MAB</TD
|
|
></TR
|
|
><TR
|
|
><TD
|
|
ALIGN="LEFT"
|
|
COLSPAN="3"
|
|
>reviewed and approved by TLDP</TD
|
|
></TR
|
|
><TR
|
|
><TD
|
|
ALIGN="LEFT"
|
|
>Revision 0.7</TD
|
|
><TD
|
|
ALIGN="LEFT"
|
|
>2003-09-14</TD
|
|
><TD
|
|
ALIGN="LEFT"
|
|
>Revised by: MAB</TD
|
|
></TR
|
|
><TR
|
|
><TD
|
|
ALIGN="LEFT"
|
|
COLSPAN="3"
|
|
>incremental revisions, proofreading, ready for TLDP</TD
|
|
></TR
|
|
><TR
|
|
><TD
|
|
ALIGN="LEFT"
|
|
>Revision 0.6</TD
|
|
><TD
|
|
ALIGN="LEFT"
|
|
>2003-09-09</TD
|
|
><TD
|
|
ALIGN="LEFT"
|
|
>Revised by: MAB</TD
|
|
></TR
|
|
><TR
|
|
><TD
|
|
ALIGN="LEFT"
|
|
COLSPAN="3"
|
|
>minor editing, corrections from Stef Coene</TD
|
|
></TR
|
|
><TR
|
|
><TD
|
|
ALIGN="LEFT"
|
|
>Revision 0.5</TD
|
|
><TD
|
|
ALIGN="LEFT"
|
|
>2003-09-01</TD
|
|
><TD
|
|
ALIGN="LEFT"
|
|
>Revised by: MAB</TD
|
|
></TR
|
|
><TR
|
|
><TD
|
|
ALIGN="LEFT"
|
|
COLSPAN="3"
|
|
>HTB section mostly complete, more diagrams, LARTC pre-release</TD
|
|
></TR
|
|
><TR
|
|
><TD
|
|
ALIGN="LEFT"
|
|
>Revision 0.4</TD
|
|
><TD
|
|
ALIGN="LEFT"
|
|
>2003-08-30</TD
|
|
><TD
|
|
ALIGN="LEFT"
|
|
>Revised by: MAB</TD
|
|
></TR
|
|
><TR
|
|
><TD
|
|
ALIGN="LEFT"
|
|
COLSPAN="3"
|
|
>added diagram</TD
|
|
></TR
|
|
><TR
|
|
><TD
|
|
ALIGN="LEFT"
|
|
>Revision 0.3</TD
|
|
><TD
|
|
ALIGN="LEFT"
|
|
>2003-08-29</TD
|
|
><TD
|
|
ALIGN="LEFT"
|
|
>Revised by: MAB</TD
|
|
></TR
|
|
><TR
|
|
><TD
|
|
ALIGN="LEFT"
|
|
COLSPAN="3"
|
|
>substantial completion of classless, software, rules,
|
|
elements and components sections</TD
|
|
></TR
|
|
><TR
|
|
><TD
|
|
ALIGN="LEFT"
|
|
>Revision 0.2</TD
|
|
><TD
|
|
ALIGN="LEFT"
|
|
>2003-08-23</TD
|
|
><TD
|
|
ALIGN="LEFT"
|
|
>Revised by: MAB</TD
|
|
></TR
|
|
><TR
|
|
><TD
|
|
ALIGN="LEFT"
|
|
COLSPAN="3"
|
|
>major work on overview, elements, components and
|
|
software sections</TD
|
|
></TR
|
|
><TR
|
|
><TD
|
|
ALIGN="LEFT"
|
|
>Revision 0.1</TD
|
|
><TD
|
|
ALIGN="LEFT"
|
|
>2003-08-15</TD
|
|
><TD
|
|
ALIGN="LEFT"
|
|
>Revised by: MAB</TD
|
|
></TR
|
|
><TR
|
|
><TD
|
|
ALIGN="LEFT"
|
|
COLSPAN="3"
|
|
>initial revision (outline complete)</TD
|
|
></TR
|
|
></TABLE
|
|
></DIV
|
|
><DIV
|
|
><DIV
|
|
CLASS="abstract"
|
|
><A
|
|
NAME="AEN71"
|
|
></A
|
|
><P
|
|
></P
|
|
><P
|
|
> Traffic control encompasses the sets of mechanisms and operations by
|
|
which packets are queued for transmission/reception on a network
|
|
interface. The operations include enqueuing, policing, classifying,
|
|
scheduling, shaping and dropping. This HOWTO provides an introduction
|
|
and overview of the capabilities and implementation of traffic control
|
|
under Linux.
|
|
</P
|
|
><P
|
|
></P
|
|
></DIV
|
|
></DIV
|
|
><A
|
|
HREF="legalnotice.html"
|
|
>Legal Notice</A
|
|
><HR></DIV
|
|
><DIV
|
|
CLASS="TOC"
|
|
><DL
|
|
><DT
|
|
><B
|
|
>Table of Contents</B
|
|
></DT
|
|
><DT
|
|
>1. <A
|
|
HREF="intro.html"
|
|
>Introduction to Linux Traffic Control</A
|
|
></DT
|
|
><DD
|
|
><DL
|
|
><DT
|
|
>1.1. <A
|
|
HREF="intro.html#i-assumptions"
|
|
>Target audience and assumptions about the reader</A
|
|
></DT
|
|
><DT
|
|
>1.2. <A
|
|
HREF="intro.html#i-conventions"
|
|
>Conventions</A
|
|
></DT
|
|
><DT
|
|
>1.3. <A
|
|
HREF="intro.html#i-recommendation"
|
|
>Recommended approach</A
|
|
></DT
|
|
><DT
|
|
>1.4. <A
|
|
HREF="intro.html#i-missing"
|
|
>Missing content, corrections and feedback</A
|
|
></DT
|
|
></DL
|
|
></DD
|
|
><DT
|
|
>2. <A
|
|
HREF="overview.html"
|
|
>Overview of Concepts</A
|
|
></DT
|
|
><DD
|
|
><DL
|
|
><DT
|
|
>2.1. <A
|
|
HREF="overview.html#o-what-is"
|
|
>What is it?</A
|
|
></DT
|
|
><DT
|
|
>2.2. <A
|
|
HREF="overview.html#o-why-use"
|
|
>Why use it?</A
|
|
></DT
|
|
><DT
|
|
>2.3. <A
|
|
HREF="overview.html#o-advantages"
|
|
>Advantages</A
|
|
></DT
|
|
><DT
|
|
>2.4. <A
|
|
HREF="overview.html#o-disadvantages"
|
|
>Disdvantages</A
|
|
></DT
|
|
><DT
|
|
>2.5. <A
|
|
HREF="overview.html#o-queues"
|
|
>Queues</A
|
|
></DT
|
|
><DT
|
|
>2.6. <A
|
|
HREF="overview.html#o-flows"
|
|
>Flows</A
|
|
></DT
|
|
><DT
|
|
>2.7. <A
|
|
HREF="overview.html#o-tokens"
|
|
>Tokens and buckets</A
|
|
></DT
|
|
><DT
|
|
>2.8. <A
|
|
HREF="overview.html#o-packets"
|
|
>Packets and frames</A
|
|
></DT
|
|
></DL
|
|
></DD
|
|
><DT
|
|
>3. <A
|
|
HREF="elements.html"
|
|
>Traditional Elements of Traffic Control</A
|
|
></DT
|
|
><DD
|
|
><DL
|
|
><DT
|
|
>3.1. <A
|
|
HREF="elements.html#e-shaping"
|
|
>Shaping</A
|
|
></DT
|
|
><DT
|
|
>3.2. <A
|
|
HREF="elements.html#e-scheduling"
|
|
>Scheduling</A
|
|
></DT
|
|
><DT
|
|
>3.3. <A
|
|
HREF="elements.html#e-classifying"
|
|
>Classifying</A
|
|
></DT
|
|
><DT
|
|
>3.4. <A
|
|
HREF="elements.html#e-policing"
|
|
>Policing</A
|
|
></DT
|
|
><DT
|
|
>3.5. <A
|
|
HREF="elements.html#e-dropping"
|
|
>Dropping</A
|
|
></DT
|
|
><DT
|
|
>3.6. <A
|
|
HREF="elements.html#e-marking"
|
|
>Marking</A
|
|
></DT
|
|
></DL
|
|
></DD
|
|
><DT
|
|
>4. <A
|
|
HREF="components.html"
|
|
>Components of Linux Traffic Control</A
|
|
></DT
|
|
><DD
|
|
><DL
|
|
><DT
|
|
>4.1. <A
|
|
HREF="components.html#c-qdisc"
|
|
><TT
|
|
CLASS="constant"
|
|
>qdisc</TT
|
|
></A
|
|
></DT
|
|
><DT
|
|
>4.2. <A
|
|
HREF="components.html#c-class"
|
|
><TT
|
|
CLASS="constant"
|
|
>class</TT
|
|
></A
|
|
></DT
|
|
><DT
|
|
>4.3. <A
|
|
HREF="components.html#c-filter"
|
|
><TT
|
|
CLASS="constant"
|
|
>filter</TT
|
|
></A
|
|
></DT
|
|
><DT
|
|
>4.4. <A
|
|
HREF="components.html#c-classifier"
|
|
>classifier</A
|
|
></DT
|
|
><DT
|
|
>4.5. <A
|
|
HREF="components.html#c-police"
|
|
>policer</A
|
|
></DT
|
|
><DT
|
|
>4.6. <A
|
|
HREF="components.html#c-drop"
|
|
><TT
|
|
CLASS="constant"
|
|
>drop</TT
|
|
></A
|
|
></DT
|
|
><DT
|
|
>4.7. <A
|
|
HREF="components.html#c-handle"
|
|
><TT
|
|
CLASS="constant"
|
|
>handle</TT
|
|
></A
|
|
></DT
|
|
></DL
|
|
></DD
|
|
><DT
|
|
>5. <A
|
|
HREF="software.html"
|
|
>Software and Tools</A
|
|
></DT
|
|
><DD
|
|
><DL
|
|
><DT
|
|
>5.1. <A
|
|
HREF="software.html#s-kernel"
|
|
>Kernel requirements</A
|
|
></DT
|
|
><DT
|
|
>5.2. <A
|
|
HREF="software.html#s-iproute2"
|
|
><B
|
|
CLASS="command"
|
|
>iproute2</B
|
|
> tools (<B
|
|
CLASS="command"
|
|
>tc</B
|
|
>)</A
|
|
></DT
|
|
><DT
|
|
>5.3. <A
|
|
HREF="software.html#s-tcng"
|
|
><B
|
|
CLASS="command"
|
|
>tcng</B
|
|
>, Traffic Control Next Generation</A
|
|
></DT
|
|
><DT
|
|
>5.4. <A
|
|
HREF="software.html#s-imq"
|
|
>IMQ, Intermediate Queuing device</A
|
|
></DT
|
|
></DL
|
|
></DD
|
|
><DT
|
|
>6. <A
|
|
HREF="classless-qdiscs.html"
|
|
>Classless Queuing Disciplines (<A
|
|
HREF="components.html#c-qdisc"
|
|
><TT
|
|
CLASS="constant"
|
|
>qdisc</TT
|
|
></A
|
|
>s)</A
|
|
></DT
|
|
><DD
|
|
><DL
|
|
><DT
|
|
>6.1. <A
|
|
HREF="classless-qdiscs.html#qs-fifo"
|
|
>FIFO, First-In First-Out (<TT
|
|
CLASS="constant"
|
|
>pfifo</TT
|
|
> and <TT
|
|
CLASS="constant"
|
|
>bfifo</TT
|
|
>)</A
|
|
></DT
|
|
><DT
|
|
>6.2. <A
|
|
HREF="classless-qdiscs.html#qs-pfifo_fast"
|
|
><TT
|
|
CLASS="constant"
|
|
>pfifo_fast</TT
|
|
>, the default Linux qdisc</A
|
|
></DT
|
|
><DT
|
|
>6.3. <A
|
|
HREF="classless-qdiscs.html#qs-sfq"
|
|
>SFQ, Stochastic Fair Queuing</A
|
|
></DT
|
|
><DT
|
|
>6.4. <A
|
|
HREF="classless-qdiscs.html#qs-esfq"
|
|
>ESFQ, Extended Stochastic Fair Queuing</A
|
|
></DT
|
|
><DT
|
|
>6.5. <A
|
|
HREF="classless-qdiscs.html#qs-gred"
|
|
>GRED, Generic Random Early Drop</A
|
|
></DT
|
|
><DT
|
|
>6.6. <A
|
|
HREF="classless-qdiscs.html#qs-tbf"
|
|
>TBF, Token Bucket Filter</A
|
|
></DT
|
|
></DL
|
|
></DD
|
|
><DT
|
|
>7. <A
|
|
HREF="classful-qdiscs.html"
|
|
>Classful Queuing Disciplines (<A
|
|
HREF="components.html#c-qdisc"
|
|
><TT
|
|
CLASS="constant"
|
|
>qdisc</TT
|
|
></A
|
|
>s)</A
|
|
></DT
|
|
><DD
|
|
><DL
|
|
><DT
|
|
>7.1. <A
|
|
HREF="classful-qdiscs.html#qc-htb"
|
|
>HTB, Hierarchical Token Bucket</A
|
|
></DT
|
|
><DT
|
|
>7.2. <A
|
|
HREF="classful-qdiscs.html#qc-hfsc"
|
|
>HFSC, Hierarchical Fair Service Curve</A
|
|
></DT
|
|
><DT
|
|
>7.3. <A
|
|
HREF="classful-qdiscs.html#qc-prio"
|
|
>PRIO, priority scheduler</A
|
|
></DT
|
|
><DT
|
|
>7.4. <A
|
|
HREF="classful-qdiscs.html#qc-cbq"
|
|
>CBQ, Class Based Queuing</A
|
|
></DT
|
|
></DL
|
|
></DD
|
|
><DT
|
|
>8. <A
|
|
HREF="rules.html"
|
|
>Rules, Guidelines and Approaches</A
|
|
></DT
|
|
><DD
|
|
><DL
|
|
><DT
|
|
>8.1. <A
|
|
HREF="rules.html#r-general"
|
|
>General Rules of Linux Traffic Control</A
|
|
></DT
|
|
><DT
|
|
>8.2. <A
|
|
HREF="rules.html#r-known-bandwidth"
|
|
>Handling a link with a known bandwidth</A
|
|
></DT
|
|
><DT
|
|
>8.3. <A
|
|
HREF="rules.html#r-unknown-bandwidth"
|
|
>Handling a link with a variable (or unknown) bandwidth</A
|
|
></DT
|
|
><DT
|
|
>8.4. <A
|
|
HREF="rules.html#r-sharing-flows"
|
|
>Sharing/splitting bandwidth based on flows</A
|
|
></DT
|
|
><DT
|
|
>8.5. <A
|
|
HREF="rules.html#r-sharing-ips"
|
|
>Sharing/splitting bandwidth based on IP</A
|
|
></DT
|
|
></DL
|
|
></DD
|
|
><DT
|
|
>9. <A
|
|
HREF="scripts.html"
|
|
>Scripts for use with QoS/Traffic Control</A
|
|
></DT
|
|
><DD
|
|
><DL
|
|
><DT
|
|
>9.1. <A
|
|
HREF="scripts.html#sc-wondershaper"
|
|
>wondershaper</A
|
|
></DT
|
|
><DT
|
|
>9.2. <A
|
|
HREF="scripts.html#sc-myshaper"
|
|
>ADSL Bandwidth HOWTO script (<TT
|
|
CLASS="filename"
|
|
>myshaper</TT
|
|
>)</A
|
|
></DT
|
|
><DT
|
|
>9.3. <A
|
|
HREF="scripts.html#sc-htb.init"
|
|
><TT
|
|
CLASS="filename"
|
|
>htb.init</TT
|
|
></A
|
|
></DT
|
|
><DT
|
|
>9.4. <A
|
|
HREF="scripts.html#sc-tcng.init"
|
|
><TT
|
|
CLASS="filename"
|
|
>tcng.init</TT
|
|
></A
|
|
></DT
|
|
><DT
|
|
>9.5. <A
|
|
HREF="scripts.html#sc-cbq.init"
|
|
><TT
|
|
CLASS="filename"
|
|
>cbq.init</TT
|
|
></A
|
|
></DT
|
|
></DL
|
|
></DD
|
|
><DT
|
|
>10. <A
|
|
HREF="diagram.html"
|
|
>Diagram</A
|
|
></DT
|
|
><DD
|
|
><DL
|
|
><DT
|
|
>10.1. <A
|
|
HREF="diagram.html#d-general"
|
|
>General diagram</A
|
|
></DT
|
|
></DL
|
|
></DD
|
|
><DT
|
|
>11. <A
|
|
HREF="links.html"
|
|
>Annotated Traffic Control Links</A
|
|
></DT
|
|
></DL
|
|
></DIV
|
|
></DIV
|
|
><DIV
|
|
CLASS="NAVFOOTER"
|
|
><HR
|
|
ALIGN="LEFT"
|
|
WIDTH="100%"><TABLE
|
|
SUMMARY="Footer navigation table"
|
|
WIDTH="100%"
|
|
BORDER="0"
|
|
CELLPADDING="0"
|
|
CELLSPACING="0"
|
|
><TR
|
|
><TD
|
|
WIDTH="33%"
|
|
ALIGN="left"
|
|
VALIGN="top"
|
|
> </TD
|
|
><TD
|
|
WIDTH="34%"
|
|
ALIGN="center"
|
|
VALIGN="top"
|
|
> </TD
|
|
><TD
|
|
WIDTH="33%"
|
|
ALIGN="right"
|
|
VALIGN="top"
|
|
><A
|
|
HREF="intro.html"
|
|
ACCESSKEY="N"
|
|
>Next</A
|
|
></TD
|
|
></TR
|
|
><TR
|
|
><TD
|
|
WIDTH="33%"
|
|
ALIGN="left"
|
|
VALIGN="top"
|
|
> </TD
|
|
><TD
|
|
WIDTH="34%"
|
|
ALIGN="center"
|
|
VALIGN="top"
|
|
> </TD
|
|
><TD
|
|
WIDTH="33%"
|
|
ALIGN="right"
|
|
VALIGN="top"
|
|
>Introduction to Linux Traffic Control</TD
|
|
></TR
|
|
></TABLE
|
|
></DIV
|
|
></BODY
|
|
></HTML
|
|
> |