├── infra.md └── README.md /infra.md: -------------------------------------------------------------------------------- 1 | # Infrastructure 2 | This page contains helpful information about setting up, completing and submitting problem sets required for CS145. We have divided it into the following sections for your convenience: 3 | 4 | - [Infrastructure](#infrastructure) 5 | - [Installing a virtual machine monitor](#installing-a-virtual-machine-monitor) 6 | - [MacOS (x86/ARM), Linux and Windows users](#macos-x86arm-linux-and-windows-users) 7 | - [Setting up the VM environment](#setting-up-the-vm-environment) 8 | - [Machine guidelines](#machine-guidelines) 9 | - [Optional: Visual Studio Code Plugin](#optional-visual-studio-code-plugin) 10 | - [Using GitHub Classroom](#using-github-classroom) 11 | - [Configure git username and email](#configure-git-username-and-email) 12 | - [Requesting your project clone](#requesting-your-project-clone) 13 | - [Clone project contents](#clone-project-contents) 14 | - [Pull project updates](#pull-project-updates) 15 | - [Submit the project](#submit-the-project) 16 | 17 | We *strongly recommend* you do all problem sets using the virtual machine environment we provide. Before loading our environment, you will need to install a virtual machine monitor. 18 | 19 | ## Installing a virtual machine monitor 20 | 21 | ### MacOS (x86/ARM), Linux and Windows users 22 | 23 | A virtual machine monitor, or VMM, is a piece of software that allows you to run another operating system "virtually," inside your base operating system. For example, you can run Linux inside Windows. 24 | 25 | We have had good experiences with a commercial VMM called [VMWare](https://www.vmware.com/). VMWare's Mac OS X product is called [VMware Fusion](https://www.vmware.com/products/fusion.html), and its Windows product is called [VMWare Workstation](https://www.vmware.com/products/workstation-player.html). These products are not free, but you can get an academic/personal license to use one for the duration of the class. 26 | 27 | To obtain VMware: Follow the instructions [here](https://www.mikeroysoft.com/post/download-fusion-ws/). 28 | 29 | If you're installing Fusion: 30 | 31 | 1. Click on the file you downloaded to mount the VMware Fusion icon on your desktop. 32 | 2. Click on the VMware Fusion (or VMware Fusion.app) icon in the new window, click Open if prompted, and type your password if prompted. Follow the instructions to install Fusion. 33 | 34 | If you're installing Workstation for Windows: 35 | 36 | 1. Click on the file you downloaded and launch VMware Workstation's installer. If you are asked whether to allow the installer to make changes to your computer, enter your password, and click Yes. 37 | 2. A window entitled **Welcome to the VMware Workstation Pro Setup Wizard** should appear. Click Next. 38 | 3. When prompted with a license agreement, select I accept the terms in the license agreement, then click Next. 39 | 4. You'll next come to a Custom Setup window. You need not change the Install Location. You'll probably want to select **Enhanced Keyboard Driver**, and then select Next. 40 | 5. On the next screen, **User Experience Settings**, uncheck the **Help improve VMware Workstation Pro** box and click Next. 41 | 6. When prompted about Shortcuts, leave both boxes checked and click Next. 42 | 7. You'll now come to the **Ready to install VMware Workstation Pro** screen; select **Install**. It will take a minute or two for the installation. 43 | 8. When you come to the Completed the VMware Workstation Pro Setup Wizard screen, click on License, and paste the license key that you got from the VMware store. Then click Finish. 44 | 45 | ## Setting up the VM environment 46 | 47 | We run all our programs in a virtual machine. The VM is built on Ubuntu 22.04.5 and has the P4 and Mininet environment already set up for you. For Project 2 and Project 4 which do not use P4 or Mininet, we *still recommend* you do these projects using this VM. 48 | 49 | - **Download the virtual machine we prepared.** 50 | - For MacOS (x86), Linux and Windows users, the virtual machine files for VMWare can be downloaded [here](https://drive.google.com/file/d/1ehq41PDK5_fbIyii7NU_7p4BS3QKjr16/view?usp=drive_link). 51 | - For M-series (ARM) Mac users, the virtual machine files for VMWare can be downloaded [here](https://drive.google.com/file/d/1zacRYoIUl6ABbcscxMJxxBidKiTWcULc/view?usp=drive_link). 52 | 53 | - **Install the VM.** Directly use your virtual machine software to open the VM file downloaded. The username and the password of this VM are both **p4**. *Note*: The VM file is large. It could consume about 40G disk size in your laptop. Please reserve enough space in your disk before installing the VM. 54 | 55 | - **Login to the VM (VMWare).** Right click on the VM in your VM library and select "Connect to SSH". 56 | 57 | ### Machine guidelines 58 | 59 | There are some tasks throughout the projects in this course where you will observe differnet behaviors depending on your machines. In general, if you run the VM on a processor that is equivalent to or better than an i7 with a clockrate higher than 2.8 GHz and at least 8 GB of RAM, you will observe expected behaviors. However, if you get a low-end machine and observe a different behavior for these tasks, it's completely ok. You just need to explain your observations in the report. 60 | 61 | We recommend allowing your VM usage of at least two CPU cores and at least 8 GB of RAM (the higher the better, for both). Also, try to turn off the other unnecessary applications in your machines to avoid interrupting the VM. 62 | 63 | ### Optional: Visual Studio Code Plugin 64 | 65 | Just a quick tip if you use Visual Studio Code as a text editor. If you haven't already, you might think about installing the extension: [ms-vscode-remote.remote-ssh](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-ssh). It allows you to open files/directories on your virtual machine in VSCode. 66 | 67 | To set it up, you'll need the IP address of your virtual machine which you should be able to find by following the examples here: https://linuxize.com/post/how-to-enable-ssh-on-ubuntu-20-04/. 68 | 69 | Combining this with the terminal functionality of VSCode (which will also automatically log into the VM while you're using the plugin above) gives you a great development environment to use for the course! 70 | 71 | ## Using GitHub Classroom 72 | 73 | This course uses git and GitHub Classroom for all its projects. The [Harvard SEAS git introduction](https://wiki.harvard.edu/confluence/display/USERDOCS/Introduction+To+GIT) is a good way to get set up with git quickly. Please take a look at [git notes](http://cs61.seas.harvard.edu/site/ref/git) for the CS 61 Fall 2020 offering for a more interesting introduction. We discuss using GitHub Classroom for our projects here. 74 | 75 | ### Configure git username and email 76 | 77 | ```bash 78 | git config --global user.name "FIRST_NAME LAST_NAME" 79 | git config --global user.email "MY_NAME@example.com" 80 | ``` 81 | 82 | 83 | ### Requesting your project clone 84 | 85 | Each project has or will have a GitHub Classroom link posted on our course website. Please click the link *after* you are signed into your github account. This will begin the process of creating a project clone repository for you. You will get an email notification when your cloned repository is accessible. 86 | 87 | ### Clone project contents 88 | 89 | After booting your virtual machine, you need to clone this project repository in your virtual machine (the specific cloning command for each project might be different; please follow project READMEs): 90 | 91 | ```bash 92 | git clone --recurse-submodules https://github.com/Harvard-CS145/cs145-25-projectX-YYY.git 93 | ``` 94 | 95 | where X (1-8) is the project number, and YYY is your Github username. The description and code skeletons of each minor project are in this repository. In this repository, you will finish your coding in each minor project, test your programs, and submit your codes into Github for grading. 96 | 97 | 98 | ### Pull project updates 99 | 100 | When there are changes to the project (announced in Ed), you need to pull latest updates by executing `pull_update.sh` script in the project directory. 101 | 102 | ```bash 103 | ./pull_update.sh 104 | ``` 105 | 106 | ### Submit the project 107 | 108 | You are expected to tag the version you would like us to grade on using following commands and push it to your own repo. You can learn from [this tutorial](https://git-scm.com/book/en/v2/Git-Basics-Tagging) on how to use git tag command. This command will record the time of your submission for our grading purpose. 109 | 110 | ```bash 111 | git tag -a submission -m "Final Submission" 112 | git push --tags 113 | ``` 114 | 115 | *Note: Some notes about VMWare were borrowed from the CS 61 offered by Eddie Kohler.* 116 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # CS 1450, Spring 2025: Networking at Scale 2 | 3 | ## Overview 4 | 5 | This course studies computer network topics including Layer 2/Layer 3 topology, routing, transport protocols, traffic engineering, network functions, programmable switches, and software-defined networking. Modern networks have grown to large scale (connecting millions of servers) and high speed (Terabits per second) to meet the needs of cloud applications in business and society. Thus, in addition to learning the conventional concepts in networking, we will also discuss how to adapt these concepts to large-scale networks. These discussions will hopefully help deepen our understanding of networking technologies. This course includes lectures and system programming projects. 6 | 7 | - Instructor: Minlan Yu 8 | - Lecture time: T/TH 11:15-12:30am 9 | - Lecture location: SEC 1.402 10 | - Section time: Fridays 2:15-3:15 pm every other week (available on demand for extension students). Please see the syllabus below for the actual dates for sections. 11 | - Section location: SEC 1.402 12 | - Minlan Office hours: Tue 10-11, SEC 4.415 13 | - TF and office hours: 14 | * Howard Huang: howardhuang@college.harvard.edu; Winthrop Dhall at 8pm on Wednesdays (CS Nights) 15 | * Raj Joshi: rajjoshi@g.harvard.edu; Thursdays 4-6pm, virtual on Zoom 16 | * Yao Xiao: yaoxiao@g.harvard.edu; Fridays 4-6pm, virtual on Zoom 17 | - Prerequisites: There are no official prerequisites. Recommended prep: system programming at the level of CS 61. 18 | 19 | ## Textbook 20 | - This course covers both basic networking concepts and advanced cloud networking concepts. 21 | - For basic networking concepts, you can refer to the textbook (K&R): Computer Networking: A Top-Down Approach, by Jim Kurose and Keith Ross. The latest edition is the 8th edition. Earlier editions are fine. The numbers in the syllabus are based on the 7th edition. 22 | - An alternative book is Computer Networks: A Systems Approach, by Larry Peterson and Bruce Davie. You can find an online version [here](https://book.systemsapproach.org/). 23 | - For advanced topics of networking, please check out lecture notes and class slides. 24 | 25 | ## Coursework 26 | - Class and biweekly section participation is mandatory. (Extension school: Classes and sections can be attended via live stream or on demand.) 27 | - Programming projects: 60% 28 | - You will build data center networks and network protocols on your laptop, which include topology, routing, load balancing, failure recovery, measurement, and congestion control. 29 | - Homework: 18% 30 | - Midterm exam: 17% 31 | - In-class and Ed participation 5% (Extension school: Ed participation and online questions in class) 32 | - Please refer to the first lecture slides for details. 33 | - All assignments will be due at 11:59 pm ET on the deadline date. 34 | 35 | ## Syllabus 36 | 37 | **Every week, there will be one or two homework questions which are released on Thursday or Friday and due in a week.** 38 | 39 | ### Prework 40 | 41 | * [Infrastructure notes](infra.md) 42 | 43 | * **Project 0:** 44 | You are required to finish [Project 0](https://classroom.github.com/a/uzL3S4Q_) before the class or in the first week of the class. Project 0 will not be graded. This is just a project for you to check if you are comfortable with the level of programming in this class and to set up infrastructure for future projects. 45 | 46 | ### Week 1 47 | * Jan 28 Tue class: Course Overview; Internet Principles 48 | - Supplemental: [UMass Professor Explains the Internet in 5 Levels of Difficulty](https://www.youtube.com/watch?v=0EqKnvzo3no&t=1216s) by Jim Kurose 49 | * Jan 30 Thu class: Network at Scale; Network topology (K&R 6.6) 50 | * Jan 30 Thu: `Project 1 (Topology) released` [Project 1 GitHub Classroom Link](https://classroom.github.com/a/AHlfb-bJ) 51 | * Jan 31 Fri section: Mininet tutorial 52 | * Feb 2 Sun: `Project 0 check-in` 53 | 54 | ### Week 2 55 | * Feb 4 Tue class: Network topology (K&R 6.6) 56 | * Feb 6 Thu class: Link layer: Ethernet (K&R 6.1-6.4) 57 | 58 | ### Week 3 59 | * Feb 11 Tue class: Link layer: Ethernet (K&R 6.1-6.4) 60 | * Feb 13 Thu class: Network layer: Control plane (K&R 5.2, 5.3) 61 | * Feb 13 Thu: `Project 2 (intradomain routing) released` [Project 2 GitHub Classroom Link](https://classroom.github.com/a/RMsGm0bG) 62 | * Feb 14 Fri section: Q&A on project 1 63 | * Feb 16 Sun: `Project 1 due` 64 | 65 | ### Week 4 66 | * Feb 18 Tue class: Network layer: Data plane (K&R 4.1-4.3, 6.4, K&R 1.3) 67 | * Feb 20 Thu class: Discovery service 68 | * Feb 21 Fri section: Routing protocols 69 | 70 | ### Week 5 71 | * Feb 25 Tue class: Network layer: data center routing (K&R 5.4) 72 | - Supplemental [VL2: A Scalable and Flexible Data Center Network](https://dl.acm.org/doi/pdf/10.1145/1592568.1592576) 73 | * Feb 27 Thu class: BGP 74 | * Feb 28 Fri: `Project 3 (ECMP) Released` [Project 3 GitHub Classroom Link](https://classroom.github.com/a/jyQOHwDK) 75 | * Feb 28 Fri section: Project 3 ECMP tutorial 76 | * Mar 2 Sun: `Project 1 grading out` 77 | 78 | ### Week 6 79 | * Mar 4 Tue class: BGP in data centers 80 | * Mar 4 Tue: `Project 2 Due` 81 | * Mar 6 Thu class: Packet switching vs Circuit Switching 82 | 83 | ### Week 7 84 | * Mar 11 Tue class: Transport layer: Reliable transport (K&R 3.1-3.5) 85 | * Mar 13 Thu class: Transport layer: TCP basics (K&R 3.1-3.5) 86 | * Mar 13 Thu: `Project 4 (reliable transport) released` [Project 4 GitHub Classroom Link](https://classroom.github.com/a/P3yvMLj2) 87 | * Mar 14 Fri section: Transport tutorial 88 | * Mar 16 Sun: `Project 3 Due` 89 | * Mar 16 Sun: `Project 2 grading out` 90 | 91 | ### Week 8 Spring recess. No class 92 | 93 | ### Week 9 94 | * Mar 25 Tue class: Transport layer: Congestion control (K&R 3.6) 95 | * Mar 27 Thu class: course review 96 | * Mar 30 Sun: `Project 3 grading out` 97 | 98 | ### Week 10 99 | * Apr 1 Tue class: **Exam** 100 | * Extension school students will take the exam on Canvas on Apr 1-2. The exam will be available starting at 9:45 AM ET and will be available for 24 hours. You must finish the exam within 1 hour and 15 minutes of starting the exam. 101 | * Apr 3 Thu class: Data center TCP; 102 | * Apr 3 Thu: `Project 5 (traffic balancing) released` [Project 5 GitHub Classroom Link](https://classroom.github.com/a/Y13lEg9F) 103 | * Apr 4 Fri section: Data center load balancing tutorial 104 | * Apr 6 Sun: `Project 4 due` 105 | 106 | ### Week 11 107 | * Apr 8 Tue class: Data center TCP; Data center load balancing 108 | * Apr 10 Thu class: TCP fairness (K&R 3.7.1); 109 | - Supplemental: [The Future of Networking, and the Past of Protocols](https://www.youtube.com/watch?v=YHeyuD89n1Y) by Scott Shenker 110 | * Apr 13 Sun: `Project 4 grading out` 111 | 112 | ### Week 12 113 | * Apr 15 Tue class: Host networking (by Raj Joshi, Minlan travel) 114 | * Apr 17 Thu class: SDN in the control plane (K&R 4.4, 5.5) 115 | * Apr 17 Thu: `Project 6 released` [Project 6 GitHub Classroom Link](https://classroom.github.com/a/A6iyTDWi) 116 | * Apr 18 Fri section: Final project suggestions 117 | * Apr 20 Sun: `Project 5 due` 118 | 119 | ### Week 13 120 | * Apr 22 Tue class: SDN in the data plane 121 | * Apr 24 Thu class: Research projects in networking (led by Raj Joshi, Minlan travel) 122 | * Apr 27 Sun: `Project 5 grading out` 123 | 124 | ### Week 14 125 | * Apr 29 Tue class: Data center applications; Course summary 126 | 127 | ### Week 15 128 | * May 13 Tue: `Project 6 due` 129 | 130 | ## Project 131 | 132 | ### Objectives 133 | 134 | This course project runs throughout the semester. Through this project, you will reach two objectives: 135 | 136 | * Build a full stack data center network on your own laptop ranging from topology, and routing, to applications. 137 | * You will get hands-on experiences with the major concepts learnt in lectures and understand the tradeoffs of different design decisions 138 | 139 | ### Late policy 140 | You should submit your work on an assignment (electronically) before its due time. All assignments will be due at `11:59 pm ET` on the deadline date. 141 | 142 | If you submit your work late, we will award you a fraction of the score you would have earned on the assignments had it been turned in on time, according to this sliding scale: 143 | 144 | * 90% for work submitted up to 24 hours late 145 | * 80% for work submitted up to 2 days late 146 | * 70% for work submitted up to 3 days late 147 | * 60% for work submitted up to 5 days late 148 | * 50% for work submitted after 5 days late 149 | 150 | For example, if you should have earned 8/10 points but submitted 36 hours late, you will instead earn 6.4 points. 151 | 152 | That said, you are allowed **SIX free late days** during the semester. The final project is due based on the final grade submission date and cannot be turned in late. You do not need to tell us that you are applying your *late day* -- we'll remove the late penalty at the end of the semester from the assignment(s) that benefits you the most. 153 | 154 | Please plan your work on the assignments so that travel, interviews, athletics, touring, student clubs, extracurricular activities, religious holidays, etc. do not cause you to submit it late. None of the above reasons nor a heavy academic workload constitute an extraordinary circumstance. 155 | 156 | Several projects depend on earlier projects. *So even if you miss a deadline of a previous project, it is still important to finish it so you can build future projects on top of it.* Here are the project dependencies: 157 | 158 | ``` 159 | Project 0 (Setup) --> Project 1 (Topology) --> Project 3 (ECMP) --> Project 5 (Traffic balancing) 160 | Project 2 (Intradomain routing) 161 | Project 4 (Reliable transport) 162 | ``` 163 | 164 | ### Collaboration policy 165 | Programming, like composition, is an individual creative process. Individuals must reach their understanding of the problem and discover a path to its solution. During this time, you are encouraged to discuss your project with other students at the conceptual level. However, when the time comes to write the code that solves the problem, the program must be your own work. 166 | 167 | Do not, under any circumstances, copy another person's program, comments, README/Report description, or any part of the submitted assignment. This includes character-by-character transliteration of other works (whether inspected visually or copied digitally), but it also includes derivative works (i.e., by renaming variable names or subtly shifting around statements to try to hide that copying has occurred). You are also not allowed to use other people's code, comments, or results. This includes work done by other students this or past semesters, as well as any other code you find online. 168 | 169 | You are also responsible for ensuring that the code you write for the assignments is not readable by others, which includes sharing with students in future years or posting publicly on websites like GitHub. 170 | 171 | You may reuse functions from libraries, but you must check any packages/libraries that you plan to use with the TFs. You should also mark all the places where you reuse functions/libraries from other places. 172 | 173 | All programs will be subject to automated checking for similarity. Any cases of plagiarism will result in an F for the entire course. If you have any questions about policies about academic integrity, please talk to the professor. 174 | 175 | ### Policy on ChatGPT and generative AI 176 | We expect that all work students submit for this course will be their own. We specifically forbid the use of ChatGPT or any other generative artificial intelligence (AI) tools at all stages of homework and projects, including preliminary ones. Violations of this policy will be considered academic misconduct. We draw your attention to the fact that different classes at Harvard could implement different AI policies, and it is the student’s responsibility to conform to expectations for each course. There are also [Harvard guidelines for GAI tools](https://provost.harvard.edu/guidelines-using-chatgpt-and-other-generative-ai-tools-harvard). 177 | 178 | ## Diversity and Inclusion 179 | I would like to create a learning environment in our class that supports a diversity of thoughts, perspectives and experiences, and honors your identities (including race, gender, class, sexuality, socioeconomic status, religion, ability, etc.). I (like many people) am still in the process of learning about diverse perspectives and identities. If something was said in class (by anyone) that made you feel uncomfortable, please talk to me about it. If you feel like your performance in the class is being impacted by your experiences outside of class, please don’t hesitate to come and talk with me. As a participant in course discussions, you should also strive to honor the diversity of your classmates. (Statement extracted from one by Dr. Monica Linden at Brown University.) 180 | 181 | ## Accommodations for Disabilities 182 | If you have a health condition that affects your learning or classroom experience, please let me know as soon as possible. I will, of course, provide all the accommodations listed in your AEO letter (if you have one), but sometimes we can do even better if a student helps me understand what really matters to them. (Statement adapted from one by Prof. Krzysztof Gajos.) 183 | 184 | ## Policies for Extension School Students 185 | 186 | ### Academic Integrity Policy 187 | You are responsible for understanding Harvard Extension School policies on [Academic Integrity](https://extension.harvard.edu/for-students/student-policies-conduct/academic-integrity/) and how to use sources responsibly. Violations of academic integrity are taken very seriously. Visit [Using Sources Effectively and Responsibly](https://extension.harvard.edu/for-students/support-and-services/using-sources-effectively-and-responsibly/) and the [Harvard Guide to Using Sources](https://usingsources.fas.harvard.edu/) to review important information on academic citation rules. 188 | 189 | ### Accessibility Services Policy 190 | The Division of Continuing Education (DCE) is committed to providing an accessible academic community. The [Accessibility Services Office (ASO)](https://extension.harvard.edu/for-students/support-and-services/accessibility-services/) is responsible for providing accommodations to students with disabilities. Students must request accommodations or adjustments through the ASO. Instructors cannot grant accommodation requests without prior ASO approval. It is imperative to be in touch with the ASO as soon as possible to avoid delays in the provision of accommodation. 191 | DCE takes student privacy seriously. Any medical documentation should be provided directly to the ASO if a substantial accommodation is required. If you miss class due to a short-term illness, notify your instructor and/or TA but do not include a doctor's note. Course staff will not request, accept, or review doctor's notes or other medical documentation. For more information, email accessibility@extension.harvard.edu. 192 | 193 | ### Publishing or Distributing Course Materials Policy 194 | Students may not post, publish, sell, or otherwise publicly distribute course materials without the written permission of the course instructor. Such materials include, but are not limited to, the following: lecture notes, lecture slides, video, or audio recordings, assignments, problem sets, examinations, other students’ work, and answer keys. Students who sell, post, publish, or distribute course materials without written permission, whether to solicit answers or otherwise, may be subject to disciplinary action, up to and including the requirement to withdraw. Further, students may not make video or audio recordings of class sessions for their use without written permission from the instructor. 195 | --------------------------------------------------------------------------------