Fixing the Flaw in TCP's Congestion Feedback for Low Delay Networking


The Data Centre Transmission Control Protocol (DCTCP) is widely used in private networks (e.g. Microsoft's and Google's data centres). DCTCP minimises queuing delay in these networks by reducing its rate in proportion to the /extent/ of congestion. Whereas traditional TCP conservatively halves its rate in response to the /presence/ of any congestion, whether heavy or light. A DCTCP receiver uses a modified form of feedback to reveal the extent of explicit congestion notification (ECN) to the sender, whereas a traditional TCP receiver feeds back no more than one signal per round trip.

Unfortunately, the feedback scheme in DCTCP was not designed for use over the public Internet. An improved feedback protocol has been designed, with the intent that every host on the Internet will eventually migrate to it. It is called Accurate ECN Feedback or AccECN. An initial implementation of the specification has been produced in Linux (so far omitting some of the details). To test whether the specification is correct and understandable, it is necessary for more than one implementation to be produced.


The aim of this project is to produce a full implementation of the AccECN modification to TCP's feedback based on the detailed specification. Implementation experience may also lead us to propose design change(s). The student may choose the implementation platform, e.g. Linux, FreeBSD, but Linux is preferred.

The project builds in stages, so that some success can be assured at each step, while more capable students can still be stretched. Step #1: Implementation and functional testing of basic features. Step #2: Complete implementation including functional testing. Step #3: Prepare the code for downstreaming into Linux/FreeBSD etc. and/or argue for any changes to the specification in the IETF standards forum.

Learning outcome

  • Linux kernel programming or an equivalent OS
  • Internet protocol designs: ECN, TCP, DCTCP, SCTP, etc.
  • Operating System design and structure
  • Best practice for code deployment and standardization


  • Good programming skills
  • Good grounding in operating systems
  • Good grounding in Internet protocols
  • Willingness to learn best practice in research and testing


Bob Briscoe