tkrd-stack

学習ノート

自分の理解を深めるための技術メモ

← 一覧に戻る

ネットワーク

基礎

歴史

ARPANET (Advances Research Project Agent NETwork)

アメリカ国防総省の高等研究計画局(DARPA)が学術目的で作ったネットワークでインターネットのルーツ。

このネットワークはデータを「パケット」と呼ばれる小さな単位に分割してやり取りをする「パケット交換方式」という電装方式を世界で初めて採用。

データの伝送方式

  • 回線交換方式 データのやり取りを「1 対 1」の伝送回路を作りやりとりが終わるまで使い続ける方式。イメージは固定電話。回線が繋ぎっぱだけどデータの行き来はほとんどなし。
  • パケット交換方式 回線交換方式から回線利用率向上を目的として、新たに考えられた方式。 データを「パケット(小包)」と呼ばれる小さな単位に分割して、ネットワークに流す方式。データに「ヘッダー」という情報をくっつけて、パケット交換ネットワークにパケットを流す。 ヘッダーには宛先となるコンピュータの情報だったり、データの何番目に当たるパケットなのかだったりの様々な情報が含まれている。 パケット交換ネットワークはヘッダーの情報をみて、宛先のコンピューターにパケットを送り、宛先のコンピューターは ヘッダーの情報を見て、元のデータに復元する。

階層構造モデル

通信機能の階層は 2 つ存在しているが、作ったところが違うだけで、通信に必要な機能をレイヤー的に整理しているという点においては同じようなことをしている。

TCP/IP モデル OSI 参照モデル

1970 年にアメリカ国防総省の国防高等研究計画局(DARPA)が開発したモデルで別名 DARPA モデルともいう。それぞれの階層は役割分担がされていて、順々に処理を行う。

下から順に

  • リンク層 同じネットワークにいる端末との接続性を確保する。
  • インターネット層 異なるネットワークにいる端末との接続性を確保する。
  • トランスポート層 アプリケーションの識別と、それに応じた通信制御を行う。
  • アプリケーション層 ユーザーに対して、アプリケーションを提供する。

OSI 参照モデル

Open Systems Interconnection Model

1984 年に国際標準化機構(ISO International Organization for Standardization)が策定したモデル。乱立していたベンダー企画の国際的な標準化を推し進めるべく策定された。

  • 物理(L1)
  • データリンク(L2)
  • ネットワーク(L3)
  • トランスポート(L4)
  • セッション(L5)
  • プレゼンテーション(L6)
  • アプリケーション(L7)

osi_reference_model_tcpip.png

ip_packet.png

通信プロトコル(プロトコル)

通信する時にお互いが守るルール。

パケットを処理するための約束事。

URL の先頭についている、「https」は「https を使ってパケットを処理します」ということ。

ネットワークには多くのプロトコルがあって、それぞれ役割を持っている。

物理的な仕様

LAN ケーブルの素材やコネクタの形状、ピン配列に至るまで、ネットワークにおいて目に見えるものは全てプロトコルで定義されている。Wi-Fi の電波の周波数やパケットをどのように変換するのかもまで。

送信相手の特定

ネットワークの相手を住所のように割り当てて、区別している。URL や IP。

パケットの転送

ヘッダーのどこからどこまでにフォンな情報を含み、どんな順序でやりとりするかが定義されている。

信頼性の確立

パケットはいつ壊れたり、なくなったりするかがわからない。そんなことになっても大丈夫なように、エラーを通知したり、データを再送したりすしくみを提供している。

また、有限なネットワークリソースがパケットでいっぱいになって溢れかえってしまわないような仕組みもある。

セキュリティの確保

重要な情報を安心してやり取りできるように、正しい通信相手であるかを認証し、通信を暗号化する仕組みを提供している。

ネットワークを構成する機器

ネットワーク上に存在するネットワーク機器が、すべての階層のプロトコルの情報をみて処理できることではないです。ネットワーク機器には階層によって処理できる範囲が異なって、ある階層で動作する機器はそれ以下の階層のプロトコルは処理できますが、その階層より上の階層のプロトコルは処理できません。

例えば、L2 であれば L2 までのプロトコル、L7 であればすべての階層のプロトコルを処理できます。

物理層で動作する機器

ケーブルやコネクタの形状、ピン配列など物理的な仕様について定義されている階層です。パケットを光/電気信号に変換したり、電波に変調したりする機能をもっています。

NIC

Network Interface Card

PC やサーバーなどのコンピュータをネットワークに接続するためのハードウェアです。

全てのネットワーク端末は、アプリケーションと OS が処理したパケットを NIC を使用して LAN ケーブルや電波に流します。

リピーター

LAN ケーブルを流れる電気信号は伝送距離が長くなれば減衰し、100m になると波形が壊れます。リピーターは波形を増幅し、波形を整えて、もう片方に転送します。そうすることで、伝送距離を伸ばしより遠くへパケットを届けられるようにします。

リピーターハブ

受け取ったパケットのコピーを、そのまま他の全てのポートに転送する機器です。受け取ったパケットを共有できるようにします。

メディアコンバーター

電気信号と光信号を相互に変換する機器です。光ファイバーケーブルを接続できない機器しかない状況で、ネットワークを延伸したい場合に使用します。

電気信号は減衰が激しいので LAN ケーブルでは距離が 100m までなので遠くまで伸ばせません。光ファイバーケーブルに対応する機器は高価なので使うと膨大なコストがかかります。メディアコンバーターは最長 40km まで延伸できます。

アクセスポイント

パケットを電波に変調、復調する機器です。無線と有線の架け橋です。

データ層で動作する機器

物理層の信頼性を確保し、同じネットワークにいる端末と接続できるようにする階層です。

