A tunneling protocol is a network protocol which encapsulates one protocol or session inside another.
Examples include:
Datagram-based:
Stream-based: