私たちの生活の一部としてすっかり定着したインターネットですが、どのような仕組みで通信が行われているのか知っていますか?
近年IT業界のエンジニアだけではなく、一般教養としてもインターネットを学ぶ必要性が高まっています。

ここではインターネットを学ぶ上で避けては通れない、プロトコルについて解説します。
プロトコルとはそもそも何なのか、インターネットにおけるTCP/IPとは何なのかについて基本的な部分を理解できるようにしましょう。

ITエンジニアとして現場で活躍したいなら、自分のレベルに合った仕事選びが大切!
フリーランスエンジニア・副業に強い案件を探して、ワンクリックで応募ができます。
詳細は下記のリンクからご覧ください。
10万件を超える国内トップレベルの案件掲載数!【エンジニアスタイル東京】

インターネットとプロトコルの関係

インターネットとは世界中のコンピュータをつないだネットワークのことで、「道路」のようなものです。
このインターネットという道路を通して様々な情報がやり取りされます。
情報(リソース)は、道路を通って運搬される「商品」のようなものです。

そしてプロトコルは、これらの情報を運搬する際の「ルール」のようなもののことです。
コンピュータ同士を接続するための規格や手順を意味しており、リソースはプロトコルに従ってやり取りされています。

実際の物流では商品を届けるとき、はがきや封筒、荷物などによってそれぞれ配送する際の取り決めがありますよね。
例えば「はがきであれば切手を指定の場所に貼る」「荷物の大きさや重さによって配送料金が変わる」などです。

情報通信の世界でも、プロトコルという名前のルールに従って正しい形式で情報を運搬しなくてはなりません。

プロトコルという規約のもとにリソースが行き来する、世界中のコンピュータを接続した通信網のことをインターネットと呼ぶのです。

また、コンピュータのネットワークにはインターネット以外のものもあります。
インターネットはあくまで世界的に公開されているネットワークとなっていますが、企業用のものや政府用のもの、軍事用のものなど安全性が要求されるネットワークはよりセキュアになっています。
インターネットに限らず、こういったネットワークにおける規約のこともプロトコルといいます。

クライアント・サーバ

インターネットはクライアントとサーバという異なる役割を持つコンピュータによって成り立つ「クライアントサーバシステム」です。
サーバにはリソースが設置されており、それらのリソースを提供する役割を持つコンピュータです。
クライアントはサーバが提供するリソースを受け取るコンピュータです。

現実のやり取りで考えると商品の発注者(商品を注文する人)がクライアント、配達業者(商品を届ける人)がサーバという感じです。

クライアントからサーバへの要求のことをリクエストといい、サーバがクライアントへリソースを提供することを レスポンスといいます。

商品をAmazonなどで注文したら、商品が自宅に配達されるようなイメージです。

TCP/IPの概要

TCP/IP(Transmission Control Protocol/Internet Protocol)は、インターネットで使用されているプロトコル群の総称です。

そもそもインターネットは1971年に生まれたARPANETというコンピュータネットワークが起源です。
本来は軍事目的で開発されたARPANETでしたが、それが発展していったものが現在のインターネットにつながっています。

TCP/IPは、ハードウェアやOSに依存することなくあらゆるプラットフォーム上で機能します(理由は後述)。
この特性からTCP/IPは多くの通信端末に取り入れることができ、一般に広く普及していきました。

TCP/IPはひとつのプロトコルを指しているわけではなく、複数のプロトコルが集まったものとなっています。
その中でも、Webが利用しているプロトコルはHTTP(HyperText Transfer Protocol)です。
また、EメールのプロトコルはSMTP(Simple Mail Transfer Protocol)、ファイルであればFTP(File Transfer Protocol)といった具合にリソースの種類によってプロトコルが用意されています。

TCP/IPの4層モデル

TCP/IPは4つのレイヤに分かれており、それぞれが独立して役割を持っています
このようにレイヤを分離することによって他のレイヤの実装を考える必要がなくなり、プロトコルを単純化することができます。
新しいデバイスが登場してもインターネットに簡単に接続できるのは、この各層の依存度が低く保たれているからです。

