One of the widely used models for communication channels is the Binary Erasure Channel (BEC). An important application of the BEC is to model data transmission over the Internet. Mostly, the reliability of transmission of data over the Internet is guaranteed by the use of appropriate protocols. These protocols are inefficient in many cases, such as transmission of data from one server to multiple receivers, or transmission of data over poor wireless or satellite links. Another solution to make the data transmission reliable is to use linear erasure correcting codes. An estimation of the erasure rate of the channel is required in designing these codes. However, in situations such as satellite or wireless transmission where receivers experience sudden abrupt changes in their reception characteristics, it is not possible to track the erasure rate of the channel correctly. In order to provide reliability and efficiency in data transmission, a new kashida; TEXT-ALIGN: justify; LINE-HEIGHT: 17pt; TEXT-KASHIDA: 0%; MARGIN: 0in 0in 0pt; mso-line-height-rule: exactly" Given a set of input symbols (message symbols), a Fountain code produces a potentially limitless stream of output symbols (linear combinations of the input symbols). Each receiver tries to recover the original input symbols from the set of received output symbols. For BEC, decoding of a Fountain code is equivalent to solving a consistent system of linear equations and its computational complexity is deeply influenced by the coefficient matrix of the system. Computational complexity of decoding and the number of output symbols required to achieve a high probability of successful decoding are the main concerns in designing Fountain codes. With the increase in the processing power of the CPUs, it seems that the number of required output symbols will become the most important factor. In this thesis, two important Fountain codes designed for the ML decoding are described; one of them has been selected for MBMS download delivery within third generation partnership project (3GPP). Then we try to find the optimal Fountain code (with ML decoding algorithm) in the cases that the complexity of decoding is not of importance. We define the quasi-random LT code and introduce it as the unique optimal Fountain code among all Fountain codes with random coefficient matrix. The optimal code requires the minimum number of output symbols to achieve a predefined probability of successful decoding. In other words, with a fixed number of output symbols the optimal code has the highest probability of successful decoding. Fountain code, Rateless code, LT code, Raptor code, Binary Erasure Channel (BEC), Gaussian Elimination Method, ML decoding, Quasi-Random LT code