ブリッジ

ポートとポートの橋渡しのような役割を持っています。端末から受け取った「MAC アドレス」を「MAC アドレステーブル」という表で管理し、転送処理を行います。

この転送処理のことを「ブリッジング」と言います。

L2 スイッチ

たくさんポートもっているブリッジです。「スイッチングハブ」や「スイッチ」ということもあります。

端末から受け取ったフレームの「MAC アドレス」を「MAC アドレステーブル」で管理し転送処理を行います。この処理を「L2 スイッチング」と言います。

ネットワーク層で動作する機器

ネットワークとネットワークを繋ぐ階層です。IP アドレスをもとにパケット転送を行います。

ルーター

端末から受け取った IP パケットの IP アドレスを見て、自分のネットワークを超えたところにいる端末へと届ける役割を担っています。ルーターは IP パケットをバケツリレー方式で目的地へ都度家ます。これを「ルーティング」といいます。

ルーターは「ルーティングテーブル」という表をもとにパケットの受け渡しをしています。受け取った IP パケットの IP アドレスとルーティングテーブルの情報を照合し、転送処理をしています。他にも様々な機能をを持っています。

  • NAT
  • IPsec VPN
  • PPPoE
  • DHCP

L3 スイッチ

ルーターに L2 スイッチを足したような機器です。

L3 スイッチは MAC アドレステーブルとルーティングテーブルを組み合わせた情報を「FPGA (Field Programmable Gate Array)」や「ASIC(Application Specific Integrated Circuit)」などパケット転送処理専用ハードに書き込み、その情報をもとにスイッチングしたりルーティングしたりします。

トランスポート層で動作する機器

アプリケーションを識別し、その要件に応じた通信制御を行う階層です。トランスポート層で動作する機器はセグメント(TCP)またはデータグラム(UDP)のヘッダーに含まれる「ポート番号」をもとにオアケット転送を行います。ポート番号はサービスを識別するための番号です。

ファイアウォール

ネットワークの安全を守るために使用する機器です。最近は次世代ファイアウォールと区別するためにトラディショナルファイアウォールとも言ったりします。

ファイアウォールは端末間でやりとりされるパケットの IP アドレスやポート番号を見て、通信を許可したり、ブロックしたりします。

この通信制御機能のことを「ステートフルインスペクション」と言います。

アプリケーション層で動作する機器

次世代ファイアウォール

ステートフルインスペクションに加えて、VPN や IDS (Intrusion Prevention System、不正侵入防御システム)など、様々なセキュリティ機能を詰め込み、統合化を図っています。また、IP アドレスやポート番号だけでなく、色々な情報をアプリケーションレベルで解析することによって、トラディショナルファイアウォールよりも高次元のセキュリティと運用管理性を実現しています。

WAF

web アプリケーションの安全を守るために使用する機器です。XXS や SQL インジェクションなど、web アプリケーションの脆弱性を利用した攻撃に対して、WAF はクライアントとサーバーの間でやり取りされる情報のふるまいをアプリケーションレベルで一つ一つ検査し、必要に応じてブロックします。

負荷分散装置(L7 スイッチ)

サーバーの負荷を分散する機器です。ロードバランサーと呼んだり、L7 スイッチと呼んだりします。

1 台のサーバーで処理できるトラフィック(通信データ)の量は限られています。負荷分散装置はクライアントから受け取ったパケットを「負荷分散方式」という決まりごとに基づき、背後にいる複数のサーバーに振り分けることでシステム全体で処理できるトラフィック量の拡張をはかります。

「ヘルスチェック」で定期的なサービス監視を行うことで、障害の発生したサーバーを負荷分散対象から切り離し、サービスの可用性向上を図ります。

PDU

Protocol Data Unit

各階層で処理されるデータの塊、単位で、各階層で名称が異なる。

  • ヘッダー:制御情報
  • ペイロード:データそのもの

ヘッダーとペイロードで構成されているものを PDU という。

各階層が連携して動作する仕組み

カプセル化と非カプセル化

  • カプセル化 送信端末はアプリケーション層から順に、それぞれの階層でペイロードにヘッダーをくっつけて、PDU にしてから一つ下の階層に渡す。 下の階層でヘッダーを付与する処理を「カプセル化」という。一つ下の階層では受け取った PDU にその階層のヘッダーを新しく付け加えて PDU を形成する。 カプセル化のメリットは、ネットワーク通信で送られる情報を管理し、ネットワーク間のデータの輸送を効率的に、正確に行うことができることです。
  • 非カプセル化 カプセル化に対して、受信端末は物理層から順にそれぞれの階層で PDU からヘッダーを取り外して、ペイロードのみを上の階層に渡す。ヘッダーを取り除く処理を「非カプセル化」という。

71a468eebc80-20230930.png

コネクション型とコネクションレス型

各階層のプロトコルは 2 種類のデータ転送サービスを上位層に提供する。

  • コネクション型 データを送信する前に、通信相手に対して「データを送ってもいいですか?」と聞いた上で、コネクション(関係、つながり)を確立し、データをやりとりした後に終了します。 手順をしっかり踏む分データの転送に時間はかかるが、確実にデータを転送るすことができる。
  • コネクションレス型 いきなりデータを送ってコネクションを確立し、勝手に終了します。 相手の状況に関わらず一方的に送る、郵便配達をイメージ。 手順を省略している分、確実にデータの転送ができるといえないが、転送にかかる時間を短縮できる。

標準化団体

IEEE

Internet Electrical Electronics Engineers

電気電子技術学会の略称。

ハードウェア寄りのネットワーク技術の標準化の研究、議論がされている。

IETF

Internet Engineer Task Force

