Yes, they're like Java's interfaces.
I think an easy way to look at protocols is to think of a simpler example.
Let's think of any sortable objects. Can apply to anything, right? Let's say we want to make a Person object. A person can be sortable by last name, first name, age, whatever. Let's say we decided we want to sort Person by age. First we make a "Sortable" protocol and have required methods in it that make sorting possible, like compareTo. Our implementation of compareTo in our Person class, which enforces the Sortable protocol, would return -1 if younger, 0 if same age, 1 if older.
Now we can make a sorting class that takes a Sortable object and it can sort for you, regardless of what object it is as long as they follow the Sortable protocol.
Now that I think about it, I'm not sure if this was a simpler example, but it's workable.