📺

ネットワークが繋がる一通りの流れの雰囲気を掴む

2024/01/31に公開

今回はネットワークの基本について書いていきたいと思います。ネットワークはどのように繋がっているのか、ネットワークが繋がるには何が必要なのか。基礎的なところですが今まで丁寧に網羅的にまとめたことがなかったのでまとめてみました。

プロトコル

まずはネットワークの話をする際に欠かせないプロトコルの話です。プロトコルとは一体どういったものなのでしょうか。
プロトコルは、コンピュータやデバイス間で情報を効果的に交換するためのルールや規約の集合のことです。プロトコルは、データの形式、送信方法、通信速度、エラーハンドリング、データの同期など、ネットワーク通信に関する様々な側面を定義します。現実世界で言う言語のようなもので、インターネットの世界では共通のプロトコル(日本語同士や英語同士のイメージ)を使用することで様々な種類のソフトウェアやハードウェア間の通信を可能にしています。
インターネットでは、処理の種類に応じてさまざまなプロトコルが存在します。主要なプロトコルの分類方法の一つに、OSI参照モデルというものがあります。

OSI参照モデル

OSI参照モデルは、コンピュータネットワークで利用されている多数のプロトコルを、それぞれの役割をもとに7つの層に(レイヤー)分類する分類モデルのことです。OSI参照モデルによりプロトコルは以下のように分類されます。

名称 プロトコル例 主な機能
7 アプリケーション層 HTTP,DNSなど ユーザーがネットワークにアクセスするためのインターフェースを提供
6 プレゼンテーション層 SMTP,FTP,Telnetなど データの形式や符号化・暗号化を管理
5 セッション層 SSL,TLSなど アプリケーション間の通信セッションを管理
4 トランスポート層 TCP,UDPなど ネットワークの通信管理やエラー検知
3 ネットワーク層 IP,ARP,ICMPなど ルーティングやパケット転送
2 データリンク層 PPP,Ethernetなど 直接的(隣接的)に接続されている通信機器間の通信
1 物理層 UTP,無線など 物理的な接続媒体を通じてデータのビット伝送を担当

各層の簡単な説明は以下の通りです。

アプリケーション層

ユーザーのアプリケーションがネットワークサービスにアクセスするためのインターフェースを提供します。ソフトウェアがユーザーに意味のあるデータを提示するために依存するプロトコルとデータ操作を担当します。

プレゼンテーション層

データの形式や符号化を管理し、データを送付先が扱う形式に変換します。また、送信者側での暗号化の付与および受信者側での暗号の復号や、データを圧縮して通信するデータ量を最小限に抑えて通信効率を向上させる役割も担っています。

セッション層

デバイス間の通信の開始と終了を管理しています。通信が開かれてから閉じられるまでの時間は、セッションと呼ばれます。また、通信障害や中断が発生した場合に、セッションを再開または回復する機能を提供します。これにより、一時的な通信の問題が発生しても、途中からデータ交換を再開できるようになります。

トランスポート層

フロー制御やエラー制御など、データ通信の制御を通して通信の品質保証を行っています。最適な転送速度を判断したり、受信データが不完全な場合再送信を要求したりすることでそれを実現しています。

ネットワーク層

異なるネットワーク間のデータ転送を管理します。そのため通信する2つのデバイスが同じネットワーク上にある場合、ネットワーク層は不要です。ネットワーク全体の中でデータが目的に達するまでの最適なパスを検出することをルーティングと呼びます。

データリンク層

ネットワーク層は2つの異なるネットワーク間のデータ転送を行っていましたが、データリンク層は同じネットワーク上にある2つのデバイス間のデータ転送を円滑に進めます。

物理層

物理的な接続媒体(ケーブル、光ファイバー、無線)を通じてデータのビット伝送を担当します。データが1か0の文字列に変換されるのがこの層です。

OSI参照モデルは理想的な階層化されたネットワークアーキテクチャを示していますが、実際には普及していません。その理由は同時期に策定されたTCP/IPモデルという別の通信プロトコルモデルが普及したためです。ただ、分類自体はネットワーク技術の設計や運用の際の基盤となる考え方として不可欠であると言われており、ネットワークの基礎として重要な知識の一つとなっています。

