Objects that are instances of classes that implement IComparable can be compared to other objects. (Read IComparable as "I can be compared.") The method on this interface that does this is CompareTo. This is useful if you want instances of such classes to know how to compare themselves to other objects.
Objects that are instances of classes that implement IComparer can be used to compare pairs of objects. (Read IComparer as "I can compare.") The method on this interface that does this is Compare. This is useful if you want to decouple the comparison logic from the class of objects being compared. One case where you might use this if you have various ways of comparing objects (this case-insensitive versus case-sensitive string comparisons).