In my understanding, if A wants to communicate with B, they could just choose some protocol and start communicating.

For example, they pick HTTP for short links, then B just waits for A's requests and then responds to A, that's it.

Or they could choose TCP to keep the connection for a while for some real-time/two-way communications and once it's done they just close it, and that's it. End of the story.

But why we need an extra term like tunnel and why we call it that?

If two points establish a connection then it's called a connection over some protocol, why there is something like HTTP tunnel or XXX tunnel?

Also I read about the `OSI` which contains 7 layers. 

**So may I say this**:

When we are browsing the websites, most requests and responses are based on `HTTP`, right? 

But `HTTP` is the top layer which requires the `network layer/IP` as well as `transport layer/TCP`, and my `HTTP packages` would be encapsulated and sent to `IP layer` which would then encapsulate them into `IP packages` and the same to `TCP packages` and all the way down to the `physical layer`.

May I say that this process is like tunneling? Since the origin packages (`HTTP packages`) are being encapsulated several times in order to fit the lower layers.

I've read some wiki and definitions but that's a little bit complex for all the details, but here I just want to know the impression or the original intention.