続いて実際に普及しているTCP/IPモデルについて書いていきます。

TCP/IPモデル

TCP/IPモデルは正式にはインターネットプロトコルスイートと呼ばれており、OSI参照モデル同様インターネットの基盤となるプロトコルを分類するモデルです。TCP/IPモデルは4つの層から構成されており、OSI参照モデルよりも実用的で、インターネットの実際の構造と動作原理をよりよく反映していると言われています。

名称 プロトコル例 主な機能
4 アプリケーション層 HTTP,DNS,SMTPなど ネットワークの通信管理やエラー検知
3 トランスポート層 TCP,UDPなど ルーティングやパケット転送
2 インターネット層 IP,ARP,ICMPなど 直接的(隣接的)に接続されている通信機器間の通信
1 ネットワークインターフェース層 Ethernetなど 物理的な接続媒体を通じてデータのビット伝送を担当

各層の簡単な説明は以下の通りです。

アプリケーション層

ユーザーのアプリケーションがネットワークサービスに直接アクセスするためのインターフェースを提供します。アプリケーションは基本的には人間が扱うため、文字や画像など人間が認識できるようにデータを表現します。

トランスポート層

データの適切なアプリケーションへの振り分けを担っています。エラーの検出やデータの回復、双方向の通信路の確立なども行っています。主なプロトコルはTCPとUDPに分けられ、TCPは信頼性の高い接続指向のサービスを、UDPは接続なしの軽量サービスを提供します。

インターネット層

異なるネットワーク間でのデータパケットの転送を担います。多数のネットワーク同士を接続してデータ転送を行っているのはルータで、ルータによるネットワーク間のデータ転送を指してルーティングと呼びます。この層の主要なプロトコルはIP(Internet Protocol)で、データパケットが正しい宛先に到達するための論理アドレス(IPアドレス)を提供します。

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

同一のネットワーク内でのデータを転送を担う層で、OSI参照モデルのデータリンク層と物理層の機能がここに含まれます。物理的なデバイス(イーサネット、Wi-Fiなど)や低レベルのプロトコル(ARPなど)の実装を担当します。0と1で表現されたデジタルデータを電気信号などの物理的な信号に変換して、伝送媒体を用いて伝えていきます。

OSI参照モデルとTCP/IPモデルには以下のような対応関係があります。この対応関係を理解しつつどの処理がどのレイヤーで行われているかを意識することでプロトコルやネットワークに関する理解を深めやすくなるでしょう。

IPアドレス

IPアドレスは、OSI参照モデルの第三層にあたるネットワーク層に属するインターネット上でコンピューターや他のデバイスを一意に識別するために使用される識別子です。インターネット上の住所とよく言われており、NIC(ネットワークインターフェースカード)ごとに割り当てられます。NICとはコンピューターやデバイスがネットワークに接続するために使用されるハードウェア部品のことです。IPアドレスにはIPv4IPv6の2つのバージョンがあります。

IPv4

IPv4アドレスは、32ビットの数値で構成されており、通常はドットで区切られた4つの8ビット数(例:192.168.1.1)として表現されます。これにより、約42億のユニークなアドレスが生成されますが、インターネットの急速な成長により、IPv4アドレスの枯渇が問題となり登場したのがIPv6です。

IPv6

IPv6アドレスは、IPv4アドレスの枯渇に対応するために導入された新しいバージョンで、128ビットの数値で構成されています。これにより、実質的に無限と言えるほどの膨大な数のユニークなアドレスが利用可能になります。IPv6アドレスは、コロンで区切られた8つの16ビット数(例:2001:0db8:85a3:0000:0000:8a2e:0370:7334)として表現されます。

また、IPアドレスにはグローバルIPアドレスプライベートIPアドレスという2種類が存在します。

グローバルIPアドレス

