There are three broad types of consensus problems:
Broadcast problem:
There is a single sender and multiple receivers.
The sender has some value that it wants to broadcast to the receivers, and the receivers want to agree on the value that the sender sent.
Agreement problem:
There are multiple processes that want to agree on a value.
Each process has an initial value, and they want to agree on a single value that is one of the initial values.
State machine replication problem:
There are multiple processes that want to agree on a sequence of values to give an illusion of a single process executing a sequence of commands.
Network models
There are three broad types of network models:
Synchronous: there is a known finite upper bound on message delivery time $\Delta$.
There are a few popular flavours:
Lock-step synchronous: time is divided into rounds, and in each round each process can send messages to other processes, and all messages sent in round $r$ are delivered by the end of round $r$.
Continuous synchronous: there is a known, finite upper bound $\Delta$ on message delivery time, but time is not divided into rounds.
Asynchronous: there is no upper bound on message delivery time.
Async is pronounced as ay-sink.
Partially synchronous:
Network mostly behaves like a synchronous network, but there can be periods of asynchrony.
Global Stabilization Time (GST) approach:
There is an event called GST that occurs after finite time.
No guarantee on message delays before GST, but after GST all message must arrive within some known bound $\Delta$.
Any message sent at time x must be delivered by time $\Delta + \max(x, \textsf{GST})$.
Unknown latency approach:
The system is always synchronous, but the bound of the maximum delay is unknown to the protocol designer.
Other specialized network models (non-exhaustive):
Semi-synchronous
Weakly synchronous
Mobile sluggish model
Granular Synchrony
Failure models
There are three broad types of failure models:
Crash failures: a process can fail by crashing, and once it crashes it does not recover.
Omission failures: a process can fail by omitting to send or receive messages, and can continue to participate in the protocol.
Byzantine failures: a process can deviate arbitrarily from the protocol.