プロトコルスタック
A、B、C という3台のコンピュータがあり、AとBは無線で接続され、IEEE 802.11などの適当な通信プロトコルで通信を行うとする。一方、BとCはケーブルで繋がれ、適当なプロトコルでデータを交換する。しかし、それぞれに使われている通信プロトコルは、それぞれメディア(媒体)に固有であって、AからCへ通信を行う機能を持たない。このためネットワーク間を繋ぐプロトコルが必要となった。
このケーブルと無線の両方を扱うプロトコルを新たに開発するという考え方もあったが、その場合、新たなネットワーク媒体が登場するたびに、それに対応していく必要が生じる。従って、基本のプロトコルはそのままとしておき、それらの上に新たなプロトコルが動作するよう設計する方が容易である(インターネットのプロトコルがその例である)。その場合、各ネットワークで2層のプロトコルスタックができることになる。
スタック(階層)やスイート(一組)内の、個々の通信プロトコルはある1つの目的のために設計されることが多い。このようなモジュール化によって設計や評価をより容易にする。各プロトコルモジュールは上下の他のモジュールと互いに通信するので、一般にこれをプロトコルが積み重ねられたものとして見ることになる。最下層のプロトコルはハードウェアとのやり取りを行う層である。より高い層はさらに様々な機能をそれに付与していく。ユーザーアプリケーションは最上層とだけやり取りする。(OSI参照モデルを参照)
実装では、プロトコルスタックは、メディア(媒体)層、トランスポート(転送)層、アプリケーション(応用)層の3層に分けられることが多い。オペレーティングシステムによっては、これらの層間のインタフェースを明確に定義していることもある。つまり、メディア層とトランスポート層のインタフェースと、トランスポート層とアプリケーション層のインタフェースである。