A tunneling protocol is a network protocol which encapsulates one protocol or session inside another. Protocol A is encapsulated within protocol B, such that A treats B as though it were a data link layer. Tunneling is used to get data between administrative domains which use a protocol that is not supported by the internet connecting those domains.
Examples include:
Datagram-based:
Stream-based:
References