The pattern for all three is similar. server derives from node, but neither derive from network. node and server establish base functionality for the applicable context, and then multiply-derive network to mix in the core network functionality. Overall there is very little duplication, although network::session_server and network::session_inbound are very similar. These could probably be collapsed, but I've specifically avoided crossing the peer-to-peer and client-server streams above the lowest level base classes.
(edited)