このTCP/IPの4層モデルを元に一般化された通信規格がISO(国際標準化規格)により一般化されたのがOSI参照モデルです。

TCP/IPのレイヤはそれぞれネットワークインタフェース層、インターネット層、トランスポート層、アプリケーション層となっています。
上位層は下位層の仕様変更の影響を受けないようになっているため、変更点があった場合でも柔軟に対応できるのです。
各層で扱われるデータ単位のことをPDU(Protocol Data Unit)といいます。

アプリケーション層

アプリケーション層の役割は、インターネット上のサービスに対してプロトコルを提供することです。
アプリケーション層で提供されるプロトコル(アプリケーションプロトコル)はユーザにとって一番近い存在となっているため、比較的聞き馴染みのあるものが多いかと思います。

Web通信で使用されるHTTPや、電子メール通信で使用されるSMTPPOP3、アプリケーション通信の準備を行うDHCPDNSなどがあります。

ここではファイルの圧縮方式や文字コード、暗号化などのデータの表現形式を共通化しています。

Web開発・アプリ開発に興味があるなら、プロから学べるオンラインスクールで最短でスキルを身につけましょう!
コミュニティマネージャーとの面談で、理想のキャリアと現状から必要なスキルだけを学べるコースを設計できます。
転職、副業、独立に強い市場価値の高い人材を目指して、まずは無料Web説明会に参加しましょう。
ゼロから人気のWebスキルを学ぶなら【Cucua】

トランスポート層

トランスポート層の役割は、上位層であるアプリケーション層のデータを運ぶことです。
この層のPDUはセグメント(segment)と呼ばれます。
プロトコルとしてはTCPUDPICMPなどがあります。

ポート番号

ポート番号は、TCPやUDPにおいてアドレシングに用いられている16ビットの数値です。
どのデータをどのアプリケーションに対して渡すかを管理しており、ひとつのアプリケーションに対してひとつのポート番号が割り当てられています。

中でも特定のポート番号には特別な役割が存在し、これをWell Known Portsといいます。
Well Known Portsは0~1023番で予約されているため、新しいサービスではそれ以降の番号を使用することが一般的です。
80番はHTTP、25番はSMTPといった具合です。

TCP

TCP(Transmission Control Protocol)は伝送制御プロトコルです。
インターネットにおける信頼性のある通信を実現しています。

TCPはコネクション指向のプロトコルで、いったん送信したパケットに対する反応を見てから、さらに送る必要のあるパケットの扱いを決定します。
これは3線ハンドシェイク方式というもので、コネクションの完了までに以下のような3回のやり取りを行います。

  1. 接続元のホストから接続先のホストに対してSYNフラグを設定したパケットを送る
  2. パケットを受け取った接続先のホストがSYNフラグとACKフラグを設定したパケットを送る
  3. 接続元のホストは接続先のホストに接続の意志があることを確認してACKフラグのみを設定したパケットを送る

接続が確立している間は仮想回線(VC)という通信路によりデータのやり取りが行われます。
VCを切断する場合は、接続元か接続先のどちらかのホストがFINフラグを設定したパケットを送ります。

TCPでは信頼性のある通信を保証するために、シーケンス番号確認応答番号によるデータ送信順の確認、チェックサムによるデータの照合などが行われています。
そしてデータの内容に相違があれば、パケットの再送を要求します。

また、TCPを改良したSCTP(Stream Control Transmission Protocol)と呼ばれるプロトコルも登場しています。

UDP

UDP(User Datagram Protocol)は、データグラム(UDPにおけるセグメント)を転送するためのプロトコルです。
TCPで実装されている多くの機能を切り落とし、高速の通信を実現しています。

特にストリーミング型メディア配信(音楽、動画…)などの素早い応答が必要な場面で使用されています。

3線ハンドシェイクの方式はとっておらず、シーケンス番号によるデータの送信順の保証もありません。

ICMP

ICMP(Internet Control Message Protocol)は、ネットワーク上で発生したエラーを知らせるためのプロトコルです。
IPやTCP、UDPといった他のプロトコルから発生しますが、ICMP自身がICMPを呼び出すことはありません(仮にICMPからICMPを呼び出せるとすると、再帰的なエラーから抜けられなくなる可能性があるためです)。

