Description: This course introduces the underlying principles of computer networks, with an emphasis on protocols and communication and their role in the Internet. The course starts with a brief overview of physical network hardware and continues to build functionality on top of it. The emphasis is on the upper three TCP/IP layers: network, transport and application. At the end of this course students should have general knowledge on how the Internet works and have basic network programming skills.

Specific Outcomes:
Understand network architecture concepts, the OSI reference model and the TCP/IP architecture.
Differentiate between LAN technologies (including Ethernet, Token Ring, ATM-based and wireless).
Understand basic principles of error, flow, and congestion control at various levels of the protocol stack.
Differentiate between main interconnecting technologies (including hubs, bridges, switches, routers).
Differentiate between circuit-switching and packet-switching technologies.
Proficiency in analyzing and verifying communication protocols (such as IP, IPv6, ICMP, UDP and TCP).
Understand application-layer protocols (DNS, SMTP, FTP, HTTP) and their interaction with underlying services.
Proficiency in network programming in C and Java.
Understand network-related security threats and solutions.

Instructor: Mirela Damian, Professor of Computer Science