A method of managing packets in a communication network including a plurality of communication nodes (101-107, 300), the method comprising: receiving a packet including a packet header, the packet header including a packet identifier uniquely identifying the packet; determining a packet type of the packet received by a first communication node (101-107, 300) based on the packet identifier; dropping the packet when the packet is determined to be a duplicate packet; and characterized by routing the packet to a neighbor communication node (101-107, 300) in a manner that prevents the packet from being caught in a loop when the packet is determined to be a returned packet, that has been deliberately returned to the first communication node (101-107, 300) because it has reached a dead end in the path it was traveling, or a new packet, wherein the routing comprises: selecting a second communication node (101-107, 300) to which to forward the packet from a set of neighbor communication nodes (101-107, 300) of the first communication node (101-107, 300); determining whether the second communication node (101-107, 300) has forwarded the packet based on a traversal history included in the packet header; and forwarding the packet to the second communication node (101-107, 300) when it is determined that the second communication node (101-107, 300) has not forwarded the packet and wherein the packet is determined to be: the new packet if the packet identifier does not match a packet identifier of a packet previously received at the first communication node (101-107, 300); the duplicate packet if the packet identifier matches the packet identifier of the previously received packet at the first communication node (101-107, 300) and if the traversal history of the packet indicates that the packet was not forwarded previously by the first communication node (101-107, 300); and the returned packet if the packet identifier matches the packet identifier of the previously received packet at the first communication node (101-107, 300) and if the traversal history of the packet indicates that the packet was forwarded previously by the first communication node (101-107, 300). receiving a packet including a packet header, the packet header including a packet identifier uniquely identifying the packet; determining a packet type of the packet received by a first communication node (101-107, 300) based on the packet identifier; dropping the packet when the packet is determined to be a duplicate packet; and characterized by routing the packet to a neighbor communication node (101-107, 300) in a manner that prevents the packet from being caught in a loop when the packet is determined to be a returned packet, that has been deliberately returned to the first communication node (101-107, 300) because it has reached a dead end in the path it was traveling, or a new packet, wherein the routing comprises: selecting a second communication node (101-107, 300) to which to forward the packet from a set of neighbor communication nodes (101-107, 300) of the first communication node (101-107, 300); determining whether the second communication node (101-107, 300) has forwarded the packet based on a traversal history included in the packet header; and forwarding the packet to the second communication node (101-107, 300) when it is determined that the second communication node (101-107, 300) has not forwarded the packet and selecting a second communication node (101-107, 300) to which to forward the packet from a set of neighbor communication nodes (101-107, 300) of the first communication node (101-107, 300); determining whether the second communication node (101-107, 300) has forwarded the packet based on a traversal history included in the packet header; and forwarding the packet to the second communication node (101-107, 300) when it is determined that the second communication node (101-107, 300) has not forwarded the packet and wherein the packet is determined to be: the new packet if the packet identifier does not match a packet identifier of a packet previously received at the first communication node (101-107, 300); the duplicate packet if the packet identifier matches the packet identifier of the previously received packet at the first communication node (101-107, 300) and if the traversal history of the packet indicates that the packet was not forwarded previously by the first communication node (101-107, 300); and the returned packet if the packet identifier matches the packet identifier of the previously received packet at the first communication node (101-107, 300) and if the traversal history of the packet indicates that the packet was forwarded previously by the first communication node (101-107, 300). the new packet if the packet identifier does not match a packet identifier of a packet previously received at the first communication node (101-107, 300); the duplicate packet if the packet identifier matches the packet identifier of the previously received packet at the first communication node (101-107, 300) and if the traversal history of the packet indicates that the packet was not forwarded previously by the first communication node (101-107, 300); and the returned packet if the packet identifier matches the packet identifier of the previously received packet at the first communication node (101-107, 300) and if the traversal history of the packet indicates that the packet was forwarded previously by the first communication node (101-107, 300).