インターネット層

インターネット層の役割は、上位層であるトランスポート層のデータを運ぶことです。
この層のPDUはパケット(Packet)と呼ばれます。
プロトコルはIP(Internet Protocol)です。
IPv4とIPv6があり、名前は似ているものの互換性はない全く別のプロトコルとして実装されています。

IPではパケットに記されている宛先IPアドレスを持っているコンピュータに対して、そのパケットを届けます。

IPアドレス

IPアドレスは、インターネット層でホストを識別するための数値です。
基本的に特に明示しない場合、IPアドレスとはIPv4で表されるアドレスのことを指します。
IPv4は32ビットで表現され、約40億台のコンピュータを識別できます。

一般的には以下のように、8ビットずつをピリオド区切りで並べて10進数で表記します。
この時ひとつのまとまりをオクテットと呼びます。
オクテットには0~255の数値が入ります。

192.168.128.40

IPアドレスはアメリカのIANAが割り当ての管理を行っています。

コンピュータは0か1のどちらかの信号しか受け取ることができないため、コンピュータに対する命令は2進数(0と1の羅列)によって表現されます。
この時0か1で表されるひとつの桁のことをビットといい、8ビットのまとまりのことを1バイトといいます。
2進数で表された文字列は非常に煩雑でわかりにくいため、通常は8進数や16進数が用いられます。

ネットワーク部とホスト部

IPアドレスはネットワーク部ホスト部の2つからなっています。
ネットワーク部は、ネットワークセグメント(複数のホストが属するグループ)を表します。
ホスト部は、そのネットワークセグメント内でのホストを識別するための部分です。

IPアドレスのネットワーク部とホスト部はネットマスクによって分割されます。
ネットマスクは、ネットワーク部を全て1に、ホスト部を全て0にしたもので、これをIPアドレスにかけてやればネットワーク部のみを取得することができます。
第3オクテットまでがネットワーク部の場合にはネットマスクは以下のようになります。

255.255.255.0

クラス

クラスとは、ネットワークセグメントがいくつのホストを持つことができるのか、つまりネットワークに所属できるコンピュータの数のことを指します。
IPアドレスのホスト部のビット数が多いほど、表現できるホスト数が多くなります。

クラスネットワーク部
クラスA上位8ビット(第1オクテットのみ)
クラスB上位16ビット(第2オクテットまで)
クラスC上位24ビット(第3オクテットまで)

つまり、クラスAが最も多くのホストを表現できる大規模ネットワーク向けのアドレスであることがわかります。
しかしインターネット開始当初、ネットワークにはクラスAやクラスBから順番に割り当てられていき、それらはあっという間に埋まっていってしまいました。
現在はクラスA、Bの割り当ては停止され、新しいネットワークにはクラスCが使われるようになっています。

クラスCではすべてのホストを表現しきれない大規模なネットワークに、CIDR(Classless Inter Domain Routing)という仕組みによって連続したネットワークを割り当てることでアドレスを確保しています。

ネットワークアドレスとブロードキャストアドレス

IPアドレスの中には、特別な意味を持つ、ホストとして割り当てることのできないアドレスが存在します。

ホスト部をすべて0にしたものをネットワークアドレス、ホスト部をすべて1にしたものをブロードキャストアドレスといい、これらがそれに該当します。

ネットワークアドレスは、ネットワークセグメントそのものを表すアドレスです。
ブロードキャストアドレスは、ネットワークセグメント全体に対して一斉通信を行う際に使用されます。

ネットワーク上の各ホストは、自身のIPアドレスのほかにもブロードキャストアドレスに送信された情報を取り込むということになります。

グローバルアドレスとプライベートアドレス

インターネット上ではIPアドレスの重複はありません
それぞれのコンピュータに対して固有のアドレスが与えられ、識別できるようになっています。

プライベートアドレスはLANという限られた範囲のネットワーク中で使用されるIPアドレスで、インターネット上のIPアドレス不足を解決するために考案されました。
プライベートアドレスを使ったデータ通信はインターネット上を流れないため、組織内で自由に割り当てることができます。

