投稿日:
更新日:

インターネットの仕組みと TCP/IP

Authors

目次

banner.png

はじめに

今日、インターネットは電気や水道と同じく日常に欠かせないインフラとなっています。 我々はスマートフォンやパソコンといったネットワーク機器を Wi-Fi やモバイル回線(5G や LTE)に接続することで、インターネットを通じて世界中の人と容易に繋がることができます。

では、インターネットは一体どのようにして我々のもとに情報を届けているのでしょうか?

今回の記事では、インターネットやコンピュータネットワークの仕組みを紹介します。

インターネットとは

インターネットの特長

  • ほぼ全てがケーブルで物理的に繋がっている internet-physical.png
  • 世界中の(だいたい)どこにでも通信が届く internet-anywhere.png
  • 通信が超高速 internet-high-speed.png

インターネットとは端的に述べると、『ネットワークの集り』です。

internet.png

ネットワークとは『ルータの集り』です。

network.png

身近な例で考えてみます。

  • ルータの役割

例えば、家の中にいる時、スマートフォンを Wi-Fi に接続します。 この時、スマートフォンがインターネットにアクセスできるのは、Wi-Fi がルータとして機能することで、ネットワーク仲介者として、通信を受け渡ししているからです。

つまり、自分のスマートフォンと相手のスマートフォンが直接繋がっているのではなく、ルータを介してデータをバケツリレー方式で運んでいる わけです。

connect-topology.png

  • ISP / 回線事業者 の役割

では、ルータがあれば、相手と通信できるのかというと、そうではありません。 インターネットを利用するためには、基地局(拠点)を介してインターネット回線に接続する必要があります。 一般に、インターネットの基地局を提供する事業者は ISP(Internet Service Provider) と呼ばれ、インターネットを利用する際に契約が必要となります。 現在、日本には数百社以上の ISP があると言われており、多数有名な大手事業者から、小規模な事業者まで存在します。

また、地理的に離れた ISP の拠点と接続するためには、当然物理的なケーブル配線も必要になります。 ネットワーク接続に必要な物理回線を提供する事業者は、回線事業者 と呼ばれ、主流の光回線から、ADSL(Asymmetric Digital Subscriber Line)、CATV(Common Antenna TeleVision)等を各家庭に配備します。 いわゆる回線工事というやつです。

つまり、インターネットを利用するためには、回線事業者と ISP の両方と契約をした上で、ルータを設置してネットワーク回線と接続します。 (光回線を利用している場合、光信号と電気信号を相互に変換する光回線終端装置(ONU:Optical Network Unit)が必要になりますが、今回は詳しく触れません。)

internet-line.png

インターネットのコア

役割製品例 / 会社例
ルータ ネットワーク間でデータパケットを転送する端末
家庭やオフィス内の端末をインターネットに接続
IP アドレスを基に最適な経路を選択してデータを転送
セキュリティ機能(ファイアウォール機能等)
Netgear Nighthawk シリーズ
ASUS RTAC シリーズ
Buffalo シリーズ
Cisco ルータ製品
ISP インターネット接続サービスを提供
IP アドレスの割り当て
DNS サーバの運営
インターネット接続に関するトラブルシューティングサポート
NTT 東日本/西日本(フレッツ)
KDDI(au ひかり)
SoftBank(SoftBank Air / SoftBank 光)
OCN(NTT コミュニケーションズ)
回線事業者 インターネットの物理的な回線を提供
光ファイバ網, ADSL, CATV 等のインフラ構築・維持
回線の障害対策およびメンテナンス
通信速度および帯域幅の管理
NTT 東日本/西日本(光回線提供)
J:COM
ケーブルテレビ局
日本電信電話(NTT)や KDDI(回線設備提供)

ISP は複数のネットワークを束ねており、IX(Internet eXchange)と呼ばれるネットワーク接続ポイントを介して、他の ISP と接続します。

つまり、極端な言い方をすると、インターネットというモノは存在しておらず、あくまで複数の組織が運営するネットワークの集り であると言うことです。

Internet の語源:Inter-Network

