Difference between AGameSession and IOnlineSession?

From what I read, AGameSession is a wrapper around the IOnlineSession, but I don’t understand how exactly. AGameSession has fewer methods than IOnlineSession and no references to it either. I’ve read differing takes on what AGameSession actually does (here and here) and where it’s supposed to live.

I’ve boiled it down to this:

  1. AGameSession: For server ↔ online service communication. Eg. The RegisterServer() method.
  2. IOnlineSession: For client ↔ server communication. Eg. The JoinSession() method.

I know AGameSession comes with the engine, while IOnlineSession comes in the OSS plugin, so it’s only required for OSS. So my question is:

  1. Do the two target different parts of the multiplayer flow? (as I deduced above)
  2. Where do they live? IOnlineSession also has CreateSession() which makes me think it should live on the server.
  3. If I don’t need OSS, what can I use AGameSession for?

NOTE: I’m not talking about any particular implementation of OSS (like EOS or Steam OSS.) I’m only experimenting with the default SubsystemNULL to understand the multiplayer flow in an uncomplicated manner. I’ve also gone through the (very good) Network Compendium but unfortunately it doesn’t clear my doubts.