ソフトウェア寄りのプロトコルを策定している。

RFC (Request For Comments)という形で文書化され、インターネットに公開される。

リソース

インターネット上でアクセス可能な「もの」や「データ」のことを指します。リソースは、Web サーバーに保存されているすべての情報や、ユーザーがアクセスできるものを包括的に表します。

リソースの抽象的な定義

リソースは必ずしも物理的なファイルに限りません。例えば、ユーザーアカウントや商品の情報、API から取得するデータなどもリソースと見なされます。リソースは単に「何か」を指し、その何かは実際のコンテンツに限らず、サービスや機能の一部としても捉えられます。

リソースの具体的な例

  • Web ページ: HTML ファイルそのものや、それを表示するための関連データ(画像、CSS ファイル、JavaScript ファイルなど)。
  • 画像や動画: インターネット上で視覚的なコンテンツを提供するファイル。
  • API エンドポイント: サーバーが提供するデータや機能にアクセスするための URL。たとえば、データベースからユーザー情報を取得するためのエンドポイントなど。
  • データ: JSON、XML、CSV などの形式で提供される情報。
  • ドキュメント: PDF ファイルやテキストファイルなど、ダウンロード可能なリソース。

イーサネット

Ethernet

家庭・企業・データセンターなどで使用されるコンピューターネットワークにおいて、LAN や WAN を構成する有線ローカルエリアネットワークの主流な通信規格です。

ネットワークのかたち

LAN

Local Area Network

限られた範囲のネットワーク

WAN

Wide Area Network

距離的に遠く離れた範囲のネットワーク

  • インターネット インターネットサービスプロバイダ(ISP)や研究機関などが持っているルーターが国境を超えて繋がっていて、無数のパケットを運んでいる。 ISP には「AS 番号」というインターネットで一意の管理番号が振られている。AS (Autonomous System)の略でそれぞれの組織が管理している範囲のことです。
  • 閉域 VPN 網 LAN と LAN を接続するネットワークのことです。

DMZ

DeMilitarized Zone

インターネットに公開するサーバーを設置するネットワークのことです。サーバーが提供するサービスを安定稼働させることです。安定稼働に必要不可欠な機能が「冗長化」です。DMZ ではどの機器が故障しても、どのケーブルが断線しても、即座に経路が切り替わり、サービスを提供し続けることができるように同じ種別のネットワーク機器を並列に配置します。

SDN

software Defined Network

ソフトウェアによって管理・制御される仮想的なネットワーク、あるいはそれを構成するための技術のことでうs。

運用管理のシンプル化を目的としています。

ネットワーク全体を制御する「コントロールプレーン」とパケットを転送する「データプレーン」で構成され言います。

sdn01a.png

型が 2 種類存在します。

  • オーバーレイ型 スイッチ間に仮想的なトンネルを作ってパケットを転送する方式。
  • ホップバイホップ型 スイッチ一つひとつにたいして、経路の情報(フローエントリ)を配布し、その情報をもとにパケットを転送する方式です。

CDN

Content Delivery Network

画像や動画、HTML や CSS など Web コンテンツで使用される色々なファイルを大量配信するために最適化されたインターネット上のサーバーネットワークのことです。

CDN はオリジナルのコンテンツを保持する「オリジンサーバー」とそのキャッシュを持つ「エッジサーバー」で構成されています。

IoT

Internet Of Things

身の回りにある色々なものがインターネットにつながる仕組みのことです。

プロトコルの種類が、CoAP (Constrained Application Protocol)と MQTT(Message Queuing Telemetry Transport)です。

データリンク層

データリンク層のデータリンクとは隣接する機器との間に作る論理的な伝送路のことです。IEEE802.3 で標準化されているイーサネットでは、どのようなフォーマット(形式)でカプセル化を行い、どのようにエラー検知するのかが定義されています。

イーサネットのフレームフォーマット

イーサネットによってカプセル化されるパケットのことを「イーサネットフレーム」と言います。

フォーマットは「イーサネット Ⅱ 規格」が主流で TCP/IP でやり取りするほとんどのパケットがイーサネット Ⅱ 規格によるものです。

イーサネット Ⅱ は「プリアンブル」「宛先/送信元 MAC アドレス」「タイプ」「イーサネットペイロード」「FCS」という 5 つのフィールドで構成されています。

このうち「プリアンブル」「宛先/送信元 MAC アドレス」「タイプ」を「イーサネットヘッダー」といい、「FCS」を「イーサネットトレーラー」と言います。

ethernet4a.png

プリアンブル

「これからイーサネットフレームを送りますよー」という合図を意味する 8 バイト(64bit)のビットパターンです。受信側の端末はイーサネットフレームのプリアンブルを読み、「これからイーサネットフレームが送られるんだな」と判断します。

宛先/送信元 MAC アドレス

MAC アドレスはイーサネットネットワークに接続している端末を識別する 6 バイト(48bit)の ID です。

「00-0c-29-43-5e-be」「00:0c:29:43:5e:be」のように 1 バイトずつハイフンや転んで区切って、16 進数で表記します。

上位 3 バイトと下位 3 バイトでは異なる意味を持ちます。

上位 3 バイトは IEEE がベンダーごとに割り当てた「ベンダーコード」で「OUI (Organizationally Unique Identifier)」と言います。この部分を見ると、通信している端末の NIC がどのベンダーによって製造されたかがわかります。

下位 3 バイトは「UAA (Universal Administered Address)」といい、出荷時にベンダーから割り当てられたり、ランダムに生成されたりします。

宛先 MAC アドレス

送信元 MAC アドレス

タイプ

ネットワーク層でどんなプロトコルを使用しているかを表す 2 バイトの ID です。タイプはタイプコードと呼ばれるコードによって識別されます。

