1. A method of load balancing in a network, comprising: receiving, by a switch, a packet; looking up, by the switch, a packet header of the packet to check whether the packet belongs to an existing flow; if the packet belongs to an existing flow, forwarding the packet based on information in a flow table of the switch, and otherwise, creating a new entry in the flow table for the packet and calculating the next hop; determining if the next hop is an upstream or downstream layer of the network based on a destination IP address; and comparing load values of links to the next layer and selecting a worst-fit link, wherein the network is represented by a model, such that the network is modeled as a directed graph G=(H ∪S,L), where a node h εH is a host, where a node s εS is a switch, and where an edge (n i , n j ) εL is a link connecting a switch with another switch or a host, each edge (n i ,n j )having a nonnegative capacity c(n i ,n j )≧0 indicating the available bandwidth of the corresponding link, the flows of the network being represented as F 1 ,. .. , F n for n flows, F k being defined as a triple F k =(a k , b k , d k ), where a k εH is the source host, where b k εH is the destination host, and where d k is the demanded bandwidth, f k (n i , n j ) being used to indicate whether flow K k is routed via link (n i , n j ), and a load-balancing objective function of the model minimizing the maximum load among all the links, by minimizing Equation (1) subject to constraints of Equation (2) and Equation (3): ∀ ( n i , n j ) ∈ L , ∑ k ⁢ f k ⁡ ( n i , n j ) ⁢ d k ≤ c ⁡ ( n i , n j ) ⁢ max ⁢ ⁢ load ≤ c ⁡ ( n i , n j ) ( 1 ) ∀ k , ∀ n i ∈ H ⋃ S ⁢  ⁢ { a k , b k } , ∑ n j ∈ H ⋃ S ⁢ f k ⁡ ( n i , n j ) = ∑ n j ∈ H ⋃ S ⁢ f k ⁡ ( n j , n i ) ( 2 ) ∀ k , ∑ n i ∈ H ⋃ S ⁢ f k ⁡ ( a k , n i ) = ∑ n i ∈ H ⋃ S ⁢ f k ⁡ ( n i , b k ) = 1. ( 3 )