Computer Networks: Architecture and Protocols

This course explores the field of computer networking and communication, emphasizing network architecture and software design issues. The fundamental idea of computer networking is to make it possible for a diverse set of applications to be able to communicate arbitrary data between two or more computers. We will discuss the basic performance and engineering trade-offs in the design and implementation of computer networks at every level, from the physical (copper wire, optical fiber, satellite, ...) to the application layer (e.g., world-wide web, video-conferencing). The idea is to learn not only what computer networks are and how they work today, but also why they are designed the way they are and how they are likely to evolve in the future. We will draw examples primarily from the Internet and ATM environments. Examples of topics that we will cover include routing and addressing, internetworking, mobility, error detection, flow and congestion control, connection establishment and management, data representation, network security, quality of service issues, file transfer, electronic mail, and the world wide web.

Class time: 2:00-3:15 p.m., Tuesdays and Thursdays.
Class location: CSB 601.

Instructor:

Sandhya Dwarkadas
e-mail: sandhya at cs
Office: CSB 717, 275-5647
Office hours by appointment, but don't be afraid to drop by. If you want to be sure I'm in my office, use e-mail to contact me.

TA:

Chunqiang (Tom) Tang
e-mail: sarrmor at cs
Office: CSB 617, 275-1192
Office Hours: 3:30-4:30 p.m., Tuesdays and Thursdays.
Tom's web page for the course

Questions and Answers

E-mail is best. Questions of general interest can be posted to the cs.cs257 newsgroup. Answers will be posted as soon as possible. Slides for the lectures will be accessible here. Assignments will be available here . Watch for changes by looking at the modification date. I will try to post any changes to the lecture notes online before class meets so that you can bring updated copies to class with you. However, I will not always be able to do so.

Prerequisites:

CSC 252 or equivalent, and C/C++ programming experience under Unix.

Required text:

Peterson and Davie, Computer Networks: A Systems Approach, 2nd edition, 2000.

Other texts you might reference:

Tanenbaum, Computer Networks, 3rd Ed, 1996. This is excellent optional reading material that should fill in some of the details/omissions.

James Kurose and Keith Ross, Computer Networking: A Top-Down Approach Featuring the Internet}, 2001 (Addison-Wesley). This is easy reading for those topics that may be hard to digest, but lacks some of the detail I will cover.

A widely liked book on writing Unix programs that use a computer network that will be useful for your projects is W. Richard Stevens, Unix Network Programming, Prentice-Hall, Volume I, second (1998) edition - if you already have the first edition (1990), that should work well too). I'd recommend buying this book - it's an extremely handy programming guide.

Topics Covered:

Network architectures (protocols, layering, interfaces, encapsulation)

Network technologies (e.g., Ethernet, FDDI, ATM, ISDN, wireless, HIPPI)

Internetworking (addressing, routing, csubnetting, autonomous systems)

Resource allocation (fair queuing, virtual clocks, congestion avoidance)

End-to-end issues (data representation, compression, authentication, encryption)

Interprocess communication (datagrams, virtual circuits, request/reply, reliable broadcast, mobility)

Application-layer protocols (SNMP, electronic mail, worldwide web)

Assignments and Grading

There will be two-three programming assignments, and two exams. The programming projects are bound to be time-consuming, with the idea that you learn from the experience, so be sure to start on them as soon as they are handed out. There will also be a few written homework assignments, and occasional student presentations. Those taking the course as CSC 457 should come see me to determine what additional assignments and readings will be required. Your grade will be based on a combination of the above, with a tentative division for the undergraduates being 50% for the programming assignments, 10% for any homework, and 40% for the two exams.

Helpful Documents for the First Project

For an easy-to-read overview of the World-Wide Web organization and high-level structure of HTTP, take a look at Chapter 7 in Tanenbaum's book.

For an overview of Berkeley sockets, take a look at Lecture 6 .

Also take a look at Chunqiang (Tom)'s Tutorial Slides

RFC 2616: Hypertext Transfer Protocol (HTTP 1.1). RFC 2616 describes the format of the HTTP 1.1 protocol requests and responses, and is an update to RFC2068.

RFC 2068: Hypertext Transfer Protocol (HTTP 1.1). RFC 2068 describes the format of the HTTP 1.1 protocol requests and responses.

RFC 1945: Hypertext Transfer Protocol (HTTP 1.0). RFC 1945 describes the format of the HTTP 1.0 protocol requests and responses which your server will be receiving and generating.
RFC 1738: Uniform Resource Locators. RFC 1738 describes the format of URLs which your server will need to parse. Most of the legal URLs specified in RFC 1738 are not, however, supported by the ACME proxy server.
RFC 1808: Relative Uniform Resource Locators - an extension to RFC 1738.

These sample client and server examples using TCP/IP should help you get started on programming your proxy server using Berkeley sockets.

Interesting Links

The International Engineering Task Force
An Article on Undersea Cable Systems
Internet Protocol Version 6 (IPv6)
Cache-Offs --- Web Proxy Caching Products Competition

Potential Seminar Topics for Graduate Students

ACM Special Interest Group on Data Communication is one place you can look for ideas on interesting topics to do your literature survey and seminar on.

Potential topics include:

Multicast over the Internet/MBone
Routing
Wireless and mobility issues
Security (Firewalls, VPNs, cryptography)
System area networks (SANs)
CORBA/DCOM
Congestion control
IPv6 - QoS issues
Web caching
Active networks