I would compare open port with a telephone number.
Imagine you can have a telephone to dial, but not a telephone number to receive calls.
For two parties to talk to each other (or one talking all the time) it does not matter who actually dial. The important part is that at least one them has a telephone number, then the other partner just calls him.
If none of them has a telephone number, a supernode is used in some systems, which could be friend that receives two calls, one from each of them, and joins them together.
This is the only way to talk if none of the two parties has a telephone number. The problem is that the conversation is then constrained to the quality of the telephone line of this supernode friend.
I hope this analogy makes it easier to understand the 3 possible scenarios.