Network coding is a new theory that may change the way we think about multicasting information in a point-to-point network. It finds applications in network multicast, distributed information storage, fault-tolerant computer communications, and satellite communications, among other fields. This paper presents a survey of this technology, including uses, problem formulation, the results it produces, and special problems.