グローバルIPアドレスは、インターネット上で一意に識別されるIPアドレスです。インターネットサービスプロバイダー(ISP)によって割り当てられ、外部のネットワークとの通信に使用されます。グローバルIPアドレスには以下のような特徴があります。

  • 世界中でユニークなアドレスであり、他のどのデバイスとも重複しない。
  • インターネット上の任意の場所からアクセス可能。
  • インターネット経由での外部との通信に必要。
  • IPv4アドレスの枯渇により、動的IPアドレス(一時的に割り当てられる)や、NAT(ネットワークアドレス変換)を利用した共有が一般的になっている。

プライベートIPアドレス

プライベートIPアドレスは、特定の組織やホームネットワーク内でのみ使用されるローカルなIPアドレスです。プライベートIPアドレスはインターネット全体には一意ではなく、同じプライベートIPアドレスが異なるネットワークで重複して使用されることがあります。プライベートIPアドレスは、外部のネットワークからは直接アクセスできず、インターネットにアクセスするためにはNATを介する必要があります。プライベートIPアドレスの主な特徴は以下の通りです。

  • ローカルネットワーク内でのみ有効。
  • 同じアドレスが異なるプライベートネットワークで重複して使用されることがある。
  • インターネットに接続するためには、グローバルIPアドレスを持つゲートウェイ(ルーターなど)を経由する必要がある。

IPアドレスのクラス

IPv4アドレスにはクラスという考え方が存在し、ネットワークの規模によってクラスが分かれています。まずIPアドレスはネットワーク部ホスト部に分かれています。ネットワーク部は、IPアドレスのうち、そのデバイスが属するネットワークを識別する部分、ホスト部は、IPアドレスのうち、特定のネットワーク内で個別のデバイスを識別する部分です。何桁までネットワーク部分に割り当て、残りの何桁をホスト部分の割り当てるかによってクラスA~Eに分類されます(クラスD、Eは一般的でないため主に使用するのはA~C)。

クラス名 アドレスの範囲 ビット数と使用用途
クラスA 0.0.0.0~127.255.255.255 ネットワークアドレス8ビット・ホストアドレス24ビット。大規模ネットワーク用
クラスB 128.0.0.0~191.255.255.255 ネットワークアドレス16ビット・ホストアドレス16ビット。中規模ネットワーク用
クラスC 192.0.0.0~223.255.255.255 ネットワークアドレス24ビット・ホストアドレス8ビット。小規模ネットワーク用
クラスD 224.0.0.0~239.255.255.255 マルチキャストアドレス。ケーブルテレビなど
クラスE 240.0.0.0~255.255.255.255 将来の使用のため予約されている。研究用

クラスA~Cは具体的には以下のようにしてネットワーク部とホスト部に分かれます。

この画像を見るとわかるように、ネットワーク部に割り当てられる桁数が少なければその分ホスト部の桁数が大きくなるので、大規模なネットワークになるということです。
このようにA~Eのクラスに分ける区分方法をクラスフルアドレッシングと言います。このクラスフルアドレッシングですが、ネットワーク部とホスト部の分け方が固定されているため柔軟性に欠け、IPアドレスの無駄遣いや不足を引き起こすという問題がありました。これに対処するために、サブネットマスクを使用してネットワークをより細かく分割するサブネット化が導入されました。

サブネットマスク

サブネットマスクとはIPアドレスを、ネットワーク部分とホスト部分に識別するための数値のことを言います。サブネットとはネットワークを細分化することであり、これによりクラスフルアドレッシングでは実現できなかった、より細かいネットワークの分割が可能になりました。
サブネットマスクは各ビットの値によってIPアドレスのネットワーク部とホスト部を再定義することができます。ビットの値が1の場合はネットワーク部を、0の場合はホスト部を示します。
たとえば255.255.255.0の場合2進数表記すると11111111.11111111.11111111.00000000となるので前24ビット分がネットワーク部、後ろ8ビット分がホストアドレスになります。このときに追加のビットをネットワーク部に割り当ててサブネット化を行うことで、ネットワークを分割することができます。

例
元のネットワークアドレス:192.168.1.0
デフォルトのサブネットマスク:255.255.255.0
追加のビット:2ビット
新しいサブネットマスク:255.255.255.192
11111111.11111111.11111111.00000000 ※デフォルトのサブネットマスクの2進数表記
11111111.11111111.11111111.11000000 ※新しいサブネットマスクの2進数表記
                           ↑↑ ※追加の2ビット