イーサネットペイロード

ネットワーク層のデータそのものを表しています。

FCS

Frame Check Sequence

イーサネットフレームが壊れていないかを確認するためにある4バイトのフィールドで、エラー検知の全てを担っています。

送信側の端末はイーサネットフレームを送信する時に「宛先/送信元 MAC アドレス」「タイプ」「イーサネットペイロード」に対して一定の計算(チェックサム計算)を行いその結果を FCS としてフレームの最後に付与します。受信側は同じ計算をして、その値が FCS と同じであれば破損していないと判断します。異なっていると伝送途中で破損したと判断して、破棄します。

URI

URI(Uniform Resource Identifier)

URL

URL(Uniform Resource Locator)は、インターネット上のリソースの位置を特定するためのアドレスのことです。URL は、ウェブページやファイル、API エンドポイントなどのリソースにアクセスするために使われ、ウェブブラウザのアドレスバーやリンクとして表示されます。

URL の構成

URL は基本的に以下のような構造になっています:

プロトコル://ホスト名(ドメイン):ポート/パス?クエリパラメータ#フラグメント

それぞれの部分を分解すると次の通りです:

  1. プロトコル
    • インターネット上でどのように通信するかを指定します。
    • 例:
      http
      (非暗号化通信)、
      https
      (暗号化通信)、
      ftp
      (ファイル転送プロトコル)
  2. ホスト名(ドメイン)
    • インターネット上のリソースの場所を特定するための名前です。
    • 例:
      www.example.com
  3. ポート番号(省略可能)
    • リソースにアクセスするための通信ポートを指定します。
    • 通常、
      http
      は 80 番、
      https
      は 443 番ポートを使用します。これらの標準ポートが使われている場合は省略できます。
    • 例:
      https://www.example.com:8080
  4. パス
    • サーバー上の特定のリソースを示すディレクトリやファイルの場所です。
    • 例:
      /about
      ,
      /images/photo.jpg
  5. クエリパラメータ(省略可能)
    • リソースに渡す追加情報です。パラメータ名と値のペアで構成され、
      &
      で区切られます。
    • 例:
      ?id=123&category=books
  6. フラグメント(省略可能)
    • ページ内の特定の位置を示すためのアンカー。ページが表示されたときに特定の位置にスクロールされます。
    • 例:
      #section2

URL の例

  • https://www.example.com/about?user=alice#profile
    • プロトコル:
      https
    • ドメイン:
      www.example.com
    • パス:
      /about
    • クエリパラメータ:
      user=alice
    • フラグメント:
      profile

URL の役割と重要性

  • リソースの特定:URL は、インターネット上でリソースを一意に特定し、アクセスするための手段を提供します。
  • SEO:検索エンジンは URL を使ってサイトの構造を把握し、検索結果の順位に影響を与えます。
  • リンク共有:URL は簡単に共有できるため、リソースにアクセスするための便利な手段です。

URL と URI の違い

URL は URI(Uniform Resource Identifier)の一種です。URI はリソースの識別子全般を指し、URL はその中で具体的に「場所(ロケーション)」を示すものを意味します。

スキームとプロトコルの違い

「スキーム」と「プロトコル」は似ていますが、厳密には異なる概念として扱われることが多いです。URL におけるスキームは、プロトコルと密接に関係していますが、少し異なる意味で使われます。

スキーム(Scheme)

スキームは、URL 内で使われる最初の部分で、リソースへのアクセス方法やその位置情報の形式を定義します。スキームには、HTTP や HTTPS、FTP、mailto、file などさまざまなものがあり、URL の冒頭にある

:
の前の部分です。例えば、
https://www.example.com
の場合、
https
がスキームになります。

プロトコル(Protocol)

プロトコルは、データ通信のルールや手順を指します。プロトコルには、HTTP(Hypertext Transfer Protocol)や FTP(File Transfer Protocol)、SMTP(Simple Mail Transfer Protocol)などがあり、それぞれ異なる通信方法を規定しています。例えば、HTTP はウェブページのやり取りの方法を規定し、FTP はファイル転送の方法を規定しています。

両者の違いと関係性

  • スキームは URL の一部であり、リソースの取得方法を指定しますが、必ずしも通信プロトコルを意味しない場合もあります。たとえば、
    mailto
    file
    は通信プロトコルではありませんが、それぞれメールアドレスやローカルファイルを指すスキームとして使われます。
  • プロトコルは通信の手順や規則であり、ネットワーク通信の仕組みを定義します。スキームが指定されると、それに対応するプロトコルが使われることが多いですが、スキームのすべてが通信プロトコルを意味するわけではありません。

結論

多くの場合、

http
https
といったスキームは、そのまま通信プロトコルを指しているため、同じように扱うこともあります。しかし、スキームとプロトコルは必ずしも一致するわけではなく、スキームは URL での役割を強調する概念である一方、プロトコルは実際のデータ通信の手順を指すため、厳密には異なると理解しておくと良いでしょう。

ポート番号

ポート番号とは、TCP/IP 通信において、 コンピュータが通信に使用するプログラムを識別するための番号です。

ポート番号は 16 ビットの整数であるため、2^16=65535  つまり、0 番~ 65535 番まであります。

サービスを特定するためのものがポート番号。

IP アドレスが住所ならポート番号は部屋番号で例えられることが多いです。

ポート番号の種類

ウェルノウンポート番号

番号:0 ~ 1023

特定のサービスやプロトコルに割り当てられている予約番号。広く知られているためウェルノウン。

登録済みポート番号、レジスタードポート番号

番号:1024 ~ 49151

インターネット資源の管理団体である IANA(Internet Assigned Numbers Authority)が用途の受付・登録を行っています。

