Ramanujan graphs have become of central importance in communication network theory since they solve a certain optimization problem. Their study involves a beautiful synthesis of diverse branches of mathematics, notably graph theory, number theory, algebraic geometry and representation theory. In this talk, we give a basic introduction to the subject in a rather leisurely style. The talk should be accessible to undergraduates.