CSCI4430/ESTR4120 Data Communication and Computer Networks - CUHK Course Review

Term Taken: 2020 Spring

Remote Teaching due to COVID19

Instructor: Prof. Lee Pak Ching Patrick

Grading Scheme

  • Programming assignments x3 (60%)
  • Final exam (40%)

For ESTR students, there are 5 programming assignments instead.

Textbook

Computer Networking: A Top-Down Approach. (J. Kurose and K. W. Ross)

Topics Covered

  • Socket programming.
  • Multi-threaded programming.
  • Application layer: HTTP, FTP, DNS.
  • Transport layer: UDP, TCP, reliable data transfer principles.
  • Network layer: IP, DHCP, NAT, ICMP, VPN, NFQUEUE.
  • Link state and distance vector algorithms.
  • Fairness and scheduling algorithms.
  • RIP, OSPF, BGP.
  • Link layer: ARP, ethernet, hub vs switch.


Additional topics for ESTR:

  • Applied cryptography.
  • OpenSSL programming.
  • Sniffing.
  • TCP exploits.
  • Port scans and DDoS.
  • Firewalls and NIDS.
  • Cellular network exploits.

Review

This is an extremely important course for CS students, it teaches the inner workings our modern internet stack. The course roughly followed the textbook, and went from the top to the bottom of the network stack. That is, from application, transport, network, to link layer. The physical layer was not covered since it doesn’t really belong to the fields of computer science.


As far as I’m concerned, the materials were inspiring and eye-opening because before taking the course, internet was like a magic black box. I took it for granted that it connects the whole world together, but I hadn’t got a single clue on how it achieves this. After taking the course, I finally realized that a simply click on a website requires a whole ton of data sending back and forth from different parties across the world. And the most basic idea of ensuring correct, lossless, and in-order data transmissions requires very intricate and clever designs.


Though the course introduced us to almost the whole network stack, the main focus was on the transport layer and network layer. For the transport layer, we spent a lot of time discussing the principles of reliable data transfer by tackling different errors one at a time. Then we delved into the actual implementation of modern TCP. As for the network layer, routing algorithms and principles were a heavy topic. This should be straightforward for people good at algorithms, since routing algorithms are generally based on Dijkstra’s Shortest Path Algorithm and Bellman-Ford’s Algorithm.


There were three programming assignments for the regular CSCI4430 and two more for ESTR4120, all assignments were done together by a team of 2-3 people. The first assignment was to get us familiar with multi-threaded programming and the use of TCP sockets in Linux, it required us to develop a multi-client single-server FTP system. Though it was time consuming, it wasn’t too hard concept-wise. The second assignment was to upgrade the first assignment to be failure-tolerant by calling an erasure coding library and making it a multi-client multi-server FTP system. Since this was based on the first assignment, it was extremely important to get full marks in the first assignment, otherwise the mark deduction could cascade. The second assignment was a little trickier since we had to understand the erasure coding library first, then modify our FTP program accordingly. The third assignment was about NAT in the network layer. The task was to implement a NAT system with traffic shaping by capturing UDP packets and translating the (source IP, destination IP, source port, destination port) tuple for inbound and outbound traffics. The most difficult part of this assignment was to figure out the library interfaces of libnetfilter_queue, since the documentation was rather lacking. On top of that, the multi-threading programming in this assignment was also a little tricky, since the correct timing of mutex locks and unlocks were very important. As for the ESTR assignments, I got nothing to say since both of them were fully done by my teammate, big thanks to him.


In conclusion, this was the most enjoyable computer science course I’ve taken so far (not exaggerating). The amount of information given in this course was huge but all very useful and the programming assignments were challenging and fun. I would recommend every computer science students take on the challenge and register this course, since it would be weird if you graduated from CS, yet knowing nothing about how internet works.


P.S. Also a great thanks to Prof. Lee for taking me as one of his final year project students.

Assignment Link

GitHub


More CUHK Course Reviews