if a packet is hopping, a copy of the packet or a chunk could be stored in each client as a cache, then the hopping route or tunnel is shorter, to find queries and packets for shorter routes, please use the ed2k hash system with md4
the code in c++ as a patch you find here:
http://downloads.sourceforge.net/gloster/gloster-0.9b2-src.tar.bz2?modtime=1119062685&big_mirror=0