ダイナミック/プライベートポート番号

番号:49152 ~ 65535

エフェメラルポートとも呼ばれており、用途の決まっていないポート番号群です。サーバー側と通信する上でクライアント側が一時的に設定する番号となります。こちらは固定された番号ではありませんが、49152 ~ 65535 番の範囲で使用することを IANA は推奨しています。

ドメイン

インターネットのドメインは、ルート(.)と呼ばれる頂点を持ち、そこから木を逆さまにしたような形(階層構造)で構成されています。ルートの最初の分岐(ルートの直下)がトップレベルドメイン(TLD)で、以降、セカンドレベルドメイン(2LD)、サードレベルドメイン(3LD)というように階層構造が構成されます。

root-tree.png

TLD

Top Level Domain の略称。

ドメイン名において、ドットで区切られた文字列の一番右の部分(ラベル)のことです。

TLD.png

gTLD

generic Top Level Domain

gTLD は、特定の領域・分野ごとに割り当てられたトップレベルドメインで、 一般的に地理的制限なしに世界のどこからでも登録することが可能です。

新 gTLD

好きな文字を組み合わせて TLD を登録していいってことだよ。これによって、企業名や地名、一般名称をトップレベルドメインに使用することができるようになったの。トップレベルドメインの自由化に伴って誕生したドメイン

ccTLD

Country Code Top-Level Domain

  • 特定の国や地域を表す TLD です。
  • 例:
    .jp
    (日本)、
    .us
    (アメリカ)、
    .de
    (ドイツ)、
    .uk
    (イギリス) など。

インターネットドメイン管理

メインをインターネット上で統一的に管理するため、ドメインの登録情報の管理は以下の組織が行っている。

レジストリICANN [※1] から認定を受け、ドメイン および DNS 情報 のデータベース管理や整理をする管理組織です。TDL の管理
レジストラレジストリと登録者の間に入って、 ドメインの登録申請を受け付けたり、その申請内容を審査したり、ドメインのデータベースへの情報登録を行ったりする事業者です。
リセラーレジストラの下でドメインの登録受付業務を行う事業者のことです。

domain_organization_image.png

※1 ICANN(アイキャン):Internet Corporation for Assigned Names and Numbers の略。 インターネットで利用される全てのドメインの管理を行う国際機関です。

※2 JPRS(ジェイピーアールエス):株式会社日本レジストリサービスの略。 さくらインターネットで取り扱っている gTLD ドメインのレジストラです。

IP アドレス

IP アドレスは、インターネット上の住所のようなもの。下記のように、どこの PC からどのサーバーに送るのか IP アドレスを指定することで、送受信を行えます。

column_98_01.avif

グローバル IP (パブリック IP)

インターネットに接続する機器に割り当てられる IP アドレスで、世界中で1つしかありません。

インターネットの世界でユニークである必要があるため、同じアドレスが違うユーザーに割り当てられないよう管理されています。

IP アドレスが割り当てられる仕組みとは

グローバル IP アドレスとプライベート IP アドレスでは、割り当てられる仕組みが異なります。

グローバル IP アドレスの場合

グローバル IP アドレスは、ICANN(別名 IANA)と呼ばれる国際的な機関が管理しており、国やプロバイダー(ISP)によってあらかじめ使用できる範囲が決められています。その下部組織として、日本では JPNIC(一般社団法人日本ネットワークインフォメーションセンター)が管理しており、その配下に各プロバイダー事業者が位置しています。

一般ユーザーや企業は、プロバイダーから IP アドレスの割り当てを受けることで、使用が可能となります。

column_98_04.avif

ちなみに IP アドレスの「割り振り」と「割り当て」は意味が異なります。

ICANN から APNIC、APNIC から JPNIC などへの上位レジストリから下位レジストリに対して IP アドレスを与えることを「割り振り」と言い、プロバイダなどからエンドユーザーに IP アドレスを与えることを「割り当て」と言います

そしてグローバル IP アドレスには動的 IP アドレス静的 IP アドレスの2種類があります。

動的 IP

IP アドレスが固定でなく変動するタイプです。

どのような場合かというと、家庭などでインターネットサービスプロバイダー(ISP)に接続する場合がわかりやすい例です。

  1. ISP を使用してインターネットに接続する場合、ISP より IP アドレスが付与されます。
  2. インターネットへの接続を切ったら、その時付与された IP アドレスは無効になります。
  3. そしてまたインターネットに接続した際には、ISP から別の IP アドレスが割り当てられる仕組みです。

静的 IP (固定 IP)

IP アドレスが変わらない、つまり固定されたものです。

接続の度に IP アドレスが変わって欲しくない時にこちらを使用します。

例えば WEB サイトの公開サーバやメールサーバ等。

WEB サイトをご自身で作成して公開したことのある方であれば、すぐにご理解頂けるかと思いますが、

公開するにあたって WEB サイトのサーバの IP アドレスとドメインを紐付ける為に、DNS サーバで関連付ける必要があります。

しかし IP アドレスがもし動的だと、登録した IP アドレスと紐づかずに WEB サイトが表示されない、といったことが起こり得ます。

プライベート IP

プライベート IP とは、企業や家庭内のネットワークでのみ使用できる、インターネットに直接接続しない IP アドレスです。内線電話のようなものと考えられます。

割り当てられる仕組み

プライベート IP アドレスの範囲内で、各機器に一意の値が割り当てられます。

グローバル IP アドレスとは異なり、組織内(プライベートネットワーク)で重複しなければよいため、他の組織と同じ値になってしまっていても問題ありません。

プライベート IP アドレスにも、自動(動的 IP アドレス)と手動(固定 IP アドレス)の 2 通りの割り当て方があります。