ネットワーク部分に追加された2ビットにより、以下の4つのサブネットが作成される。

サブネット00
192.168.1.0(ネットワークアドレス) ~ 192.168.1.63(ブロードキャストアドレス)
2進数表記:11000000.10101000.00000001.00000000
~ 11000000.10101000.00000001.00111111

サブネット01
192.168.1.64(ネットワークアドレス) ~ 192.168.1.127(ブロードキャストアドレス)
2進数表記:11000000.10101000.00000001.01000000
~ 11000000.10101000.00000001.01111111

サブネット10
192.168.1.128(ネットワークアドレス) ~ 192.168.1.191(ブロードキャストアドレス)
2進数表記:11000000.10101000.00000001.10000000
~ 11000000.10101000.00000001.10111111

サブネット11
192.168.1.192(ネットワークアドレス) ~ 192.168.1.255(ブロードキャストアドレス)
2進数表記:11000000.10101000.00000001.11000000
~ 11000000.10101000.00000001.11111111

ホスト部のビットの値が全て0の場合はネットワークアドレス(ネットワーク自体を識別するためのアドレス)、全て1の場合はブロードキャストアドレス(ネットワークやサブネット内の全てのデバイスに一斉にデータを送信するためのアドレス) という特別なアドレスのためホスト割り当ては不可であり、今回の例では各サブネットで利用できるアドレス数は62となります。
サブネットを255.255.255.0のように書くのは冗長なので、実際にはCIDR(Classless Inter-Domain Routing)表記が用いられることがほとんどです。読み方はサイダー表記です。CIDR表記はネットワークアドレスの後ろにサブネットマスクのネットワーク部のビット数をつける書き方です。
先ほどの例の場合
元のネットワークアドレス:192.168.1.0
デフォルトのサブネットマスク:255.255.255.0
この場合は192.168.1.0/24と表記されます。
255.255.255.0は2進数表記で11111111.11111111.11111111.00000000
ネットワークアドレス部が24ビットなのでネットワークアドレスの後ろに/24をつけて表現します。

ここまで説明してきたIPアドレスですが、実際にIPアドレスが各機器にどのように割り当てられるのかについて説明していきたいと思います。

IPアドレスの割り当て方法には、静的と動的の2種類があります。

静的割り当て

静的IPアドレス割り当ては、ネットワーク管理者が手動でデバイスにIPアドレスを割り当てる方法です。割り当てられたIPアドレスは固定され、デバイスがネットワークに接続されている限り変更されません。Webサーバーなどのサーバーは常に同じアドレスでアクセス可能にするために静的IPが使用されています。

動的割り当て

動的IPアドレス割り当ては、DHCPサーバーを使用して自動的にIPアドレスを割り当てる方法です。DHCPは、ネットワーク上のデバイスに自動的にIPアドレスやその他のネットワーク設定情報を割り当てるためのプロトコルで、IPアドレス以外のネットワーク情報も管理できるため、ユーザーはネットワークのほとんどの設定を自動化することができます。 DHCPサーバーの機能は、ルーターなどの多くのネットワーク機器が標準で搭載しており、DHCPクライアントの機能も、ほとんどのOSが標準で搭載していてデフォルトで有効になっています。そのため、DHCPサーバーが有効になっているネットワークなら、購入したばかりのデバイスでも基本的にすぐにネットワーク通信を始めることができます。一般的には静的割り当てよりもこちらの動的割り当てが利用されることが多いです。

実際にWebサーバー等にアクセスする際にはIPアドレスではなく www.hoge.com のような文字列を指定してアクセスすると思います。これはIPアドレスのような識別番号は人間にとって覚えにくく扱いにくいため、人間が扱いやすい文字列を紐付けて管理しているからです。 www.hoge.com の中のhoge.comの部分をドメインと言い、これがIPアドレスと紐づいて通信を行っているのです。ドメインをIPアドレスに変換する処理はDNSが担っています。

