It should be possible for all traffic between two Remoting endpoints to share a single connection for all communication (assuming a transport that uses TCP or similar). However an exception to this is that in order to load classes on demand (either from server-to-client like we have today, or client-to-server which has been requested), a separate channel is needed.
The reason for this is that classes are not identified as missing until a deserializer actually attempts to load them - at this point, even if we have a complete framework for sharing the connection, the serialization stream is monopolizing the connection so it cannot be used to load classes.
So this means that in order to support class loading, a second connection is needed to facilitate this function. In Remoting 3, there should be some sort of SPI method to open a classloading channel for each transport that supports it. In addition, it should be possible for connection-oriented transports to share a single connection for all classloading (in either direction) between two endpoints.