In this course, we trace the evolution of networks and identify the key concepts and functions that form the basis for layered architecture. We introduce examples of protocols and services that are familiar to the students, and we explain how these services are supported by networks. Further, we explain fundamental concepts in digital communication, and focus on error control techniques that include parity check, polynomial code, and Internet checksum. Students will be required to have some previous programming experience in C-programming (C++/Java), some fundamental knowledge of computer organization and IT architecture and a background in computer science is a plus.