pull down to refresh

How do PMs work? In my understanding (as a beginner), each relay is a server. You publish your posts to this server and clients can fetch posts from this server using websockets (do relays also propagate or mirror posts?). To which relay is a PM sent and how does it arrive to the recipient (who may use a different relay)? Do you need to subscribe to multiple relays in order to read PMs or would relay.nostr.band work?