We propose an alternating direction method of multipliers (ADMM) based solution to a network utility maximization (NUM) problem, and show that it leads to a protocol for congestion control that converges rapidly to utility maximizing transmission rates while guaranteeing zero congestion throughout the network. Our approach hinges on a novel decomposition of the NUM problem that leads to easily solvable iterate update subproblems - we provide closed form solutions for these subproblems for proportional fairness and minimum delay fairness utility functions. We further show that this decomposition lends itself to a distributed implementation that naturally allows for the generation of a set of feasible transmission rates at each iteration of the algorithm, thus ensuring that queues remain empty throughout the network. We formalize these notions in the form of a congestion control protocol, and comment on their usefulness and implementation in the context of recent developments in software defined networking. Finally we compare the performance of our approach to state-of-the-art algorithms from the networking and optimization communities via a datacenter network simulation.