Wireless Communication core concepts based on the NRF24 libary for Arduino
To quote the datasheet:


  A data pipe is a logical channel in the physical RF channel.


In the intended usage, each transceiver node would get its own pipe "address". This essentially signal that the receiving logic uses to know when to listen up amongst all the radio noise that might be on the particular physical channel (i.e. frequency) you are using. You can sort of pick any number, however some numbers are harder to pick out in that noise than others.

Now in that example, there are two pipe numbers. pipes[0] is used by the sample code as the destination address, the node messages will be sent to. pipes[1] is used as the receiving address so "ping" messages marked for F0F0F0F0D2 will be ACK'ed by the transceiver and stored (in a small buffer) for your microprocessor to retrieve.

The sample code also does a higher-level "pong" by sending a new message back to the sender, who is presumed to be listening for messages starting with F0F0F0F0E1 (pipes[0]) — presumed and needing configured in the code because the nRF24 packet structure does not include the sender's address, only the receiver.

[Sorry to muddle this, but one you understand the above you should flip things around and pretend the transmitted address pattern is actually the sender identity. This is implied by the fact that a transceiver can listen for up to 6 formerly "recipient" pipe addresses ± simultaneously as far as your microprocessor is concerned.

In normal usage, packets are auto-acknowledged and auto-retried so only one node should send per pipe (i.e. address) — otherwise two nodes will hear ACKs intended for each other and confused retry attempts can abound. If however you turn the auto-ACK stuff off and implement your own higher-level protocol for reliability, you could have all devices on a particular frequency also listen/send on the same particular pipe address pattern. The advantage here is that it avoids the limitation that an nRF24 transceiver can only be automatically handling receipt for five or six pipe addresses simultaneously. If you want to have more "sender" (in the flipped sense) nodes than that, you need to manage sharing them.]