All the access to files, network, debugger, etc.. is wrapped by an IO abstraction layer that allows to interpret all the data as if it was a single file.
The IO backend is implement as IO plugins. They are selected depending on the uri file.
# debug this file using the debug io plugin
$ radare dbg:///bin/ls
# allocate 10MB in a malloc buffer
$ radare malloc://10M
# connect to remote host
$ radare connect://192.168.3.33:9999