I've just started learning about CNC machines in hopes to create my own soon.

Please help me understand how a PC typically sends commands to a CNC machine. What is the standard protocol?

1.) Does the PC send number of steps/pulses for each axis and the hardware just switches in the higher voltage?
2.) Or, does the PC send a coordinate and the software on the controller hardware has to figure out how to get there?

My guess is that the answer is #1, but how does the PC know how fast your motors are capable of running? Do most software packages let you configure the speed along with X, Y, & Z limits?

I'm currently looking at the free Linux software (EMC2).