Distributed systems with different levels of dependence to central services have been designed and used during recent years. Pure peer-to-peer systems among distributed systems have no dependence on a central resource. DHT is one of the main techniques behind these systems resulting into failure tolerant systems which are also able to isolate continuous changes to the network to a small section of it and therefore making it possible to scale up such networks to millions of nodes. This survey takes a look at P2P in general and DHT algorithms and implementations in more detail.