人生を自由に楽しむため、会社員をやめてフリーランスになった『ユウイチ』です。
今回は基礎技術の紹介で、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参照モデルに従ってプロトコルを覚えて、機器も合わせて覚えたりしました。
みたいな感じです^^;
実際にネットワークの設定をしたことがなくイメージできていない状態でも情報処理試験は覚えるだけで合格できてしまったのですが、やっぱり、イメージできていることが重要になると思っています。
IOTという言葉も一般的になってきて、最近は組み込み系開発であってもネットワークを使わないシステムはなくなってきております。僕も組み込み業界にいたころ、「Wireshark」というパケットキャプチャツールを使ってネットワーク上を流れるデータ解析をよくやりました。(この解析はTCP/IPプロトコルを理解するよい経験になりました)
ですので、ネットワークを専門にしていなくてもネットワークの知識をつけることは必須になってきていると感じております。ちなみに、僕も専門のネットワーク屋さんではありません^^;
ですので、基本的な知識しか説明できないのですが、今後も基本的な知識をわかりやすく伝えていこうと思います。
※各プロトコルの詳細についてはこちらで紹介しております。
こちらもCHECK
TCP/IPの各プロトコルについてわかりやすく説明します
人生を自由に楽しむため、会社員をやめてフリーランスになった『ユウイチ』です。 今回はネットワークの紹介です。 専門は組み込みエンジニアなのでネットワークが専門というわけではないのですが、20年間でいろ ...
続きを見る