Como o código Hamming funciona?

Ao transmitir dados, o código Hamming aparentemente permite recriar dados que foram corrompidos pelo fio (um código de correção de erros).

Como isso funciona e quais são suas limitações, se houver?

Existem soluções melhores para a correção de erros (em oposição à retransmissão)? Existem circunstâncias em que a retransmissão é melhor?