This is an introductory course about computer networks. The emphasis will be on the basic performance and engineering tradeoffs in the design and implementation of computer networks. Students will 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. Topics to be covered include: LAN, congestion/flow/error control, routing, addressing, naming, multicasting, switching, internetworking, quality of service, and network security. There will be both written and programming assignments, and a substantial project involving the design and implementation of a complete protocol stack.