Hurricane Electric Internet Services のレポート によると、2020 年 11 月現在で、インターネットは 7 万個を超えるネットワークで構成されている とされています。

internet-overview.png

ネットワークプロトコル

インターネットにおける情報のやり取りは、多くの "ルール" に基づいて行われています。 これらのルールの集合体は プロトコル(規約) と呼ばれ、インターネットを支える基盤規則となっています。

今日では、インターネットを介したネットワーク通信には、TCP/IP と呼ばれるプロトコルスタックが使用されます。

TCP/IP とは、インターネットを含む多くのコンピュータネットワークにおいて、世界標準的に利用されている通信プロトコルのことです。 TCP/IP はインターネットプロトコルスイートとも呼ばれ、World Wide Web(WWW)の発明とともに、コンピュータネットワークに革命をもたらしたことがきっかけで、現在でも利用され続けています。

ちなみに、TCP/IP が登場する 1973 年以前は、ARPANET(Advanced Research Projects Agency Network)と呼ばれる大規模パケット交換ネットワークシステムがインターネットの前進として普及していました。

  • TCP/IP が普及する前は各機関で独自にプロトコルを定義していた
プロトコル/技術概要特徴主要な用途
NCP(Network Control Protocol)ARPANET で使用された初期のプロトコルデータのセグメンテーションとトランスポートARPANET ネットワーク内の通信
X.25パケット交換ネットワークのプロトコルエンドツーエンドのエラーチェックと再送信公衆データネットワーク、銀行システム
SNA(Systems Network Architecture)IBM のメインフレームネットワークプロトコル階層型構造、端末とホスト間の通信管理メインフレームデータセンター
DECnetDEC のネットワーキングプロトコルネットワークノード間の通信DEC のミニコンピュータ
UUCP(Unix-to-Unix Copy Protocol)UNIX システム間の通信プロトコルファイル転送、電子メール、ニュース伝送早期の ISP、ニュースグループ
AppleTalkApple の LAN プロトコル自動デバイス認識、簡単な設定Apple 製品のネットワーキング

その結果、パケット交換方式の通信は特定の機関内に限定されていました。

インターネットを利用する際は異なるハードウェアや OS であっても、通信が確立していなければネットワークは繋がりません。 現在のインターネットでは、TCP/IP は機器や OS が異なっても共通のプロトコルを用いて通信を成立させるために必要不可欠となっています。

computer-network.png

例えば、我々がインターネットを介して Web ページを見るときに利用するプロトコル(HTTP)は、基本的に TCP と IP を利用しています。

TCP(Transmission Control Protocol)

TCP とは通信プロトコルのひとつで簡単に説明すると「送ったデータが相手に届いたか、その都度確認しながら通信するやり方」や「正確な信号を送信する通信の規格を定めたもの」と言えます。

分かりやすく言うと、エラーが起きてもクライアント側は繰り返しサーバにリクエストを送信し、サーバ側は正常に受け取って確実にレスポンスを返します。 この一連の流れを セッション と呼び HTTP ではリクエストとレスポンスで完結されます。

IP(Internet Protocol)

IP では、IP アドレス と呼ばれるインターネット上で個々の端末を特定するための一意な数値を付与します。 例えるなら、IP アドレスはインターネット上の住所のようなもので、どの端末(ID)がどの位置(Locator)に存在するのかを特定する ために使用されます。 通信元の端末は、通信先の端末の IP アドレスを指定することで、ネットワーク通信を行うことができます。

http.png

これまで、インターネットでは IPv4 が広く利用されてきましたが、IPv4 のアドレス空間は 2 進数 32 桁で表現されるため、割り当て可能なアドレス数は 2322^{32} 個(約 43 億)に制限されます。 そのため、世界人口が 70 億人を超える現在では、全ての端末に対して一意にアドレスを割り当てることは極めて困難であるとされています。

IPv4 の枯渇問題に伴い、1994 年頃から次世代プロトコルとして IPv6 が登場しました。 IPv6 アドレスは、2 進数 128 桁で表現されるため、割り当て可能なアドレス数は 21282^{128} 個(約 340 澗)に拡張されます。 これは地球の流砂に匹敵する数です。