クラスCのプライベートアドレスは以下の範囲です。

192.168.0.0 ~ 192.168.255.255

また、現在利用しているコンピュータ自身を表すループバックアドレスという特別なアドレスがあります。
これにはlocalhostという別名が割り当てられており、同一ホスト内でのみ通信を行うことを表しています。

localhost = 127.0.0.1

IPv4

IPv4ではパケットのアドレシング(送信先コンピュータの特定)とフラグメンテーションを目的としています。

先述したように32ビットのユニークな数値列からコンピュータを特定することができます。

フラグメンテーションとは、パケットを分割して送信することです。
転送したいパケットが、下位層であるネットワーク層が送信できるデータサイズよりも大きい場合は、パケットを分割して送る必要があります。

IPv6

現実問題として、IPv4で割り当てられていたネットワークの数が増えるにしたがって、アドレスが不足していきました
また、IPv4には様々なセキュリティ上の問題も存在します。
こういった問題の解決のために考案されたのがIPv6というアドレッシング方式です。

IPv6は128ビットの数値で表され、IPv4とは比べ物にならないほどたくさんのホストを識別することができます。

IPv6にはスコープと呼ばれるものが存在し、これはグローバルアドレスやプライベートアドレスと似たような考え方になっています。
スコープには、グローバル、リンク、ノードの3つがあります。

  • グローバルはインターネット上のどこからでも接続が可能なアドレス
  • リンクはネットワークセグメントを表す
  • ノードはホスト内部を表す

未経験からIoT・組み込みエンジニアになりたい人、手に職をつけて安定したキャリアを手に入れたい人におすすめのスクールはこちらです。
無料特待プランなら、本格的なプログラムを無料で受講可能です!
IoT・組み込みエンジニアならウズウズカレッジIoT/組み込みコース

ネットワークインタフェース層

ネットワーク層(ネットワークインタフェース層)の役割は、上位層であるインターネット層のデータを物理的な媒体によって通信を実現することです。
この層のPDUはフレーム(Frame)と呼ばれます。

代表的なものにはEthernet(有線)やWi-Fi(無線)があります。
Ethernet(イーサネット)はLAN(Local Area Network)のための通信手段です。

MACアドレス

EthernetはMACアドレス(Media Access Control Address)によりアドレッシングされており、各ネットワーク機器に固有の番号が割り振られています。

MACアドレスを利用することで同じネットワークセグメント内での通信を行うことができます
また、MACアドレスは次にデータを送信するコンピュータの宛先を指します。

MACアドレスと似ていて間違いやすいIPアドレスは、別のネットワークセグメントとの通信を行うために用いるコンピュータ識別のための数値です。
こちらは最終的にデータを送信したい宛先を指します。
インターネット上での通信は最終的な目的地のみを指定しているので毎回通り道となるコンピュータが変わります。

まとめ

インターネット通信の基本となるプロトコルについて見てきました。
プロトコルとは、インターネットという道路上で情報(リソース)を運搬するためのルールのことです。
インターネット上ではTCP/IPといういくつものプロトコルからなるプロトコル群が利用されています。

TCP/IPは4層モデルによりレイヤごとに以下のように役割を分離しています。

  • アプリケーション層は、私たちが利用するインターネット上のサービスのインタフェースにプロトコルを提供する
  • トランスポート層は、ポート番号によりどのアプリケーションに対してデータを渡すかを決定する
  • インターネット層は、他のネットワークセグメントをIPアドレスにより特定しデータの通信を行う
  • ネットワークインタフェース層は、同じネットワークセグメント内でデータの通信を行う

ひとりではなかなかプログラミングの学習が続かない、未経験だから不安が多い、という方はプログラミングスクールを利用してみるのも有効です。
本物のエンジニアに学ぶことで、時間がない方でも最短でスキルを身につけることができます。
現役エンジニアのパーソナルメンターからマンツーマンで学べる

お悩みの方は、まずは無料キャリアカウンセリングにお申込みください。

関連記事

この記事のタグ