<!DOCTYPE html>
<html>
    <head>
        <title> EECS 340: Syllabus </title>
        <meta name="description" content="Northwestern University, EECS 340,
                                 Introduction to Computer Networking, syllabus">
        <link rel="stylesheet" href="style.css">
        </head>
    <body>
        <div id="banner">
            <h1> EECS 340: Syllabus</h1>
            </div>
        <?php include 'navbar.php'; ?>
        <div class='content_block syllabus'>
            <h2> Instructor </h2>
            <?php include 'aleks.php' ?>
            <h2> Time/Place </h2>
            <div class='blob'>
                <span class='indented'>
                    <span class='label'>Lectures: </span>
                    <?php include 'lecture.php' ?>
                    </span><br />
                <span class='indented'>
                    <span class='label'>Recitations: </span>
                    <?php include 'recitation_2.php' ?>
                    </span>
                </div>
            <h2> Teaching Assistants </h2>
            <?php include 'ta1.php'; ?>
            <?php include 'ta2.php'; ?>
            <?php include 'ta3.php'; ?>
            <h2> Course Description </h2>
            <p class='bigpar'>
                This course provides an introduction to fundamental concepts in 
the design and implementation of computer communication networks, their protocols, 
and applications. Topics to be covered include: overview of network architectures,
 applications (HTTP, FTP), network programming interfaces (e.g., sockets), transport
 (TCP, UDP), flow control, congestion control, IP, routing , IPv6, multicast, data
 link protocols, error-detection/correction, multiple access, LAN, Ethernet, wireless
 networks, and network security. Examples will be drawn primarily from the Internet
 (e.g., TCP, UDP, and IP) protocol suite. Over the course of the quarter, students
 program in C++ on UNIX systems to build web clients and servers, and a fully
 compatible TCP/IP stack that can run them.
                </p>
            <h2> Prerequisites </h2>
            <ul class='bigpar'>
                <li><span class='label'>Required:</span>
                    EECS 311 or equivalent data structures course</li>
                <li><span class='label'>Required: </span>
                    Knowledge of C and C++</li>
                <li><span class='label'>Required: </span>
                    EECS 213 or equivalent computer systems course</li>
                <li><span class='label'>Highly recommended: </span>
                    EECS 343 or equivalent operating systems course</li>
                <li><span class='label'>Highly recommended: </span>
                    Unix development experience (gcc, gdb, make, etc)</li>
                </ul>
            <h2> Textbook and other readings</h2>
            <h4> Required: </h4>
            <ol class='bigpar'>
                <li><a
                href='https://urldefense.proofpoint.com/v2/url?u=https-3A__www.pearsonhighered.com_program_Kurose-2DComputer-2DNetworking-2DA-2DTop-2DDown-2DApproach-2D7th-2DEdition_PGM1101673.html&d=CwMGaQ&c=yHlS04HhBraes5BQ9ueu5zKhE7rtNXt_d012z2PA6ws&r=ZE08yy08WCNmUsQWj7RUPC2oBwJFAxBHr4Z-XzsIfeI&m=LwZTmJgVreMSdQ_Ua73qWsr7ivu1OdJJDwwxH8y66_M&s=xvRdvryy8uzIclqAysyLDJ_EhJAnCZU0nS6qYElKOTQ&e='>Computer Networking: A Top-Down Approach, 7th Edition (James
                Kurose and Keith Ross, 2017)</a></li>
                <li><a
                href='http://www.amazon.com/TCP-Illustrated-Protocols-Addison-Wesley-Professional/dp/0321336313/ref=sr_1_1?s=books&ie=UTF8&qid=1420486064&sr=1-1&keywords=TCP%2FIP+Illustrated%2C+Volume+I%3A+The+Protocols'>TCP/IP
                Illustrated, Volume I: The Protocols (Richard Stevens, Addison
                Wesley, 1994)</a> [Essential for lectures on TCP/IP and projects]</li>
                </ol>
            <h4> Recommended: </h4>
            <ol class='bigpar'>
                <li><a
                href='http://www.amazon.com/Computer-Networks-Approach-Kaufmann-Networking/dp/0123705487/ref=sr_1_1?s=books&ie=UTF8&qid=1292358608&sr=1-1'>Computer
                Networks - A Systems Approach, 4th Edition (Larry L. Peterson
                and Bruce S. Davie, Morgan Kaufmann, 2007)</a> [Good
                supplementary material to the required textbooks.]</li>
                <li>Unix Network Programming <a
                href='http://www.amazon.com/exec/obidos/tg/detail/-/0131411551/104-7984220-9225564?v=glance'>Volume
                1, 3rd Edition, 2003</a> and <a
                href='http://books.google.com/books?vid=ISBN0131411551&id=ptSC4LpwGA0C&pg=PR2&lpg=PR2&ots=Kp6CUkarLn&dq=%EF%82%A7+Unix+Network+Programming+Volume+2+Second+Edition&sig=Tn80Ti2sFntwBD2MFRYV_vRIrFY#PPR10,M1'>Volume
                2, 2nd Edition, 1999</a> (Richard Stevens, Prentice Hall) [Describes the details of socket
                programming and IPC on Unix.]</li>
                <li><a href='http://www.kohala.com/start/#books'>Advanced
                Programming in the Unix Environment</a> (Richard Stevens,
                Addison-Wesley, 1992) [A basic book for anyone writing programs
                that run under Unix.]</li>
                <li><a href='http://www.research.att.com/~bs/3rd.html'>The C++
                Programming Language</a>, Special Edition (Bjarne Stroustrup,
                Addison-Wesley, 2000) </li>
                </ol>
            <h4> Other References: </h4>
            <ol class='bigpar'>
                <li><a
                href='http://www.aw-bc.com/catalog/academic/product/0,4096,0201823764,00.html'>UNIX
                for the Impatient, 2nd Edition</a> (P. W. Abrahams and B.
                Larsonk, Addison-Wesley, 1996) [A nice introductory book to
                Unix]</li>
                <li><a href='http://www.oreilly.com/catalog/lunix5/'> Learning
                the Unix Operating System (Nutshell Handbook), 5th Edition</a>
                (J. D. Peek, G. Todino-Gonguet, J. Strang, O'Reilly, 2001) [Good
                for UNIX beginner]</li>
                <li><a href='http://www.oreilly.com/catalog/prognu/'>Programming
                with GNU Software</a> (M. Loukides and A. Oram, O'Reilly, 1995)
                [Introdution on the tools on UNIX]</li>
                <li><a href='http://www.microsoft.com/MSPress/books/28.asp'>Code
                Complete</a> (S. McConnell, Microsoft Press, 1995) [On coding
                style]</li>
                <li><a
                href='http://www.cs.northwestern.edu/~fabianb/classes/c-unix.html'>Some
                other pointers on C/Unix</a> (Prof. Fabian E. Bustamante)</li>
                </ol>
            <h2> Grading </h2>
            <p class='bigpar'>
                There will be a midterm and a final exam. Exams will be
                in-class, closed-book, and will cover materials from lectures,
                required readings and projects. The final exam will not be
                cumulative.
                </p>
            <ul class='bigpar'>
                <li>Homeworks 10%</li>
                <li>Projects 50%</li>
                <li>Midterm 20%</li>
                <li>Final 20%</li>
                </ul>
            <h2> Homework </h2>
            <p class='bigpar'>
                There will be two kinds of homework assignments: reading
                assignments and textbook-style questions. You should have
                finished the assigned reading before coming to lecture. In
                addition, there will be about four sets of written homeworks.
                </p>
            <h2> Projects </h2>
            <p class='bigpar'>
                Over the course of the quarter, you will implement a user-level
                TCP/IP stack and a small web server that runs on top of it. Your
                code will not implement the full functionality of HTTP or
                TCP/IP, but it will implement enough of it to be able to
                interoperate with other, complete implementations. In keeping
                with the top-down approach of Kurose and Ross, you will build
                this from the web server down instead of from the network card
                up. I will initially provide you with the whole stack (as object
                code) and you will implement the web server. Next, I will peal
                away the layers of the stack, leaving you to implement your own
                versions. Each layer will have well-defined interfaces that you
                will fill out. Here are the layers, as well as each one?s
                percentage of the project grade. Note that the layers in italics
                will be supplied to you and are included only for completeness.
                </p>
            <ul class='bigpar'>
                <li>Project 1 (Sockets) 20%</li>
                <li>Project 2 (TCP) 50%</li>
                <li>Project 3 (routing) 30%</li>
                </ul>
            <p class='bigpar'>
                The implementation language will be C++ and the platform will be
                Red Hat Linux 9.0. We hope that you will use g++2.9.6 as your
                compiler, make as your build tool, and CVS as your version
                control system. You may also find that the C++ standard template
                library will make your life easier. You?ll be using the PCs in
                the TLAB, which will be specially configured for this class. You
                are welcome to use other machines, but we must be able to
                compile and run your code on our machines. Note that the
                Ethernet layer of the code requires that your kernel supports
                the Berkeley packet filter interface and that you can run your
                Ethernet card in promiscuous mode to extract and inject raw
                packets of such test cases.
                To evaluate your project, we will spot-check your source code,
                compile it, and run randomized testcases on it. When
                appropriate, we will supply you with examples. All the projects
                are to be done by teams of two students. Each team should work
                cooperatively on the design, implementation, and testing of
                their solutions. And the work should be shared in a fair manner.
                The submissions need to include a simple specification of work
                undertaken by each party.
                </p>
            <h2> Late Policy </h2>
            <p class='bigpar'>
                Unless otherwise indicated, homeworks and projects are due by
                the end of lecture on their due date. If you hand in an
                assignment late, we will take off 10% for each day (or portion
                thereof) it is late.
                </p>
            <h2> Cheating Policy </h2>
            <p class='bigpar'>
                It's OK to ask someone about the concepts, algorithms, or
                approaches needed to do the project assignments, I encourage you
                to do so; both giving and taking advice will help you to learn.
                However, what you turn in must be your own, or for projects,
                your group's own work; copying other people's code, solution
                sets, or from any other sources is strictly prohibited. We will
                punish transgressors severely.
                </p>
            <h2> Schedule </h2>
            <table id='schedule'>
                <tr class='label'><td>Date</td><td>Lecture Topics</td>
                    <td>Reading</td><td>Assignment</td>
                    </tr>
                <?php 
                    $string = file_get_contents("schedule.json");
                    $json_a = json_decode($string, true);

                    foreach($json_a as $entry_n => $entry_val){
                        print "<tr>";
                        print "<td>".$entry_val['date']."</td>";
                        print "<td>".$entry_val['topic']."</td>";
                        print "<td>".$entry_val['reading']."</td>";
                        print "<td>".$entry_val['assignment']."</td>";
                        print "</tr>";
                    }
                    ?>
                </table>
            </div>
        <?php include 'footer.php' ?>
    </body>
</html>