※グローバル IP との区別は、IP アドレスの不足が原因です。IP アドレスは約 43 億個割り当て可能ですが、インターネットの普及により不足しました。そのため、企業や家庭内のネットワークには共通の IP アドレス(プライベート IP)を使用することになりました。

IP アドレスとポート番号の関係性

IP アドレスはデバイスに関連付けられているのに対し、ポート番号はデバイス内のプロセスや接続に関連付けられています。

NAT

Network Address Transport

プライベート IP アドレスからインターネットに接続する場合は、グローバル IP アドレスに変換されます。

スクリーンショット-2022-05-28-0.20.55.png

1000000308.png

NAPT(IP マスカレード)

Network Address Port Transport

IP アドレスとポート番号を別の IP アドレスとポート番号に変換する技術。NAT(Network Address Translation)の限界を克服する技術。

スクリーンショット-2022-05-28-0.23.43.png

1000000309.png

使用されるポートは、動的/プライベートポート(49152 ~ 65535)に分類されることが一般的です。

重要なのは、送信元ポート番号が異なれば、NAPT が複数の接続を区別できるという点で

NAPT の基本処理の流れ(HTTPS 通信の場合)

送信時(内部ネットワーク → 外部ネットワーク)

  1. 内部デバイスから送信

    • 内部ネットワークのクライアントが HTTPS 通信を開始します。
    • クライアントの送信元 IP アドレス(例: 192.168.1.100)と送信元ポート番号(例: 50000)でデータを送信します。
    • 宛先はサーバーのグローバル IP アドレス(例: 203.0.113.10)とポート 443(HTTPS)です。
    送信元: 192.168.1.100:50000
    宛先: 203.0.113.10:443
    
  2. NAPT による変換

    • 送信元 IP アドレスを内部 IP アドレス(192.168.1.100)からルーターのグローバル IP アドレス(例: 198.51.100.1)に置き換えます。
    • 送信元ポート番号を内部の 50000 から、NAPT が動的に割り当てたポート番号(例: 52000)に変換します。
    変換後:
    送信元: 198.51.100.1:52000
    宛先: 203.0.113.10:443
    
  3. 外部ネットワークへの送信

    • 変換後のパケットを外部ネットワークに送信します。
    • 宛先ポート番号 443(HTTPS)はそのままで、データの暗号化された部分は NAPT では変更されません。

受信時(外部ネットワーク → 内部ネットワーク)

  1. 外部サーバーからの応答

    • 宛先 IP アドレスがルーターのグローバル IP(198.51.100.1)で、宛先ポートが 52000 のパケットが外部サーバーから返ってきます。
    送信元: 203.0.113.10:443
    宛先: 198.51.100.1:52000
    
  2. NAPT による逆変換

    • NAPT は、グローバル IP アドレス(198.51.100.1)とポート番号 52000 の組み合わせを内部ネットワークの対応するデバイス(192.168.1.100:50000)に変換します。
    変換後:
    送信元: 203.0.113.10:443
    宛先: 192.168.1.100:50000
    
  3. 内部デバイスへの転送

    • 逆変換されたパケットが内部ネットワークのデバイスに送られます。

具体例:

例えば、クライアントが 2 つの異なるサーバーに接続しようとする場合:

  1. 接続 1:
    • 送信元 IP:
      192.168.1.10
      (クライアント)
    • 送信元ポート:
      12345
      (オペレーティングシステムが選択)
    • 宛先 IP:
      203.0.113.10
      (サーバー 1)
    • 宛先ポート:
      80
      (HTTP)
  2. 接続 2:
    • 送信元 IP:
      192.168.1.10
      (同じクライアント)
    • 送信元ポート:
      12346
      (異なるポート)
    • 宛先 IP:
      203.0.113.20
      (サーバー 2)
    • 宛先ポート:
      443
      (HTTPS)

Cookie

cookie とは

クライアントの Web ブラウザと Web サーバとの間で、状態を維持・管理する 仕組みのことであり、その通信の際にクライアントの Web ブラウザに保存された情報のこと。web ブラウザに保存される小さなテキストファイルのこと。

Cookie により、特定の Web ページを訪問した履歴やログイン情報などを記録してくれることから、その特定の Web サイトに再度訪れた場合には、同じクライアント(利用者)の Web ブラウザだと分かります。

Cookie により、ログイン状態は一定期間は保持されることから、例えばネットショッピング等で何度もログイン情報を入力する必要はなく、ネットショッピング中にページから離脱しても買い物カートの中の商品がそのままの状態でスムーズに利用できます。

web ブラウザに Cookie が保存される仕組み

HTTP ではリクエストとそれに応答し、要求されたデータを送り返す HTTP レスポンスのやり取りを繰り返して Web ページを表示している。

Cookie は HTTP レスポンスの一部であり、クライアントは送り返された Cookie を保存して、後続のリクエストで Cookie を一緒にサーバーに返す。

Cookie の情報

web サイトを閲覧した時の、さまざまな情報が記録される。

  • 「名前=値」の組み合わせで情報が保存される。

Cookie のセッション管理

用途

Session 管理

  • パーソナライズ
  • トラッキング

セキュリティ

Cookie へのアクセスをブロック

Cookie の送信先の定義

種類

  • ファーストパーティ Cookie
    • 閲覧した web サーバーから発行される。
  • サードパーティ Cookie
    • 閲覧した web サイト以外から発行される。

Session

session とは

通信の開始から終了までのこと。通信開始から終了までの間にリクエストとレスポンスが何回されていようとも、セッションの回数は 1 回。イメージは会話。

