Network Coding



As announced last week to all students that have applied to the course, we start the lecture remotely. Please come to the lecture's BBB room. The access code will be sent via email to all students that have applied.

Please enter the room with your full real name as we keep track of attendance. If students with confirmed places do not show up, we will distribute those places to other students after the lecture.

We will keep this procedure for the first couple of lectures until we have a stable set of attendees. In case you cannot attend a lecture for some reason, please write us such that we can preserve your confirmed place.


The course registration will be possible starting tomorrow. Please note that there are only limited places available due to COVID-19 since the projects will mostly take place onsite. In case you do not get a fix place, you may write us an email with a short motiviation why you want participate in this course and what your programming and networking skills are.

According to the experience from the past years, there is a significant drop-out rate, i.e., there is a good chance that you may get in the course even of you cannnot successfully register tomorrow.

Lecture material

Lecture material will be made available via Git.

Previous knowledge

Please note that we expect firm knowledge in the following areas:

  • Grundlagen Rechnernetze und Verteilte Systeme (IN0010)
  • Diskrete Strukturen (IN0015)
  • Diskrete Wahrscheinlichkeitstheorie (IN0018)
  • good programming skills in C (or C++), which is mandatory
  • full compliance with kernel coding guidelines (we do not plan to do kernel programming)


Conventional routing is unable to achieve a network's capacity as given by the min-cut max-flow theorem - a rather theoretical point of view. Network Coding (NC) is an approach to achieve this very capacity in practice and can thus be considered a generalization of routing. Just think about it: Intermediate nodes (let us call them "router") normally only send identical copies of previously received packets (forget about the headers). NC extends their capability by demanding that sent packets are arbitrary linear combinations of previously received packets. Sounds strange? It is…

Here is a brief example to make you curious: Assume A wants to transmit n packets over a lossy link to B. With conventional approaches, B would have to acknowledge successful receipt of each individual packet such that A can retransmit any packets that got lost in transmission. If you use NC, A does not send the actual information contained in each individual packet but linear combinations of all packets. Obviously, B needs n linear independent packets to decode. If any packet gets lost during transmission, B does not need to signal a specific loss to A. Instead, A continues to transmit random (independent) linear combinations of those n packets until B has assembled enough packets to decode the whole batch.

This example is very basic, and actually only even a degenerated case of NC. But it gives you the underlying idea. Now just assume there are not only A and B but a number of intermediate nodes, each of them listening, buffering packets, and sending linear combinations. Instead of deciding which specific packet to send where, those nodes have to decide how often a random linear combination is being broadcast.

The lecture is a combination of usual classes combined with practical sessions during classes, i.e., you are encouraged to bring your notebooks and participate in the projects.

The theoretic part of the lecture covers the following topics:

  • NC as generalization of routing
  • min-cut/max-flow theorem
  • linear programming
  • packet loss and channel estimation
  • ARQ mechanisms
  • random linear network coding (RLNC)
  • applications of NC
  • bidirectional coding
  • NC in transport and link-layer protocols
  • NC in wireless networks
  • acknowledgement schemes for NC
  • combination of NC on different layers

The practical part (projects) cover the following topics:

  • socket programming
  • IEEE 802.11 raw sockets
  • implementation of RLNC and acknowledgement schemes
  • window protocols for NC
  • many more if you want


Lecture with integrated exercises.


The lecture is complemented by integrated exercises and demonstrations. On that basis, students are encouraged to propose individual practical projects, which are worked on in the second half of the lecture. Those projects may be done in groups of at most two students and are supervised during class hours. At the end of the lecture period students should present their projects to their class mates by presentation and/or demonstration.


Lecture: You can register for the lecture via TUMonline. Please note that you have to register for exams separately.

Retake exam: Registration via TUMonline starts in the second week of June 2020.

Exam and bonus

Written exam and bonus through projects. Projects are graded and weighted with the exam (50:50) if the exam (without bonus) is graded with 4.0 or better and the final grade improves with the project (otherwise the final grade equals your exam grade), i.e., it is not possible to get a grade worse than the exam grade. In addition, there is a 0.3 grade bonus if the project is presented to the group at the end of the lecture period (and the exam is passed without that grade bonus).

Please bring your student card or identity card to the exam.

Important information regarding the retake exam

The retake exam takes place on July 1st 2020 from 10:45 to 12:15. The exam is held using TUMexam remotely under the same conditions as the endterm, i.e., a single page (A4) and a pocket calculator are allowed. The exam is supervised remotely using BigBlueButton (no recording is taken).

In order to take the exam remotely you either need - a printer and scanner (to print out the exam and scan the written exam afterwards) or - tablet computer with pen input.

In both cases, a smartphone or webcam is required such that your working space can be supervised via BBB.

Details regarding that procedure follow after the registration period.