スキルアップ ネットワーク プログラミング関連スキル

TCP/IPプロトコルスタックについてわかりやすく説明します

エンジニア歴20年以上、フリーランスでソフトウェアエンジニア・ゲームクリエイター・シナリオライターをやっております『NaruTaku』と申します。

今回はTCP/IPプロトコルについて書いてみようと思います。これからエンジニアを目指す方やエンジニアとして経験の浅い方の中には「そもそもプロトコルってなんやねん」という方も多いかと思います。さらに「スタックもよーわからん!」という方もいらっしゃるのではないでしょうか。

そのような方にとっては「プロトコルだけでもわからんのにスタックまでついとるやないか!」

ってなりますよね。僕も若い頃その状態でした笑

今回はそんな状態の方にも理解していただけるように、TCP/IPプロトコルスタックをわかりやすく説明しようと思います。

TCP/IPプロトコルスタックとは

まず、プロトコルとはルールです。通信する決まりですね。そして、TCP/IPとはインターネットにおいて標準的に利用されるプロトコルになります。

つまり、TCP/IPとは「インターネットで利用される標準的なルール」ということになります。そして、「スタック」とついている理由はこのルールが階層になっていて、各層にルールがあるからです。具体的には4層あって、各層と対応するルールは以下の感じになります。

層の名前ルール(プロトコル)
アプリケーション層HTTP,DNS,SMTP,FTP,Telnet,DHCPなど
トランスポート層TCP,UDP
インターネット層IP,ICMP,ARP
リンク層Ethernetケーブル、無線LAN

これが、TCP/IPプロトコルスタックの層とルールなります。TCP/IPプロトコルスイートと言ったりもします。

「あれ?なんか見たことあるぞ」と思われた方、おそらくOSI参照モデルだと思います。ただ、OSI参照モデルはISOが規定した通信に関する概念なので実際のルールではありません。ですので、実際にルールとして使用されているTCP/IPプロトコルスタックと完全に対になるわけではないのですが、比較すると以下の感じになります。

レイヤOSI参照モデルTCP/IPプロトコルスタック
7アプリケーション層アプリケーション層
6プレゼンテーション層
5セッション層
4トランスポート層トランスポート層
3ネットワーク層インターネット層
2データリンク層リンク層
1物理層

では実際のデータの流れについて簡単に説明します。

TCP/IPプロトコルで流れるデータ

有線LANでネットワークに接続しているPCを使ってホームページを見る例で説明します。この場合、それぞれの層で使われるルールはアプリケーション層がHTTP,トランスポート層がTCP(UDPの場合もあるがTCPとします)、インターネット層がIP、リンク層がEthernetとなります。

そして、送信側は上位のアプリケーション層→リンク層で送信データを作成し、受信側はリンク層→アプリケーション層の順でデータを処理していきます。以下のようなイメージです。

説明します。

まず送信側ですが、各層で使われるルールに対するヘッダがデータに追加されていきます。Webブラウザを使いインターネットへアクセスを開始すると同時にアプリケーション層では「使われるルールはHTTPか、じゃあ、HTTPヘッダを追加だ」となってHTTPヘッダを追加します。

次にトランスポート層で「使用するルールはTCPだな。じゃあTCPヘッダを追加だ」となって、TCPヘッダが追加されます。以下同様にインターネット層ではIPヘッダが、リンク層ではEthernetヘッダが追加されます。このように各層で使用されるルールに従ったヘッダが追加され、送信データが作られていきます。ここではわかりやすいように「ルール」と記載しましたが、この「ルール」が「プロトコル」になります。

そして、受信側では逆にリンク層から受け取ります。まずリンク層でEthernetヘッダを解析して処理し、上位のインターネット層へ渡します。このとき、リンク層でEthernetヘッダは処理完了しておりますので、Ethernetヘッダを省いてインターネット層へ渡します。同様にインターネット層ではIPヘッダを解析して処理し、IPヘッダを省いてトランスポート層へ。トランスポート層ではTCPヘッダを省いてアプリケーション層へ渡す。このように、各層で処理されたヘッダデータが取り除かれて上位の層へ流れていきます。

各層のプロトコルについて詳細はそれぞれ別の記事にしてまとめようと思っておりますが、基本的な流れは上記のようになります。

以上、今回はTCP/IPプロトコルスタックについて説明してみました。

まとめ

情報処理試験の参考書などにはOSI参照モデルが説明されることが多いですが(僕が受験したはるか昔はそうだった。今もなのかな・・・)、実際はTCP/IPプロトコルスタックに従って通信されています。

僕は大昔OSI参照モデルに従ってプロトコルを覚えて、機器も合わせて覚えたりしました。

NaruTaku
NaruTaku
物理層はリピータハブで、えーっと・・・データリンク層はスイッチングハブで、ほんで、ネットワーク層はルーターで・・・

みたいな感じです^^;

実際にネットワークの設定をしたことがなくイメージできていない状態でも情報処理試験は覚えるだけで合格できてしまったのですが、やっぱり、イメージできていることが重要になると思っています。

IOTという言葉も一般的になってきて、最近は組み込み系開発であってもネットワークを使わないシステムはなくなってきております。僕も組み込み業界にいたころ、「Wireshark」というパケットキャプチャツールを使ってネットワーク上を流れるデータ解析をよくやりました。(この解析はTCP/IPプロトコルを理解するよい経験になりました)

ですので、ネットワークを専門にしていなくてもネットワークの知識をつけることは必須になってきていると感じております。ちなみに、僕も専門のネットワーク屋さんではありません^^;

ですので、基本的な知識しか説明できないのですが、今後も基本的な知識をわかりやすく伝えていこうと思います。

最後まで読んでくださりありがとうございました。

※各プロトコルの詳細についてはこちらで紹介しております。

こちらもCHECK

TCP/IPの各プロトコルについてわかりやすく説明します

続きを見る

  • この記事を書いた人
  • 最新記事

NaruTaku

40代のフリーランスエンジニア・シナリオライター。 20代前半から20年間エンジニアとしてキャリアを積みフリーランスへ転身。ソフトウェア開発とゲーム開発、シナリオ執筆をメインに、プログラミング講師・Webライターとしても活動。また、フリーランスになり見た目の重要性に今さら気づき、ヒゲ脱毛を実施中。

-スキルアップ, ネットワーク, プログラミング関連スキル