in one embodiment , the present invention is a method and apparatus for improving data transfers in p2p networks . embodiments of the present invention make it possible for a requesting node on a p2p network to receive data from nodes that would normally be outside of the requesting node &# 39 ; s “ range ” by enabling the referral , by intermediate nodes , of the out - of - range nodes . this capability further facilitates the building of “ communities ” within the p2p network , where a “ community ” in the context of the present invention is a subset of nodes in a p2p network that share common interests and / or data , e . g ., over direct peer connections . for the purposes of the present invention , the term “ node ” refers to a computing device such as a personal computing device ( e . g ., a desk top computer , a laptop computer , a cellular telephone , a personal digital assistant , etc . ), a server , a router or the like that is connected to a p2p network . fig2 is a flow diagram illustrating one embodiment of a method 200 for referring out - of - range nodes in a p2p network , such as the network 100 illustrated in fig1 . the method 200 may be implemented at , for example , any node ( e . g ., 101 , 103 , 111 or 113 ) on the p2p network 100 . the method 200 is initialized at step 202 and proceeds to step 204 , where the method 200 receives a search request message , e . g ., from a peer ( connected ) node . the method 200 then proceeds to step 206 , where the method 200 examines the search request message and determines whether the receiver ( e . g ., the node at which the search request message was received in step 204 ) has the requested data . if the receiver has the requested data , the method 200 proceeds to step 208 and sends a response message over the network 100 back to the requesting node , e . g ., in accordance with conventional p2p protocols . the response message indicates that the receiver has the requested data . in one embodiment , the response message sent in step 208 further includes a referral message comprising at least one referred node , where a “ referred node ” is another node in the p2p network that has previously retrieved the requested data . in one embodiment , the referral message is included in the response message . in another embodiment , the referral message is a separate message sent to the requesting node . in yet another embodiment , the referral message is piggybacked on the response message . in one embodiment , the referred nodes are nodes that have retrieved the requested data directly from the receiver . the referral message may include , for example , at least one of the hostnames , ip addresses , virtual names and other identifiers of the referred nodes . in one embodiment , the referral message may be time - sensitive such that it includes only nodes that have retrieved the requested content within a predefined maximum timeframe ( e . g ., within the last 24 hours , etc .). this predefined maximum timeframe may be specified in the search request message ( e . g ., “ refer only nodes that have requested the data within the past 24 hours ”), or the predefined maximum timeframe may be specified at the receiver . the assumption is that if a referred node has recently ( e . g ., within the predefined maximum timeframe ) retrieved the requested data , the referred node will likely still have the requested data available to share . in yet another embodiment , the referral message may be sorted or ranked based on at least one of : uptime for the referred nodes , bandwidth of the referred nodes and latency of the referred nodes . in one embodiment , the method 200 sends a referral message based on a threshold distance that the search request message has traveled in the network . for example , in one embodiment , the method 200 only sends a referral message if the search request message &# 39 ; s time to live has expired ( e . g ., the receiver is an edge node in the requesting node &# 39 ; s view of the p2p network ). in another embodiment , the method 200 only sends a referral message if the search request message &# 39 ; s time to live is at least half expired . this threshold distance may be specified by the requesting node , the receiver , or both . alternatively , if the method 200 determines in step 206 that the receiver does not have the requested data , the method 200 proceeds to step 210 and inquires whether the receiver knows of another node that is likely to have the requested data ( e . g ., because the node has previously downloaded the requested data from another source as discussed above ). if the receiver does know of another node that is likely to have the requested data , the method 200 proceeds to step 208 as described above but sends only a referral message , and not a response message . thus , even if the receiver does not have the requested data , the receiver may still be able to refer the requesting node to one or more other nodes that are likely to have the requested data . however , if the receiver does not have the requested data and does not know of another node that is likely to have the requested data , the method 200 proceeds to step 212 and either forwards the search request message to the next node ( e . g ., in accordance with conventional p2p protocols ) or discards the search request message ( e . g ., if the search message &# 39 ; s time to live or hop count has expired ). the method 200 terminates in step 214 . based on the requesting node &# 39 ; s evaluation of the response message , including the referral message , the receiver may be contacted by the requesting node for at least a portion of the requested data ( if the method 200 has indicated that the receiver has the data ). the method 200 as described above enables the view of a node in a p2p network to be expanded while only minimally increasing network traffic . by enabling one or more nodes in a p2p network to “ refer ” out - of - range nodes to a requesting node , the view of the requesting node can be expanded despite the requesting node &# 39 ; s inherently limited range . the farther away a receiver / responding node is in hops from the requesting node , the smaller the intersection is between the requesting node and the receiver / responding node , and the larger the expanded view of the p2p is likely to therefore be . thus , unlike conventional p2p expansion methods that tend to result in a sometimes exponential increase in network traffic ( e . g ., by increasing either a search request message &# 39 ; s time to live or a node &# 39 ; s number of peer connections ), the method 200 actually conserves traffic while at the same time “ expanding ” the network . in addition , response latency is typically reduced as a requesting node can select faster nodes which can provide more data than nodes on slower links . those skilled in the art will appreciate that a node may periodically update its referral message , for example based on one or more test searches . for example , a node may send a test search message to one or more nodes identified in its referral message , in order to determine that the nodes identified in the referral message still have the indicated data . if a node identified in the referral message no longer has the indicated data , it can be removed from the referral message . test searches may be performed periodically , e . g ., based on an expiration of a predefined period of time . in yet another embodiment , a node may remove a referred node from the referral message if the node receives a message from a requesting node ( to which the referred node has been referred ) indicating that the referred node no longer has the indicated data . moreover , by referring nodes that have or are likely to have the requested data , the method 200 facilitates the building of “ communities ” within the p2p by identifying out - of - range nodes with potentially similar interests ( e . g ., as inferred by the request for the same data ). the existence of communities allows nodes with similar interests to directly communicate and exchange data , thereby reducing overall network traffic ( as search request messages sent through the community tend not to propagate as far into the p2p network as is typical with a normal search as described in connection with fig1 ). fig3 is a flow diagram illustrating one embodiment of a method 300 for building communities in a p2p network , such as the network 100 illustrated in fig1 . the method 300 may be implemented at , for example , any node ( e . g ., 101 , 103 , 111 or 113 ) on the p2p network 100 . the method 300 is initialized at step 302 and proceeds to step 304 , where the method 300 sends a search request message , e . g ., to one or more peer nodes . in step 306 , the method 300 receives at least one response message responsive to the search request message sent in step 304 . the response message includes at least one referred node , e . g ., as described with reference to the method 200 . in one embodiment , the response message may also include an indication that the responding node has the requested data , e . g ., in accordance with traditional p2p protocols . the method 300 may collate multiple response messages received from multiple responding nodes to create an aggregate list of potential sources for the requested data . once the method 300 has received the response message , the method 300 proceeds to step 308 and retrieves at least a portion of the requested data from at least one of the responding node and / or at least one referred node listed in the referral message . in one embodiment , the method 300 may choose which portions of the requested data to retrieve from which responding and / or referred nodes , based on a collated list of potential sources for the requested data . in another embodiment , the requesting node may identify one or more preferred nodes for searching , based on the information received in step 306 . in step 310 , the method 300 creates a direct peer connection to at least one of the referred nodes , e . g ., to admit the referred node into or to create a “ community ” or subset of nodes in the p2p network that share common interests and / or data . in one embodiment , the referred node is a mutually preferred node ( e . g ., preferred for searching ). in one embodiment , step 310 further includes terminating an existing peer connection for every new peer connection that is created ( e . g ., to conserve network resources where each node in the p2p network is allowed a maximum number of peer connections ). thus , for example , referring back to fig1 , the method 300 may create a direct peer connection between the requesting node 101 and the normally out - of - range node 113 , which has the requested data , and may terminate the peer connection between the requesting node 101 and the intermediate node 111 illustrated to the left of the requesting node 101 . fig4 is a high level block diagram of the network expansion method that is implemented using a general purpose computing device 400 . in one embodiment , a general purpose computing device 400 comprises a processor 402 , a memory 404 , a data transfer module 405 and various input / output ( i / o ) devices 406 such as a display , a keyboard , a mouse , a modem , and the like . in one embodiment , at least one i / o device is a storage device ( e . g ., a disk drive , an optical disk drive , a floppy disk drive ). it should be understood that the data transfer module 405 can be implemented as a physical device or subsystem that is coupled to a processor through a communication channel . alternatively , the data transfer module 405 can be represented by one or more software applications ( or even a combination of software and hardware , e . g ., using application specific integrated circuits ( asic )), where the software is loaded from a storage medium ( e . g ., i / o devices 406 ) and operated by the processor 402 in the memory 404 of the general purpose computing device 400 . thus , in one embodiment , the data transfer module 405 for expanding a p2p network and building p2p communities described herein with reference to the preceding figures can be stored on a computer readable medium or carrier ( e . g ., ram , magnetic or optical drive or diskette , and the like ). thus , the present invention represents a significant advancement in the field of data transfer networks . a method and apparatus are provided that make it possible for a requesting node on a p2p network to receive data from nodes that would normally be outside of the requesting node &# 39 ; s “ range ” by enabling the referral , by intermediate nodes , of the out - of - range nodes . this capability further facilitates the building of “ communities ” within the p2p network , enabling faster , more efficient data transfers and reducing network traffic . while foregoing is directed to the preferred embodiment of the present invention , other and further embodiments of the invention may be devised without departing from the basic scope thereof , and the scope thereof is determined by the claims that follow .