DNS

DNSはOSI参照モデルの第7層のアプリケーション層に属するインターネット上でドメイン名をIPアドレスに変換するためのシステムです。DNSは、インターネットの電話帳のような役割を果たし、人間にとって覚えやすいドメイン名(例:www.hoge.com)をIPアドレス(例192.0.2.1)に変換します。DNSの名前解決プロセスは以下のようなステップで実行されます。

1.リクエストの送信

ユーザーがブラウザにURLを入力すると、ユーザーのデバイス(クライアント)は設定されたDNSサーバーに対してドメイン名の解決を要求します。

2.名前解決

DNSサーバーはドメイン名に対応するIPアドレスを検索します。もしローカルのキャッシュに情報がなければ、他のDNSサーバーに問い合わせを行い、必要な情報を取得します。

3.応答の返送

対応するIPアドレスが見つかると、DNSサーバーはその情報をクライアントに返送します。

4.接続の確立

クライアントは取得したIPアドレスを使用して、対象のサーバーに接続します。

このようにDNSはIPアドレスとドメイン名の紐付けを通して、インターネット体験を人間にとって直感的で便利にするための役割を担っています。

IPアドレスがネットワーク上の住所のような位置付けでしたが、ネットワーク上で機器を識別するにはIPアドレスだけでは足りません。機器の識別にはMACアドレスも利用されています。

MACアドレス

MACアドレスは、DNSはOSI参照モデルの第2層のデータリンク層に属するネットワーク上のデバイスを一意に識別するために使用されるハードウェアのアドレスです。イメージとしては電話番号や名前などの個人情報のようなもので、インターネットに接続される機器すべてに製造時に割り振られています。MACアドレスは48ビット(6バイト)の長さで構成されており、通常は16進数で表現され、上位24ビットのOUIと下位24ビットの個別識別子(デバイス識別子)で構成されます。OUIとはメーカー番号のようなもので、メーカーごとに割り振られた重複しない番号になっています。MACアドレスはIEEEという組織が管理しており、IEEEの公式ページでMACアドレスから製造メーカーを調べることができます。

IPアドレスとMACアドレスの違い

インターネットで通信を行う際はIPアドレスとMACアドレスの両方が必要になってきます。それぞれの役割の違いについて整理していきます。

  • 識別のレベル
    IPアドレスはネットワーク全体でデバイスを識別するために使われますが、MACアドレスはローカルネットワーク内で物理的に隣接するデバイスを識別するために使われます。
  • 使用されるネットワーク層
    IPアドレスはネットワーク層で使用され、インターネット上のルーティングに関与します。一方、MACアドレスはデータリンク層で使用され、ローカルネットワーク内でのデータの転送に関与します。
  • 割り当てと管理
    IPアドレスはネットワーク管理者やISPによって割り当てられ、変更可能です。MACアドレスは製造時にネットワークインターフェースに固定され、通常は変更されません。

IPアドレスとMACアドレスの関係性は引っ越しをイメージするとわかりやすいと思います。現実世界で引っ越しをしても、「住所」は変更されますが「個人の名前」は変わりません。

ネットワークの世界におけるIPアドレスは「住所」に相当し、ネットワークに接続されたデバイスがどこに位置しているかを示します。ネットワーク環境が変わると、デバイスのIPアドレスも変わります。一方で、MACアドレスは「個人の名前」に相当し、デバイス自体の固有の識別子です。MACアドレスはデバイスの製造時に割り当てられ、基本的には変更されません。

これらの性質により、デバイスがどのネットワークにいるのかを特定できると同時に、そのデバイス自体が何であるかを識別することができるのです。ネットワーク内での通信とデバイスの識別の両方において、IPアドレスとMACアドレスは重要な役割を担っています。

ここまでで通信を行う機器を識別する方法を説明してきましたが、実際にはその機器の中では様々なプログラムが動作していることもあり、機器の中のどのプログラムと通信を行うのかを明確にする必要があります。そこで利用されているのがポート番号です。

ポート番号

