Typically, FPGAs get their internal state (hardware configuration) from an external memory (e.g. Flash).
For development, there are "old" parallel printer port Byteblasters; most devkits come with a USB-Blaster or have something similar onboard. This is what's commonly used. So, the ethernet blaster is only one of many choices.
For production programming you can use these, or you can use different JTAG tools via STAPL.
You can, as well, configure your FPGA during power on from another device, e.g. a processor.
When your FPGA is configured, it is up to you which interface to use, as you can implement any standard or proprietary interface you could think of in your FPGA. The building blocks are called IP core.
What kind of "communication" are you thinking of?
Configure, Program, Debug or User data ?