一連のリクエストとレスポンスを通じてユーザーとウェブサーバー間で確立される一時的な接続。セッションは Cookie を利用して一意の sessionID をブラウザに保存して、ユーザーを特定する。

Session の特徴

  • セッションはセッション ID を使って同一のセッションを管理する。
  • セッションの情報はサーバーのファイルとして保存される。

Session 管理

クライアントとサーバー間で通信を行う際に、通信相手の特定や相手の状態を把握すること。また、通信相手を特定した状態のことを session と呼ぶ。

Session 管理の流れ

  • セッションファイルを作成
  • クライアントに Cookie を保存
  • サーバーでリクエストしたユーザーを判別する

シリアライズ

複雑なものの単純化

オブジェクトを一列のビットに変換すること。

デシリアライズ

シリアライズされたものの再構成

HTTP

クライアントと web サーバーの間でデータの送受信を行うためのプロトコル。

HTTP リクエストの中身

リクエストライン内容
ヘッダーリクエストの詳細情報を表示
空白行ヘッダーとボディを分けるためのもの。
ボディ画面の入力内容など送信される項目と値。
【リクエストライン】
POST http://example.jp/31/31-003.php HTTP/1.1
【ヘッダー】
Host: example.jp                                                             
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/113.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: ja,en-US;q=0.7,en;q=0.3
Content-Type: application/x-www-form-urlencoded
Content-Length: 72
Origin: http://example.jp
Connection: keep-alive
Referer: http://example.jp/31/31-002.php
Upgrade-Insecure-Requests: 1

【ボディ】
name=%E5%BE%B3%E4%B8%B8%E5%BF%A0&mail=test%40ezample.jp&gender=%E7%94%B7

HTTP レスポンスの中身

HTTP リクエストに対するレスポンス。

リクエストライン内容
ヘッダーレスポンスの詳細情報を表示
空白行ヘッダーとボディを分けるためのもの。
ボディHTML や画像等のデータ
【ステータスライン】
HTTP/1.1 200 OK
【ヘッダ】
Server: nginx/1.10.3
Date: Sat, 20 May 2023 01:53:37 GMT
Content-Type: text/html; charset=UTF-8
Content-Length: 386
Connection: keep-alive
Vary: Accept-Encoding
X-UA-Compatible: IE=edge

【ボディ】
<html>
<head><title>確認</title></head>
<body>
<form action="31-004.php" method="POST">
              :
              :
</body></html>

ステータスコード

100 番台:処理が継続している

200 番台:正常に処理した

300 番台:リダイレクト

400 番台:クライアントエラー(Web ブラウザ側で何かがおかしい)

500 番台:サーバーエラー(Web サーバ側で何かがおかしい)

ステートレス

以前の状態(ステート)を持たない(レス)で、その都度処理を要求するやり方。

客: こんにちは

店員: いらっしゃいませ。○○ バーガーへようこそ

客: ハンバーガーセットをお願いします

店員: サイドメニューは何になさいますか?

客: ハンバーガーセットをポテトでお願いします

店員: ドリンクは何になさいますか?

客: ハンバーガーセットをポテトとジンジャーエールでお願いします

店員: +50 円でドリンクを L サイズにできますがいかがですか?

客: ハンバーガーセットをポテトとジンジャーエール(M)でお願いします

店員: 以上でよろしいですか?

客: ハンバーガーセットをポテトとジンジャーエール(M)でお願いします。以上

店員: かしこまりました

問題点

リクエストのたびに状態がリセットされて状態を全く覚えていない。

WebSocket

WebSocket は双方向の HTTP プロトコルで、クライアントとサーバの通信で成立する。HTTP とは異なり、

ws://
あるいは
wss://
から始まる。WebSocket は HTTP とは違って、クライアントとサーバ間の接続はどちらか一方が切断されると終了する。WebSocket が動く仕組みは HTTP のそれとは異なり、ステータスコード
101
がプロトコルの切り替えを示す。

WebSocket が動く仕組み

Web ページは多くの場合、HTTP 接続を介してインターネット上で転送される。このプロトコルは、Web サイトがブラウザに表示されるようにデータを転送するために使われる。これを実現するために、クライアントはアクションを行うたびにサーバーにリクエストを行う。HTTP を使って Web サイトにアクセスする場合、クライアントはまずサーバーにリクエストを送信する。その後、サーバーは要求された接続を送信することで応答する。

WebSocket は HTTP とは違って、Web サイトをリアルタイムで呼び出すことができるようになった。クライアントは WebSocket プロトコルの通信を送信してサーバーとの接続を確立しなければならない。この通信は、データ伝送に必要な識別情報をすべて提供する。

通信した後もチャンネルは開いたままなので、ほぼ常時通信ができる。つまり、クライアントがデータを要求しなくても、サーバーが勝手にデータを配信できるのだ。つまり、サーバーが新しいデータを受信した場合、クライアントに特別なリクエストを要求することなく、そのデータをクライアントに配信する。

WebSocket と HTTP の違い

WebSocketHTTP
双方向通信プロトコル。クライアントからサーバへ、かつサーバからクライアントへデータを送信できる。TCP プロトコル上で動作する単方向プロトコル。HTTP リクエストメソッドで接続できる。
リアルタイムで更新が必要なアプリケーションで活用されている(特にチャットアプリ)シンプルな RESTful アプリケーションに使われる
頻繁にデータを更新できるので、HTTP よりも高速。リクエストやレスポンスに従って動作するので、WebSocket よりも遅い。

UDP

User Datagram Protocol

インターネットで利用される通信プロトコルの一種です。

UDP は、相手との接続を確立せずにデータを送信する「コネクションレス型」と呼ばれる方式を採用しており、通信コストが低く、遅延が少ないことが特徴です。