ポート番号は、TCP/IP通信において、ホスト上の特定のプロセスやアプリケーションを識別するために使用される番号で、OSI参照モデルの第4層のトランスポート層にあたる機能です。TCP/IPネットワークでは、IPアドレスがネットワーク上のデバイスを識別するのに対し、ポート番号はそのデバイス内の特定のサービスやアプリケーションを識別するために使われます。ポート番号は16ビットの整数で、0から65535までの範囲で割り当てられます。ポート番号には3つの種類があります。

範囲 用途
ウェルノウンポート番号 0~1023 一般的に知られている標準的なサービスに割り当てられている
登録済ポート番号 1024~49151 特定のアプリケーションに割り当てられる
ダイナミック/プライベートポート番号 49152~65535 一時的な通信に使用される

特に利用される頻度の高いウェルノウンポート番号には以下のようなものがあげられます。

ポート番号 プロトコル名 概要
20 FTP データ転送
21 FTP データ転送の制御
25 SMTP メール送信
53 DNS ドメイン名の解決
80 HTTP Webページへのアクセス
443 HTTPS SSLでのWebページへのアクセス

クライアントからのパケットを受け取ったサーバーは、 宛先のポート番号からデバイス内のどのアプリケーションでデータを処理するかを判断し、サーバがクライアント端末にパケットを返す時にも、 そのクライアント端末のIPアドレスとポート番号を指定して通信を行います。このように、ポート番号を使用することで、ネットワーク上で複数のアプリケーションが同時に通信することが可能になります。

続いて実際に通信を行う際にデータを送受信する方法を定義するプロトコルであるTCPUDPについて書いていきます。

TCPとUDP

TCPとUDPは、OSI参照モデルの第4層のトランスポート層に属する2つの主要なプロトコルで、ネットワーク上でデータを送受信する方法を定義しています。

TCP

TCPは接続指向を持っており、データの送受信を開始する前に、送信元と宛先間で接続を確立します。これにより、確実なデータ伝送が保証されます。また、データが正確に順序どおりに到達することを保証します。そのためTCPは信頼性とデータの順序保証が重要なアプリケーションに適しています。例えば、ウェブブラウジング(HTTP/HTTPS)、メール送受信(SMTP、IMAP、POP3)、ファイル転送(FTP)などです。

UDP

UDPは接続指向ではなく、事前の接続確立プロセスを行いません。そのためTCPとは違い、確実なデータ伝送やデータが正確に順序どおりに到達することを保証しません。その分UDPはヘッダーが小さく、追加の制御メカニズムが少ないため、オーバーヘッドが少なく処理が高速です。そのためUDPはリアルタイム性が求められるアプリケーションや、少々のデータ損失が許容されるアプリケーションに適しています。例えば、ストリーミングメディア(ビデオ、オーディオ)、オンラインゲームなどです。

TCPとUDPの違いのまとめ

TCP、UDPの特徴から違いをまとめると以下のようなことが言えます。

  • 信頼性
    TCPは信頼性の高い通信を提供し、データの順序と完全性を保証します。UDPは信頼性よりも速度とシンプルさを優先します。
  • 速度と効率
    TCPの追加機能(接続確立、エラー検出・修正、フロー制御など)により、オーバーヘッドが大きくなります。UDPはこれらの機能を省略するため、より効率的で高速な通信が可能です。
  • 用途
    TCPはデータの正確性が重要なアプリケーションに適しており、UDPはリアルタイム性や効率が求められるアプリに適しています。

TCPとUDPについてですが、基本的にTCPが使われていることが多いです。理由としては基本的に確実にデータが届いているかどうかを確認しなくても良い場面は少ないこと、技術の発達によりTCPでの通信速度も高速になってきていることなどが挙げられます。とはいえUDPが使われている場面もまだまだあるので、双方の特徴についてはしっかり把握しておきたいところです。

最後に

今回はネットワークの繋がる流れやそれに関連するプロトコルの話などをまとめてみました。エンジニアリングの基礎となる部分でまだまだ勉強不足な部分も多いので、こういった基礎的な内容についても今後継続してアウトプットしていきたいです。最後までご覧いただきありがとうございました。

Discussion