A method of distributing data packets through a network comprising a plurality of nodes and a plurality of links connecting each pair of nodes, the method comprising: receiving at least one data packet at a first node (20,30) from a second node (20,30), wherein the first node (20,30) is connected to the second node (20,30) via a first plurality of links, determining a current set of weights which are applied by the second node (20,30) to distribute data packets across the first plurality of links, wherein the current set of weights comprises a current weight for each link in the first plurality of links and wherein the current set of weights are read from a header attached to the at least one data packet; analysing, once the at least one data packet is received at the first node (20,30) from the second node (20,30) to determine if the current set of weights are to be adjusted; and when it is determined that the current set of weights is to be adjusted, generating an adjusted set of weights by: determining an adjustment factor to be applied to the current weight for a selected link in the first plurality of links, wherein the adjustment factor re-distributes the current weight for the selected link among other links in the first plurality of links in proportion to the current weight of all of the first plurality of links; and applying the adjustment factor to the current weight for the selected link and at least one other current weight in the current set of weights; sending the adjusted set of weights from the first node (20,30) to the second node (20,30);checking whether the adjusted set of weights are received by the second node (20,30) from the first node (20,30) in a predetermined time range; in an instance that the adjusted set of weights are not received by the second node (20,30) in the predetermined time range, resetting, by the second node, the adjusted set of weights to original set of weights. receiving at least one data packet at a first node (20,30) from a second node (20,30), wherein the first node (20,30) is connected to the second node (20,30) via a first plurality of links, determining a current set of weights which are applied by the second node (20,30) to distribute data packets across the first plurality of links, wherein the current set of weights comprises a current weight for each link in the first plurality of links and wherein the current set of weights are read from a header attached to the at least one data packet; analysing, once the at least one data packet is received at the first node (20,30) from the second node (20,30) to determine if the current set of weights are to be adjusted; and when it is determined that the current set of weights is to be adjusted, generating an adjusted set of weights by: determining an adjustment factor to be applied to the current weight for a selected link in the first plurality of links, wherein the adjustment factor re-distributes the current weight for the selected link among other links in the first plurality of links in proportion to the current weight of all of the first plurality of links; and applying the adjustment factor to the current weight for the selected link and at least one other current weight in the current set of weights; determining an adjustment factor to be applied to the current weight for a selected link in the first plurality of links, wherein the adjustment factor re-distributes the current weight for the selected link among other links in the first plurality of links in proportion to the current weight of all of the first plurality of links; and applying the adjustment factor to the current weight for the selected link and at least one other current weight in the current set of weights; sending the adjusted set of weights from the first node (20,30) to the second node (20,30);checking whether the adjusted set of weights are received by the second node (20,30) from the first node (20,30) in a predetermined time range; in an instance that the adjusted set of weights are not received by the second node (20,30) in the predetermined time range, resetting, by the second node, the adjusted set of weights to original set of weights.