When we talk about interfaces or protocols, there are a couple different ideas that often get lumped together. It might help to explain why some languages use "protocol" and some use "interface"—they have slightly different connotations.
Both concepts, at their best, are a way of saying "all I need is a type that supports..." along with a list of what it needs. This is what people mean when they say "Depend on abstractions instead of on concrete classes".
The main difference between Interfaces and Protocols is that Interfaces have to be explicitly implemented, or they don't compile. Protocol usually implies that, as long as the type signatures match, we're happy.