Describe the similarities and differences between viruses and worms

Describe the similarities and differences between viruses and worms. Worms often use a buffer overflow attack to replicate. Describe what a buffer overflow attack is and how it can be mitigated.