============================== 1. ADMINISTRIVIA (15 minutes) ============================== 1.1 Course overview ------------------------------ * Website: https://cs.nyu.edu/~anirudh/CSCI-UA.0480-062/ * Instructor: Anirudh Sivaraman (Room 408, 60 5th Avenue) * TAs: Jessica Berg and Fabian Ruffy * MW: 12:30 to 1:45 PM * Office hours: TBD * Textbook (not required): Computer Networking: A Top-Down Approach (7th Edition) by Kurose and Ross * Will mostly be following my lecture notes * Grading: 5 assignments (mostly automated and multiple choice), each worth 9% (45%), midterm (20%), final exam (30%), class participation (5%) * 10 late days, split it as you like. But at most 5 on any assignment. * Minimum granularity of late day: 1 day (i.e., you can't take half a late day). * Up to 10% extra credit (after the curve): Implies you can only benefit from the extra credit 1.2 CampusWire for Q&A ------------------------------ * Should have received the link in your NYU email. If not, meet me after class. * Please use this for course feedback and clarifications. * No private posts allowed (use email for this instead), but anonymous public posts are OK. 1.3 Lectures ------------------------------ * Online on Zoom. * 1 hour and 15 minutes, lecture notes from previous year are available, but will likely be updated. * Will fill schedule with textbook sections that correspond roughly to lectures. * Mostly whiteboard from iPad, some slides for graphs, complicated animations * Occasional demos using my laptop. * Lectures will be recorded. 1.3.1 Lab sessions ------------------------------ * 1 hour, twice a week to follow each lecture. * Two sessions per TA per week, one on Tuesday, one on Thursday. * Once in the morning EST by Jessica * Once in the evening EST by Fabian * You can join either the morning or evening session. * Optional, but will serve as good review and will be helpful for assignments. * Think of these as recitations (or) more focused office hours. * Will be recorded. * We will decide the exact time and logistics (Zoom links, etc.) shortly. * Will start Tuesday, Sep 14 1.4 Assignments ------------------------------ * Combination of Python programming and questions * Out on Fridays, due when the next assignment is out (midnight) * Please turn it in by midnight, don't want you losing sleep ... * Can use late days until the next Wed midnight, but no later. * Use GitHub Classroom for submission. * First four assignments are more structured; last one is an open-ended project; more details later on. 1.5 Feedback ------------------------------ * Tell me what you like and don't like using CampusWire or email --> We are using iPad as a whiteboard. Please let us know if this is working well or not. Class participation: Crucial. Don't mind covering 50% of the content if everyone is participating. ------------------------------ --> Participation worth 5%. --> Participate however you want: speak up in lab session, speak up in lecture, post on CampusWire, email me or TAs. --> Participate technically; administrative questions/clarifications do not count. --> If you participate at least once a week, you can earn the full 5%. Points proportional to the number of weeks you participate, starting from the second week. --> TAs will track participation every week. --> Will start tracking week 2 and until and including week 14. Won't be tracking week 1 and week 15. --> Please identify yourself when participating for the first time. 1.6 Cheating ------------------------------ * Please don't do it. Makes life difficult for everyone. * Two alternatives: --> Use the extra credit instead. --> Come and talk to me/graders instead. We are happy to spend as much time as required to ensure you get the material. * In more detail: You must cite any external sources that you make use of for an assignment. External sources include but are not limited to previously published articles, blog posts, Stackoverflow or similar sites, conversations with other people, etc. and you must provide citations for all work turned in for this class. This policy is not meant to discourage the use of external sources, instead it just codifies a standard academic practice. However, you are responsible for ensuring that you understand any code or written material you turn in for the class. We reserve the right to ask you to explain part of all of your code for any assignment, and failure to adequately explain this will result in a loss in points. Finally, we will investigate any suspected academic misconduct, and will report it to the department as requires by GSAS policies. We reserve the right to use tools like MOSS to ensure that any code that is submitted is yours. * If we find evidence of cheating, we will have to report it. --> If you're in doubt as to what constitutes cheating, come talk to us. --> If you're thinking of cheating, come talk to us first. 1.7 Extra credit ------------------------------ * Up to 10%, can be earned in a variety of ways * We'll release some extra credit questions/assignments throughout the semester * You can also earn extra credit through other ways: --> Extra credit points will be in proportion to the complexity of the task: --> Pointing out conceptual mistakes (not typos) in lecture notes (1 point) --> Contributing new examples to the lecture notes or problems for future assignments (3 points) --> Point assignments for extra credit are only tentative. Final determination is up to us. --> We'll obviously acknowledge any student contributions to the lecture notes. * Extra credit is risk free: it can only improve your grade. * Our goal is to provide you as many opportunities to learn as possible. --> So I reiterate: PLEASE DON'T CHEAT. 1.8 Teaching philosophy ------------------------------ * Networking is a lot of fun because it's tangible. * Tangibility: Real use cases, programming problems. * If things are getting theoretical/abstract, please stop me. * Will periodically check in with class: May call on you by name ============================== 2. CLASS OVERVIEW (45 minutes) ============================== 2.1 What is networking? ------------------------------ * People (and their computers) sharing information with each other. * Let's take loading a web page (say, www.google.com) as an example. * Here, you (and your laptop/desktop) want information that is stored on Google's servers. * Will keep returning to this example. 2.2 Learning objectives (or) Why worry about networking? ------------------------------ * Impact: The Internet, the Web, search, email, Facebook, Bitcoin, your new app * Interesting: connections to algorithms, programming, hardware design, electrical engineering, physics * Useful: Debugging your home router, setting up a web site, processing ``big data'' on a cluster 2.3 Overall course structure ------------------------------ * We will start with what is most externally visible and gradually move on to what is hidden. Idea is that at any point you will be able to understand networking at some level of depth. In other words, the class will be useful no matter when you check out of it :) * This is the idea of layering. Layering is a simplification (and may be suboptimal), but it's still useful. And you can go quite far by maintaining layering. 2.4 The Application Layer ------------------------------ * End-user/End-host/End-point: Laptops, desktops, phones, etc. * As an end-user, you're interacting with applications (e.g., web browser) * Application: a program that communicates with another program * The application abstracts away the user; represents only the user's interactions with the network * How does one program communicate with another? * Need to identify the other program (which computer (address) and which program (port)) * Need to establish a connection with the other program (the equivalent of dialling). * Need to transfer information from one end to the other (bytes in or out, packets in or out). * The sockets API encapsulates all the functionality above. * Quick demo using netcat 2.5 The Transport Layer ------------------------------ * How are sockets implemented while preserving contracts to applications, i.e., if I write AB at one end, how do I ensure I get AB in the same order at the other end. This is the requirement of reliable, in-order delivery. * How do we ensure applications send bytes at the right rate? 2.6 The Routing/Network Layer ------------------------------ * How do bytes find their way from your laptop to Google's servers? * How do they know that they have to get to this Access Point, then this other router, and so on? * Aside: What are routers? This is the beauty of layering. You don't need to know about the existence of routers unless you get down into the network layer. E.g., when you put up your own web site, there is a lot of networking underneath it, but you don't need to know anything more than sockets. * Back to routers: These are devices that exist just for connecting other devices (routers and end hosts) to each other. They typically don't run any end-user-facing code (e.g., browsers don't run on routers). * Also, what is inside a router? And how does a router forward packets so quickly: can be as high as a few Tbit/s in the core of the Internet. 2.7 The Medium Access Layer ------------------------------ * Let's zoom in even further. How do your bytes make it to the first hop, your access point? How does an AP mediate accesses from two clients to the same network so that it's fair? * E.g., when you're all in the same room, you raise your hand before you speak. * (or talk in a softer voice, etc.) * The air around us is a "shared medium," whether it is for sound waves or RF waves. 2.8 The Physical Layer ------------------------------ * How does your Ethernet cable work? * How does your WiFi antenna work? ============================ 3. THE LAST THIRD OF THE COURSE (15 minutes) ============================= Recent topics in networking Intended to illustrate three things: 1. Changing requirements cause us to violate layering at times. (In other words, things will change from what I have taught you.) 2. Networking continues to be an exciting field, some fifty years after it started. 3. The layers are still in a state of flux * Continuous innovation at each layer, both in research and in practice * Application: Social networking, Bitcoin, YouTube (all < 15 years old), Hadoop, Spark * Transport: Google's QUIC (2017), TCP CUBIC (2008), BBR (2016) * Routing: All of software-defined networking (since 2008) * MAC layer: Mesh networks * Physical layer: 10G, 100G, 400G links. mmWave communication, 60 GHz communication, 4G/5G, Full duplex.