This question already has an answer here:
The fish protocol is a sort of ftp over ssh, that is touted as not needing special software on the server side (unlike scp and sftp).
From a cursory glance it seems like it allows fish commands that fall back to basic shell commands if the server doesn't have the fish software installed. But why not just use the shell commands directly?
(The question linked to above explains the differences between the various protocals, but it doesn't explain the mechanism of fish, or why bother with the protocal if you are sending equivalent shell commands anyway.)