Written by Peter Paluch:
The fundamental difference between distance vector and link state routing protocols is in the nature of the routing information routers send to each other.
In distance vector protocols, each router sends its neighbors a list of all known networks along with its own distance to each one of these networks. Because in software engineering, a list (or better said, an array) is also called a vector, the list of networks and distances is sometimes called the vector of networks and distances, hence the name distance vector routing protocol.
In link state routing protocols, each router describes itself and its interfaces to its directly connected objects; these objects can be either neighboring adjacent routers, or they can be directly attached networks. This information is passed unchanged from one router to another, so that in the end, every router knows about every other router, its interfaces and what exactly they connect to. In essence, in link state routing protocols, each router knows the entire network topology down to every single router and every single interconnection, also called the state of a link, hence the name link state routing protocol.
So these protocol types differ in what they know about the network and what information they use to compute the routing table. Distance vector routing protocols do not advertise the entire network topology, and with a distance vector routing protocol, none of the routers in the network knows how the network looks like in its entirety. A router running a distace vector routing protocol only knows its directly connected neighbors, and it knows about the lists of networks these neighbors have advertised, but it does not really know where those networks really are.
Link state routing protocols allow a router to have a complete map of the network, and use specific algorithms to find shortest paths to every object in the network, including destination IP networks.
The fact that we have both distance vector and link state routing protocols is due to historical reasons: Originally, distance vector protocols were much easier to design and implement in software, and so they were very popular. However, without some clever ideas which haven't been invented until early 90's, they had some drawbacks, especially in terms of how fast they reacted to a change in the network and how they avoided creating a routing loop. In the meantime, another approach to routing protocol design, the link state approach, was developed. Link state protocols are much more complex and require more processing power and memory, but as the resources in routers improved over time, link state routing protocols slowly took over.
Nowadays, we have extremely fine routing protocol implementations from both worlds - EIGRP is a state-of-the-art distance vector routing protocol, while in link state world, we have OSPF and IS-IS.