Screen is a "terminal multiplexer", originated by the GNU project, which multiplexes a single terminal across multiple processes, typically interactive shells, each such terminal generally emulating the functionality of a DEC VT100 terminal. It somewhat resembles the notion of a X window manager, and there are a number of X window managers that behave very much like screen.
What does a terminal multiplexer do?
From a single terminal...
It allows opening multiple virtual terminal "windows"...
This may involve splitting the terminal into sections, where each such terminal gets one of these sections...
Or it may involve displaying the material for one "virtual" terminal on a section...
Or there may be some virtual terminals whose contents are not presently being displayed; that content lurks behind the scenes until such time as the user selects that virtual terminal for display...
The session manager may get suspended, so that no virtual terminal has its output shown, but the content for all virtual terminals, again, lurk behind the scenes until displayed...
There may be options to allow multiple connections to a terminal session so that multiple users may work on them concurrently, which is useful for sharing activity.
tmux is a BSD-licensed terminal multiplexer. It was created much later than GNU Screen, and so has a younger and less crufty code base.
I use tmux a lot, and have a blog post, My saga with tmux on this.
I did a short talk at GTALUG (December 2015) about Screen, Tmux, and byobu
Mosh uses ssh protocol to set up a connection, and then uses an encrypted UDP connection to transmit screen changes. This is very good for handling mobile connections where you're liable to have your connections trampled by bad Wifi quality; the connection doesn't have to go down; you can recover nicely from that with Mosh. I use Mosh a fair bit, and did a blog post, A wee jot about Mosh on this.
Unlike Screen and tmux, mosh doesn't do things about having multiple virtual terminals; you might use tmux within a mosh session, or run tmux, and have a virtual screen that is running a mosh session.