For many years the state of the art was to use a convolutional "inner code" and a block "outer code". The "inner" and "outer" terminology come from the following block diagram:
$$\boxed{\scriptstyle \rm Payload}{\longrightarrow}\boxed{\scriptstyle\textrm{Outer Encode}}{\longrightarrow}\boxed{\scriptstyle\textrm{Inner Encode}}{\longrightarrow}\boxed{\scriptstyle\rm Channel}{\longrightarrow}\boxed{\scriptstyle\textrm{Inner Decode}}{\longrightarrow}\boxed{\scriptstyle\textrm{Outer Decode}}{\longrightarrow}\boxed{\scriptstyle\rm Payload}$$
Convolutional codes were used as the inner code because they are very powerful and can correct a large number of bit errors. They have a weakness, though- when there are lots of errors that are close together they can break down and spit out errors in a burst at that location. The outer code is used to correct those bursts of errors. Block codes are not as powerful as convolutional codes (do not use as many parity bits/symbols either), but they are good at dealing with bursts of errors. Also, there was usually a deinterleaver in between the inner and outer codes that spread the bursts of errors among many blocks, making it even easier for the block code to correct them.
As Wikipedia's Deep Space Telecommunications section says, early on the inner/outer codes were Viterbi (convolutional) and Reed-Muller codes. Later they were Viterbi and Reed-Solomon codes.
In the early 90's Turbo codes were discovered and took the FEC world by storm. In the 2000's low-density parity check codes have grown in popularity. They were discovered in 1960 by Gallagher, but were not feasible to implement until recently because of the computational load that they require. Both Turbo and LDPC codes are near optimal in the sense that they get very close to the Shannon limit of what it is possible to achieve with FEC. Presently NASA uses both Turbo and LDPC codes, as far as I'm aware.
Like designing any reliable communications system, designing reliable deep space communications requires more than just adding powerful FEC. Signal power, free-space path loss, receiver noise, etc., must be taken into consideration. Deep space communications actually have a lot of advantages and two enormous disadvantages. The disadvantages are the enormous distance and the limited transmitter power. The advantages are the really high-gain directional antennas, the low noise that the earth dishes get from looking into empty space, the even lower noise they get by cooling their receivers with liquid nitrogen, etc. They can also slow down their data rate while keeping the transmitted power constant to give each bit more energy.