UDP の主な特徴は次のとおりです。

  • データ転送前に正式な接続を確立しない
  • パケットの順序を示さない
  • パケットが意図したとおりに到着したかどうかを確認しない

通信中のパケット紛失やデータ破損、到達順の不整合などが発生した場合の処理は UDP を使用するアプリケーション自身が担当する

  • 通信中のパケット紛失やデータ破損、到達順の不整合などが発生した場合の処理は UDP を使用するアプリケーション自身が担当する

UDP は、音声や動画の再生、DNS のルックアップなど、時間を重視した通信に広く使用されています。また、動画配信、音声通話、モニター監視などのリアルタイム的な分野でも活用されています。

TCP

TCP(Transmission Control Protocol)

安全性重視で通信する時に使うプロトコル

IP

インターネットぽい通信をする時にプロトコル。

TCP/IP

通信の基本プロトコル(インフラ)として動作し、データを転送する。

  • TCP/IP スタックの役割は以下に限定されます:
    1. TCP(トランスポート層): データを分割し、指定されたポート(例: 443)に送信。
    2. IP(ネットワーク層): データを指定された IP アドレスに転送。
  • SSL/TLS の開始や制御は、アプリケーション層(例: Web ブラウザやサーバー)が担当します。

VPN

Virtual Private Network(仮想専用通信網)

インターネットや離れた拠点にアクセスする。

VPN(Virtual Private Network)とプロキシは、どちらもインターネットの通信を中継する技術ですが、その動作の仕組みと提供するセキュリティのレベルには大きな違いがあります。

通信範囲

インターネット通信全体を暗号化し、ユーザーの全ての通信を保護します。つまり、ウェブブラウジングだけでなく、メール、アプリケーション、クラウドサービスなど、PC 上で行うすべてのインターネット通信が VPN を経由します。

セキュリティ

通信を暗号化し、インターネット上でデータを送受信する際に第三者が通信内容を傍受できないようにします。これにより、セキュリティが大幅に強化され、例えば公共の Wi-Fi を利用する際にデータの盗聴を防げます。

使用目的

セキュリティやプライバシーを強化するために使用されます。例えば、公共の Wi-Fi を使う際や、地理的な制限を回避するために使うことが多いです。また、全ての通信が保護されるため、VPN は企業ネットワークに安全に接続するためにも利用されます。

プロキシ

プロキシ(proxy)とは、クライアントとサーバーの間に立ち、クライアントのリクエストを代理で処理する中継役のことを指します。主に次のような役割があります:

プロキシは、インターネット接続を介する多くのシナリオで利用されますが、ウェブ開発でもリバースプロキシ(例えば、リクエストを別のサーバーに転送するプロキシ)として使われることがよくあります。

役割

  1. リクエストの中継: クライアントからのリクエストを一度プロキシサーバーが受け取り、それをターゲットのサーバーに転送します。サーバーからのレスポンスもプロキシが受け取ってクライアントに返します。
  2. セキュリティ: プロキシを使うことで、クライアントが直接ターゲットサーバーにアクセスすることなく、IP アドレスを隠すことができます。これにより、匿名性が保たれたり、攻撃を防いだりできます。
  3. キャッシュ: よく使われるリソース(例えば画像やページなど)をプロキシサーバー側でキャッシュしておき、リクエストごとにサーバーにアクセスせず、プロキシから直接返すことで、アクセス速度を向上させることができます。
  4. アクセス制御: 特定のリソースへのアクセスを制限するために、プロキシを使用することがあります。例えば、企業などで内部ネットワークのセキュリティを強化するために、外部へのアクセスをプロキシを通じて行わせることがあります。

通信範囲

特定のアプリケーション(例えば、ウェブブラウザ)のリクエストのみを中継します。通常、ウェブブラウザの HTTP/HTTPS 通信にのみ影響を与えるため、他のアプリケーションや通信はプロキシを経由しません。

使用目的

主にウェブブラウジングにおいて使用され、IP アドレスの隠蔽や特定のサイトへのアクセス制限を回避するために利用されます。匿名性を高めるためや、コンテンツのフィルタリングなどに使われることが一般的です。

セキュリティ

プロキシは基本的に通信の暗号化を行いません。HTTP プロキシの場合、通信内容は暗号化されず、プロキシを通してもデータがそのまま送受信されます。ただし、HTTPS プロキシ(SSL プロキシ)では、HTTPS 通信を中継する際に暗号化されますが、暗号化の範囲は制限されます。

IPsec

IPsec(Internet Protocol Security)

通信プロトコルの一つ。

インターネット通信で安全にデータをやり取りするための仕組み。

ソケット

BSD ソケット

ホスト間の通信や 1 つのコンピューター上のプロセス間の通信を可能とする。

特定の通信相手(IP ネットワーク上の場合はIP アドレスポートの組み合わせ)と紐付いた通信端点をプログラム上に生成し、これを通じてコネクションの確立やデータの送受信、切断などの処理をう。

UNIX ソケット

同じコンピュータ上で同時に実行されている異なるプログラム(プロセス)間でデータを送受信するプロセス間通信(IPCInter-Process Communication)の一つで、**ネットワーク通信**で用いられるソケット(**socket**)の仕組みを流用したもの。

UNIX ドメインソケットはBSD ソケットの特殊な場合として提供されることが多く、そのコンピュータファイルシステム上に通信用の特殊な領域(実際にはカーネルの管理するメモリ領域)を作り、ここに各プロセスが読み書きをうことでデータの受け渡しをう。

通信する両者が同じコンピュータ内に存在することが前提のため、通信プロトコルの処理などは省略され、ネットワーク通信用の**ソケット実装**よりも効率よく**データ**の伝送ができるように調整されている。