Congestion control with QoS through network utility maximization