主流の IPv4 と導入が進む IPv6 ではパケットの構造が異なることから互換性がないため、相互に通信することはできません。(IPv4-IPv6 相互接続問題

ip-header.png

TCP/IP

IP は、データを小さなブロックに分割して送信元から宛先へ転送することで通信を行います。 しかし、IP はコネクションレス型のプロトコルであるため、制御情報のオーバーヘッドが少ない一方で、宛先へ確実にデータが到達する保証はありません。 コネクションレスとは、事前にコンピュータ間でコネクションを確立せずにデータ伝送を行う通信方式です。

さらに、ネットワーク通信に際して、通信速度が向上する一方で、十分な品質を保証しないベストエフォート特性を持ちます。 このことから、IP は相手端末を一意に識別して通信を開始できる一方で、信頼性の低いプロトコルとされています。

そのため、確実な送受信を行うためには、IP 層より上位のトランスポート層プロトコルを使用する必要があり、HTTP(Web における標準的な通信)では、前述の TCP によって通信を制御しています。

プロトコルスタック

TCP/IP はレイヤ毎に通信方法を定義しています。

データを相手に送り届けるためには、最終的にコンピュータが理解できる形式にする必要があります。 しかし、通常、コンピュータが扱えるデータ形式は、人間(サービスの開発者)が理解しにくいため、階層構造を利用します。 TCP/IP スイートの 上位層は人間が理解しやすい形式で、下位層はコンピュータが扱いやすい形式 となっています。 OSI(Open Systems Interconnection)参照モデル に照らし合わせると、TCP/IP は以下のようなレイヤを使用します。 (※ 本記事では、便宜上、OSI 参照モデルの名称で説明します。)

  • Layer 7(アプリケーション層)
    • アプリケーション、ユーザインターフェース等によりデータを管理
  • Layer 4(トランスポート層)
    • データ伝送に伴うエラー訂正、通信制御等のフロー情報を管理
  • Layer 3(ネットワーク層)
    • 複数のネットワーク間(WAN)でデータ伝送を行う
  • Layer 2(データリンク層)
    • 直接接続されたネットワーク内(LAN)で正確なデータ伝送を行う
  • Layer 1(物理層)
    • L7 ~ L2 までのデータを電圧の高低を利用して信号情報(0 と 1)に変換し、伝送媒体に出力

protocol-stack.png

各レイヤで使用されるプロトコル

protocol-type.png

TCP/IP はこれらの各階層のプロトコルが正常に機能して初めて通信が成立します。

アプリケーション層(上位層)は、直接的に人間が利用するアプリケーションに関係する機能を定義します。 トランスポート層やネットワーク層といった中間層は、データを相手端末のアプリケーションに送り届けるための情報(IP アドレスやポート番号)を提供します。 データリンク層や物理層といった下位層は、端末自体の識別や、ビット列への変換といった物理的な信号情報を扱います。

L7:アプリケーション層

アプリケーション層は ユーザが直接対話するインターフェースを提供する 部分です。 例えば、ウェブブラウザ(Chrome, Firefox)やメールクライアント(Outlook, Gmail)がこの層に含まれます。 アプリケーション層の代表的なプロトコルには、ウェブページの閲覧に用いられる HTTP(Hyper Text Transfer Protocol)、ファイルの転送に用いられる FTP(File Transfer Protocol)、メールの送受信に用いられる SMTP(Simple Mail Transfer Protocol) や POP(Post Office Protocol)があります。

l7-application.png

また、アプリケーション層は DNS(Domain Name System) というプロトコルを使用してユーザが指定したアプリケーションの URL から IP アドレスを求めます。

通常、IP アドレスには規則があるとは言え、IPv4 アドレスは、2322^{32} 4 オクテット、IPv6 アドレスは、21282^{128} 16 オクテットの数値で構成されるため、これらをサービス毎に覚えておくのは大変です。 さらに、IP アドレスは場合によって更新される可能性もあります。 そのため、DNS を用いて、IP アドレスに分かりやすい名前(ドメイン)を付与することで、サービスへのアクセシビリティを向上させる目的があります。

ドメイン名(FQDN:Fully Qualified Domain Name)から IP アドレスを求めることを 名前解決 と呼び、DNS は現在最もよく利用されている名前解決の方法です。 DNS は レジストリレジストラ と呼ばれる世界的にドメインと IP アドレスを管理している組織によって運用されています。 例えば、ホームページを公開する際は、ドメイン名とアプリケーションを公開するための IP アドレス(グローバル IP アドレス)を取得してレコードを登録する手続きが必要になります。

レジストリ(Registry)

  • 特定のトップレベルドメイン(TLD:Top Level Domain)におけるすべてのドメイン名を登録し、それに関するデータベースを管理する組織
  • 例:VeriSign →「.com」「.net」, PIR(Public Interest Registry)→「.org」, JPRS(JaPan Registry Services)→「.jp」

レジストラ(Registrar)

  • 最終ユーザ(個人, 企業, 組織)にドメイン名を販売・登録する役割を持つ企業
  • 例:GoDaddy, Namecheap, お名前.com, Amazon Route53, GCP Cloud DNS

名前解決の仕組み

  • 再帰問い合わせ(Recursive Query)
    • クライアント(例えばウェブブラウザ)がローカル DNS サーバに対して問い合わせる方法
    • 最終的な IP アドレスを取得するまでローカル DNS サーバがすべての問い合わせを代行する
    • ローカル DNS サーバは、クライアントから受けた再帰的な要求に応じて、他の DNS サーバに回帰問い合わせを行う
  • 非再帰問い合わせ(Non-Recursive Query)
    • クライアントが DNS サーバに対して行う、キャッシュに存在する情報のみを用いた問い合わせ方法
    • クライアントが DNS サーバに問い合わせを行い、サーバにキャッシュが存在する場合、そのドメイン情報を返す
    • DNS サーバがキャッシュにない場合、他のサーバには問い合わせを行わず、「情報がない旨」を応答する
  • 回帰問い合わせ(Iterative Query)
    • 段階的に他の DNS サーバに問い合わせる方法
    • ローカル DNS サーバは、まずルート DNS サーバに問い合わせをした後、次に TLD(Top-Level Domain)DNS サーバ、その次に、SLD(Second-Level Domain)DNS サーバと辿り、最終的に目的のドメインを管理する権威 DNS サーバに到達する
  • 権威 DNS サーバ(Authoritative DNS Server)
    • そのドメイン名に関する公式で信頼性の高い情報を保持しているサーバで、最終的な IP アドレスを提供する
    • 例えば、ローカル DNS サーバが www.google.com の IP アドレスを確認する際、権威 DNS サーバから直接その情報を取得する
    • これにより、クライアントに正確な IP アドレスを提供することができる

dns.png

名前解決の度に、毎回ルートドメインから問い合わせていると、実際のサービスに到達するのに時間が掛かる上、DNS サーバの負荷にも繋がります。 そこで、DNS サーバや DNS リゾルバ(アプリケーションを利用するユーザやホスト名を指定すると、自動的に DNS に対応する IP アドレスを問い合わせること)は、問い合わせた情報をしばらくの間キャッシュに保存します。 どのくらいの期間キャッシュに保存するかは設定次第ですが、過去の問い合わせ結果のキャッシュが残っていれば、ルートから辿らずに名前解決が出来ます。

例えば、https://www.google.com/ というドメインをブラウザに入力すると、Google の Web ページが表示されます。

この時、google.com というドメインを使用してアクセスしていますが、実際は DNS が解決した IP アドレスを以て、Web サイトにアクセスしています。

dignslookup を使用すると、IP アドレスが確認できます。

  • google.com の IPv4 アドレス
$ dig google.com

; <<>> DiG 9.10.6 <<>> google.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 6094
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;google.com.			IN	A

;; ANSWER SECTION:
google.com.		60	IN	A	142.251.42.174 // IPv4 アドレス

;; Query time: 5 msec
;; SERVER: 2404:1a8:7f01:b::3#53(2404:1a8:7f01:b::3)
;; WHEN: Sun Jul 14 11:33:51 JST 2024
;; MSG SIZE  rcvd: 55
  • google.com の IPv6 アドレス
$ dig -t AAAA google.com

; <<>> DiG 9.10.6 <<>> -t AAAA google.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 6478
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;google.com.			IN	AAAA

;; ANSWER SECTION:
google.com.		116	IN	AAAA	2404:6800:4004:813::200e // IPv6 アドレス

;; Query time: 12 msec
;; SERVER: 2404:1a8:7f01:b::3#53(2404:1a8:7f01:b::3)
;; WHEN: Mon Jul 15 11:07:21 JST 2024
;; MSG SIZE  rcvd: 67

google.com というドメインが 142.251.42.174 という IPv4 アドレスに解決されたことが分かります。 実際に、この IP アドレスを先ほどと同じように、ブラウザに入力すると、同じく Google の Web ページが表示されることが分かると思います。

142.251.42.174 というアドレスを覚えておくのは大変ですが、google.com という人間に取って馴染み深いドメインを用いれば、Web サイトへのアクセシビリティが向上します。

L4:トランスポート層

我々はパソコンやスマートフォンでネットワークを介した複数のアプリケーションを使っていますが、その裏ではトランスポート層が必要不可欠です。 アプリケーションは実際に、Web サービスをはじめとするユーザサイドのデータを扱いますが、トランスポート層は言うならば、ホストの上で動作する個々のアプリケーションを識別し、適切な制御を行う 役割を担います。 後述する下位層からトランスポート層まで正しく機能すると、送信元と宛先のアプリケーション間でデータの送受信ができるようになります。

l4-transport.png

トランスポート層を代表する主なプロトコルは TCPUDP です。 普段利用しているサービスの大半は、これらのプロトコルのうちいずれかを使用しています。

  • TCP(Transmission Control Protocol)
    • ギャランディ(guarantee)型プロトコル
    • 送受信中にデータ損失が発生した場合、即座に検知してデータの再送や再リクエストによって確実にデータを送り届ける
    • TCP は送信中にデータが破損した場合でも、これらを検出してデータの再送を行い確実な通信を行う
    • Web サービスやメールサービス等、現在のインターネットで実行される通信の殆どは TCP を利用する(TCP/IP とされる所以)
  • UDP(User Datagram Protocol)
    • ベストエフォート(best-effort)型プロトコル
    • TCP のような正確さは無いものの、大容量なデータを高速に送信することが可能
    • Web 会議やストリーミングサイト等、映像や音声データを含むサービスで利用される
      • リアルタイム性を重要視する一方で、多少の映像の乱れや、通信の遮断は対して問題にならない場面
    • リモートワークが普及したことで、近年急激に UDP への注目度が高くなっている(VPN, HTTP/3, QUIC, etc...)

トランスポート層のプロトコルは、正確な『TCP』と軽快な『UDP』 と言われています。

L3:ネットワーク層

ネットワーク層は アプリケーションデータを適切な相手(ホスト端末)に送り届けるための論理的な情報を提供する 役割を担います。 ネットワーク層は、前で説明した IP(Internet Protocol)を使用して、データをパケットと呼ばれる小さな単位に分割し、ルータを経由して相手端末に送り届けます。 データを適切なルータを選択しながら、相手に送り届けることは ルーティング と呼ばれます。

ルーティングは、IP アドレスに基づいて行われます。 しかし、IP アドレスは相手を識別してデータを送り届けるのみで、IP 自体が保持するデータの正確性・信頼性(パケットが欠落していないか)については保証されていません。 そのため、ネットワーク層および IP は、上位層である、トランスポート層(TCP/UDP)によって制御されます。

l3-network.png

L2:データリンク層

L7 ~ L3 のレイヤでは、アプリケーションデータの管理・制御および IP アドレスによるホスト端末の識別機能を実現してきました。 しかし、それだけでは、まだホスト端末にデータが届きません。 例えば、同一 LAN 内で複数の端末が接続されている場合、どの端末がその IP アドレスを保持しているのかを知る必要があります。 データリンク層は、IP アドレスをもとに、最終的に端末を一意に特定する 役割を担います。

ホストが持つネットワークインターフェース(NIC:Network Interface Card)を特定するためには、MAC(Media Access Control)アドレス という端末が持つインターフェース固有の識別子が必要です。 データリンク層のプロトコルである ARP(Address Resolution Protocol) は、LAN において、IP アドレスから MAC アドレスを解決する機能を提供します。 IP アドレスから MAC アドレスを検索・取得することは、アドレス解決 と呼ばれます。 ARP によって、ホスト端末の MAC アドレスが解決されて、初めて IP パケットはその端末に到達することができます。

ARP がアドレス解決を行える範囲は ブロードキャストドメイン と呼ばれます。 ブロードキャストドメインは、多くの場合、ネットワークスイッチ(L2 スイッチハブ)の範囲で行われます。

例えば、家庭内や学内の一部の区画等、通信に際してルータを跨ぐ必要がない場合は、L2 スイッチでの スイッチング によってデータを相手端末に送り届けます。 これは、IP アドレスを使用せずとも、ブロードキャストドメイン内で相手端末の MAC アドレスを特定することができるためです。

l2-datalink.png

  • macOS / Linux におけるインターフェース MAC アドレスの確認方法
$ ifconfig
// (一部省略)
en9: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
	options=404<VLAN_MTU,CHANNEL_IO>
	ether 1c:c0:35:03:fd:b5                                                     # MAC アドレス
	inet6 fe80::811:97d:a0c9:da87%en9 prefixlen 64 secured scopeid 0xd          # IPv6 アドレス(リンクローカルユニキャストアドレス)
	inet6 240b:10:3560:5100:14a0:9004:5894:767b prefixlen 64 autoconf secured   # IPv6 アドレス(グローバルユニキャストアドレス)
	inet6 240b:10:3560:5100:658c:94fa:73ee:debc prefixlen 64 autoconf temporary # IPv6 アドレス(グローバルユニキャストアドレス)
	inet 192.168.68.100 netmask 0xffffff00 broadcast 192.168.68.255             # IPv4 アドレス(プライベートアドレス)
	nd6 options=201<PERFORMNUD,DAD>
	media: autoselect (1000baseT <full-duplex>)
	status: active

L1:物理層

物理層は、上位層の全てのデータを「0」と「1」のビット列および信号データに変換する 役割を担います。

OS(カーネル)によって処理されたアプリケーションデータ、は NIC を介して有線ケーブル(IEEE 802.3 系)あるいは Wi-Fi(IEEE 802.11 系)といった規格に則って伝送を開始します。 物理層は上位層のデータに対して 誤り訂正符号(ECC:Error-Correcting Code) 等の制御情報を付加した上で、ケーブルや電磁波等の伝送媒体上で電気信号や光信号の形でデータを送受信するための方法や手順を管理します。

l1-physical.png

データ処理方式

PDU(Protocol Data Unit)

TCP/IP スイートでは、レイヤ毎に PDU(Protocol Data Unit) と呼ばれるデータ名称が存在します。

pdu.png

中でも、"パケット" というワードは、よく耳にすると思います。 実はこの "パケット" という名称は、TCP/IP 通信の中で、ネットワーク層(L3)で IP を用いる際に取り扱われるデータの名称です。

モバイル回線を契約すると、毎月 "パケット代" というのが請求されてきます。 これは、モバイルネットワークを通じて送受信されるデータ量に基づいて課金される料金を指します。 ネットワークを跨いだルーティングを行う際に、データは「パケット」と呼ばれる小さなデータ単位(通常は 1500 byte)に分割されて送受信されます。 そのため、ネットワーク通信に伴い、パケットをどれだけ転送したのか、という通信量の指標として、各パケットのやり取りが計上されるわけです。

このように、TCP/IP ではレイヤ毎に呼び方の違いがあることで、ネットワーク通信を考える際にどの階層に注目しているのかが明確になります。

カプセル化とデカプセル化

TCP/IP に基づいてデータを処理する際は、カプセル化とデカプセル化と呼ばれる手続きが行われます。

カプセル化とは、データに対して、プロトコルヘッダを付与して PDU を組み立てることです。 また、デカプセル化とは、その逆で、プロトコルヘッダが付与された PDU からデータを取得することです。

encapsulation-decapsulation.png

Web サービスにおいて HTTP を使用した通信を考えます。

送信側(カプセル化)

  • ① アプリケーション層では、ユーザランドで処理されたアプリケーションデータに対して、HTTP ヘッダを付加して、メッセージ を PDU として組み立てます。
  • ② 次に、アプリケーションが使用するポート番号を識別するために、メッセージ に対してトランスポートヘッダを付加し、データグラム を PDU として組み立てます。
  • ③ 次に、データグラム に対して IP アドレス情報を追加するために、IP ヘッダを付与し、パケット を PDU として組み立てます。
  • ④ 次に、パケットに対して端末固有の識別子である MAC アドレスを追加します。 また、ビット列に変換する前に、受信側の NIC がフレームで送信エラーが発生したかどうかを判断するための手段を提供する FCS(Frame Check Sequence)と呼ばれるトレーラを付加して、フレーム を PDU として組み立てます。
  • ⑤ 最後に、上位層で構築されたフレームをビット列に変換して送信します。

受信側(デカプセル化)

  • ① L2 スイッチ または L3 スイッチ(ルータ)は、フレームの内容を確認して、適切な端末に転送します。
  • ② 端末は L2 スイッチから受信したビット列をバイト列に変換し、フレームから IP パケットを取り出します。
  • ③ 次に、IP パケットからトランスポートヘッダを取り出して、ポート番号を確認します。
  • ④ 次に、所定のポート番号をリッスンしているプロセスを見つけて、メッセージを受け渡します。
  • ⑤ 最後に、アプリケーションサービスは、HTTP ヘッダを取り除いて、ユーザデータを取得・処理します。

以上のように、送信側では、前の PDU に対してヘッダを付加していき、受信端末側では、PDU 付加した順序とは逆の手順でデータを取得します。 PDU を用いて、カプセル化とデカプセル化の処理をカーネルおよびアプリケーションが処理することで、TCP/IP に則ったコンピュータネットワーク通信が成立します。

まとめ

本記事では、インターネットとはそもそも何なのか、どういう仕組みで成り立っているのかということについて紹介をしました。 また、インターネットの背景にある技術について触れ、コンピュータネットワークにおけるデータの処理方式について取り上げました。

インターネットの通信の仕組みを理解するためには、TCP/IP の基本的な概念を押さえることが不可欠です。 IP、TCP、UDP 等の基本的なプロトコルは、我々が日常的に使うインターネットサービスを支える重要な技術です。

今回紹介したネットワーク技術は、基礎中の基礎中の基礎 に当たります。 最初は理解するのが大変な上、ネットワークは特に取り掛かりにくい分野だと思いますが、インフラエンジニアやネットワークエンジニアはもちろん、アプリケーションを開発する全てのエンジニアは理解しておくべき内容だと思います。

また機会があれば、ネットワークを支える技術について紹介したいと思います。

【おまけ】実際のインターネットトラフィックを覗いてみる

参考:JANOG54 - 新人のためのインターネット & ネットワーク超入門 2024

  • ISP 平常時のトラフィック(CNCi) cnci-ordinary.png
  • モバイル MVNO 平常時のトラフィック(BIGLOBE) mvno-ordinary.png
  • 2022 年 ABEMA による FIFA サーカーワールドカップ配信期間における IX のトラフィック(JPNAP) abema-worldcup.png
  • 2022 年 ロシア - ウクライナ侵攻時のトラフィック(Cloudflare) invasion-ukraine.png
  • 2014 年 楽天 EC サイトのセールイベント時のコンテンツ事業者のトラフィック rakuten-ec.png
  • 2020 年 Epic Games フォートナイトのアップグレードファイル配信時における ISP のトラフィック(CNCi) fortnite-upgrade.png
  • 2020 年 4 月 コロナ禍 緊急事態宣言時における ISP のトラフィック(CNCi) covid-2019.png
  • 2013 年 スパム対策組織「Spamhaus」をターゲットにした大規模な DDoS 攻撃が発生した時のトラフィック ddos.png

参考・引用