TCP/IP
お疲れ様です。インフラ系であってもアプリ開発であってもインターネットのネットワークについての基礎知識は必要であります。
最低限知っておきたいインターネットのネットワーク知識を説明したいと思います。
インターネットの通信にはTCP/IPプロトコルが利用されます。IP アドレスと呼ばれるものを利用し、接続します。
IP アドレスには LAN などで使う ローカルアドレス、世界中で使うグローバルアドレスに分けられます。
ローカルアドレスは会社や家庭内におけるプライベートなアドレスであり、プライベートな空間であれば重複しても問題ありません。しかし、グローバルアドレスは
世界にたった1つであり 重複は許されません。これからTCP/IPの基礎 学習していきましょう。
ローカルエリアネットワークの中ではいわゆるLANと言いますが家庭内のスマートフォンやパソコンなど使ってると思います。
会社では プリンターや 複数のパソコン ネットワーク機器が繋がっていると思います。これらのネットワーク機器やPC は物理的なネットワークケーブルで
つながれていたり wi-fi で接続されていたりします。これらは後で説明する 同じネットワークセグメントに属する必要があります。
また他の家や他の会社など別のネットワーク と通信をするために使われている機器がルーターと言います。ルーターは自分が担当しているネットワーク宛の通信であれば
通信相手の物理アドレス(MACアドレス))を調べて パケットを転送し、自分が担当していないネットワークであれば別のルーターにパケットを転送します。
自分が担当していないネットワークについては 物理アドレスを把握してる必要はありません。TCP/IPは大きく分けて4つの層に分かれています。
最下層の部分は物理的な部分を相当するリンク層です。
この層はハードウェアの制御やどのような電気信号をどう送るかということを取り決めています。
次の層がインターネット層です。TCP/IPのIP の部分がこのプロトコルの層で IP を通じて ローカルネットワークを超えた通信が実現されます。
インターネット層は、ネットワーク層と呼ばれることもあります。
その上に位置するのがトランスポート層です。TCPはこの層のプロトコルであり IP によって送られてくるデータの確認やデータの整合性の検証などを
行います。
そして一番最上位に来るのが アプリケーション層 です。具体的なサービスや 例えば Web やメールなどが実現されるのはこの層で、
Web で使われているHTTPはアプリケーション層のプロトコルです。
リンク層ではハードウェアに割り当てられたMACアドレスを使って通信相手を特定します。
インターネット層では IP アドレスを使います。PC やスマートフォンなど インターネットに接続している機器には Mac アドレスと IP アドレスが割り振られています。
現在インターネットで使用されている IP アドレスは IPv4 とIPv6の2種類で、IPv4 はアドレスを 32 bit で 、IPv6は128ビットで表現します。
ここら辺に関しては後で説明します。
Mac アドレスは 物理アドレス、IP アドレスは 論理アドレスと呼ばれることがあります。
アドレスが2段階になっているので 通信相手がハードウェアを交換しても同じ IP アドレスをつけていれば 今までと変わりなく通信できます。
トランスポート層は IP アドレスで通信相手のホストを指定しさらに 相手ホストのどのサービスに接続するかを ポート番号で指定します。
これにより 1台のサーバーで複数のサービスを提供できることになります。
![]() |
上記の図のように、複数のプロトコルが 階層的に積み重なって機能することをプロトコルスタックと言います。TCP/IP のプロトコルスタックはリンク層
インターネット層 トランスポート層 アプリケーション層という4つのレイヤーで成り立っています。OSI 参照モデル が定義する7つの層は概念的なプロトコル
群ということになります。 |
ネットワーク上を流れるデータについて
ネットワーク回線に流れるのは 0と1のデジタルデータで1ビットずつ送られています。通信速度を表現する bpsは、1秒間に何ビットのデータを送れるかを表現しています。
ネットワーク通信ではデータをパケットという単位に分割して送受信します。
データをパケットに小分けにすることで 回線利用効率を上げデータが破損した際に送り直します これは TCP の役割となります。
パケットについて
ネットワークにおける通信は 例えば Web サーバーと Web ブラウザ など アプリケーション層のやり取りは基本的に同じ階層同士で行われます。
実際の物理的な電気信号のやり取りは最下層のリンク層で行われます。データは上位の層から下位の層へ移るごとにヘッダーが追加されます。
ヘッダーの追加は 各層で行われており 低レベル 層での通信のために ヘッダーが追加されていくことを カプセル化と言います。
逆に ヘッダーを取り除く過程を非カプセル化と呼びます。
TCP/IPにおけるパケットのサイズは、ネットワーク環境やプロトコルの設定によって異なるが、通常は次のような仕様がある。
IPパケットの最大サイズ
① IPv4 最大サイズは65,535バイト(ヘッダーを含む)。
② IPv6 最大サイズは65,575バイト(ヘッダーを含む)。
MTU (Maximum Transmission Unit)
MTUとは、一度に送信可能な最大データサイズのことです。
① 一般的には1,500バイト(イーサネットの標準MTU)が使用される。
② MTUを超えるデータは「フラグメンテーション」と呼ばれる分割処理が行われる。
TCPセグメントのサイズ
・TCPセグメントは、IPパケット内に収められる。
・通常はTCPヘッダー(20バイト)とデータ部分を含めたサイズがMTU以下になるよう調整される。
・例えば、1,500バイトのMTUの場合、IPヘッダー(20バイト)とTCPヘッダー(20バイト)を除いたデータの最大サイズは1,460バイトになる。
MTU(最大転送単位)は基本的にはネットワーク環境やデバイス設定に依存して決まるが、多くのケースで「自動的」に適切なサイズが設定される。
具体的な仕組み
・デフォルト設定 多くのデバイスやネットワーク機器は、標準のMTUサイズ(例えばイーサネットの場合は1,500バイト)を採用している。
・パスMTUディスカバリー (PMTUD) ネットワーク上のルートにおける最適なMTUサイズを検出するプロセス。
これにより、フラグメンテーションを回避し効率的なデータ転送が可能になる。
MTUは、手動で調整することも可能
リンク層
ネットワークデバイス と Mac アドレスについて
ネットワークデバイスは、コンピューター通信のデータの送受信や 転送を行うための機器です。一般的にはNIC、いわゆる ネットワークインターフェースカードです。
その他 wi-fi があります。前述したデータ通信の仕組みを7つの階層に分けて理解します。OSI 参照モデル ってやつです。
イーサネットと wi-fi
会社のネットワークや家庭内のネットワークなど 限定された範囲で使用されるネットワークを LAN と言いまして、いわゆる ローカルエリアネットワークと言います。
LAN構築する際の代表的な通信規格が イーサネットと wi-fi です。
![]() |
イーサネットはネットワークケーブルを介して通信を行う規格で速度とケーブルの種類で呼ばれます。
昔の10BASE-Tは、10Mbps のツイストペアケーブルという種類のケーブルが使用されており その後 100BASE-Tや1000BASE-TXが
普及されるようになりました。ツイストペアケーブルには カテゴリー 5、6、7 などの種類があり 混在させて使えますが それぞれ 対応する最高速度や
推奨される最大長 などが異なります。最近では ギガビットイーサネットとか 10ギガビットイーサーネットが主流となっています。
イーサネットの規格名にはIEEE(アイトリプルイー)という標準化団体による名称が使われています。
すでにほとんど使われなくなった10BASE-Tは802.3i、1000BASE-Tは802.3abとなります。
wi-fiは無線でデータ通信を行う規格で11Mbpsの802.11b、最大54Mbpsの802.11aや802.11bなどがあります。最近のイーサネット規格では、
100GBASE-T(100ギガビット/秒)が非常に高速なデータ転送速度を提供します。
MACアドレスは、リンク層のアドレス
リンク層では、Mac アドレスを使って通信相手を特定します。
Mac アドレスはハードウェア アドレスや 物理アドレスとも呼ばれており ネットワークに接続されている機器は全て Mac アドレスがつけられています。
Mac アドレスはユニークなアドレスで世界で1つだけしか存在しません。この辺はしっかり 管理されています。ハードウェアベンダーが管理しています。
Mac アドレスは48ビットで表されています。2桁の16進数×6で表現されます。
![]() |
2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
link/ether 52:54:00:39:06:7e brd ff:ff:ff:ff:ff:ff ※赤の部分がMACアドレスです。(MACアドレスは、仮で作成しましたので悪しからず)
IP アドレスはネットワーク層のアドレス
Mac アドレスがリンク層のアドレスであるのに対して IP アドレスは、インターネット層で使用されるアドレスです。
Mac アドレスと IP アドレスは 物理アドレスと 論理アドレスという違いがあるだけでなく 適用範囲が違います。
IP アドレスはインターネット 全体で通信相手を特定するのに使われるのに対し Mac アドレスは自宅の中や 会社内 など デバイス同士が
直接やり取りする 限られた範囲内の通信相手を特定するのに使います。
MACアドレスを解決する ARP と NDP
TCP/IP通信では通常通信相手を指定する際に IP アドレスを使用します。
実際には 電気信号を届けるには リンク層のアドレスであるMACアドレスが必要になります。IP アドレスに対応する MAC アドレスを
見つけることをアドレス解決といい ipv 4ではARP(アープ)というプロトコルが使われています。
ipv 6ではNDP を使用します。
ARP は 一斉送信でアドレスを尋ねる 仕組みです。
通信を行いたい機器はローカルネットワーク全体に向けて、この IP アドレスの所有者はどなたですか?というような問い合わせをします。
これを ARP要求パケットと言います。実際には ネットワーク全体へ ブロードキャストします。
ブロードキャストを受け取った機器はその IP アドレスが自分ではなければ無視をします。自分の IP アドレスの場合は IP アドレスと
MAC アドレスをセットにして送信元に返します。これを ARP 応答パケットと言います。IP テーブル と MAC アドレスの対応は
ARP テーブルとして メモリ内に一時的に保存され 一定時間が経過すると破棄されるのが一般的となります。
![]() |
※MACアドレスは、ダミーで作成してします。
パケットの呼び方について
イーサネットにおけるデータの単位はイーサネットフレーム と呼ばれます。
今まで何度か出ている通りネットワーク通信ではパケットという単位でやり取りを行いますが
データリンク層ではこの単位がフレーム と呼ばれます。
また上の層になると複数のパケットがまとまって 特定の意味や機能を持つデータの単位として扱われることが増えてきます。
例えば トランスポート層 ではその単位を セグメントと呼び アプリケーション層 では メッセージと呼ばれます。
このほか データグラムという単位が使われることもあり データグラム は配送が成功したかどうかや 到達の順序など
保障されていない場合に使われることが多い呼び方で IP や UDP のパケットが該当します。
イーサネットのフレームの構造
イーサネットフレームはフレームの始まりを示す 64 bit の制御信号(プリアンブル)と末尾にあるエラーチェック用の
32ビットのブロック(FCS)があります。
プリアンブルとFCSの説明を少々してみましょう。
プリアンブル (Preamble)
役割
① プリアンブルはイーサネットフレームの先頭に配置される部分で、通信の同期を確立するために使われます。
② 送信側と受信側のタイミングを合わせるための特定のビットパターンを提供します。
構成
① プリアンブルは通常7バイト(56ビット)で、10101010のビットパターンが繰り返されています。
② プリアンブルの後にはSFD (Start Frame Delimiter) が続きます。この1バイト(8ビット)は10101011で構成され、
フレームの開始を示します。
役割の重要性
① プリアンブルがあることで、受信側がフレームの開始位置を正確に認識でき、データ通信が安定します。
FCS (Frame Check Sequence)
役割
① FCSはフレームの末尾に配置されるエラー検出の仕組みで、データ通信が正確に行われたかどうかを確認します。
② FCSは送信側で生成され、受信側で検証されます。
構成
① FCSは通常4バイト(32ビット)です。
② FCSの中にはCRC(Cyclic Redundancy Check)アルゴリズムによって計算された値が含まれています。
動作の流れ
① 送信側: 送信するフレームのデータ部分をもとにCRCを計算し、FCSフィールドにその値を追加します。
② 受信側: 受信したデータをCRCで再計算し、FCSに含まれている値と一致するか確認します。
③ 結果:- 一致: フレームにエラーがないと判断。
④ 不一致: フレームが破損している可能性があるため破棄される。
まとめ
① プリアンブル: フレーム開始前にタイミングを同期するためのビットパターン。
② FCS: フレームのエラーを検出するための最後のチェック機構。
![]() |
データ部分は ペイロードと呼ばれていて ネットワーク通信ではヘッダーなどの情報を取り除いた 正味の データ部分です。
イーサネットのペイロードは最大1500バイトになってます。ARP のパケットの場合 ペイロード 部分に ARP メッセージが入るのに対し、
pingのパケットでは IP ヘッダーとペイロードが入り TCP のパケットの場合は さらに TCP ヘッダーが入ることになります。
リンク層での伝送にはこれらの情報は 使用されません。イーサネット ヘッダーの情報に基づいて Mac アドレスのみを参照して送信されます。
イーサネットのフレームは基本的にリンク層で接続されている全てのデバイスに転送され 各デバイスは 自分宛のものだけを受け取ります。
接続されている機器が多いと コリジョンが発生しやすくなり効率が悪くなるので、このような場合 スイッチングハブを使うのが一般的です。
スイッチングハブは Mac アドレスを参照して 適切なポートにのみ パケットを流すので一般的にはスイッチングハブを使いますね。
インターネット層
ネットワーク と IP アドレス
これから 説明するインターネット層はネットワークを超えて違うセグメントと通信できるようになります。
IPv4 と IPv6が、ありますが IPv4に着目して説明いたします。IPv6は徐々に使われ始めていますが一般的にはまだすごく
普及しているわけではないです。
IP アドレスはネットワークアドレスとホストアドレスで構成されています。
Macアドレスはローカルネットワークの中で同じネットワークに属する機器同士の通信に使われています。
しかし 全て同じネットワークというわけではないのでネットワークにおいて同じネットワークかどうかの識別に
IP アドレスが使われます。
IP アドレスは前述したように ネットワークアドレスとホストアドレスに分かれています。
ネットワークアドレスが同じであるグループ内では直接やり取りができます。
しかし ネットワークアドレス(ネットワークセグメント)が、違う相手と通信をする際にはルーターと言ったり、ゲートウェイと
呼ばれる装置が必要になります。この辺に関しては後で説明しますね。
家庭内のような 狭い範囲で使用し機器も少ないネットワークの場合、全体で一つの ネットワークとして運用するのが一般的です。
しかし 大きな会社などでローカルエリア内に多くの機器があったり 複数の部門に分かれて業務を行う場合は ローカルネットワークを
いくつかに分割して管理することは必要です。このように分割されたネットワークのことをサブネットと呼びます。
大きなネットワークを複数の小さなネットワークに分割するサブネット化によってネットワーク内のパケットを減らしたり
機器を管理しやすくする効果があるということになります。
ルーティングテーブルの利用
違うセグメントのネットワーク同士で異なるネットワークに属する機器とやり取りを行うには ルーティングテーブルが必要になります。
ルーティングテーブルとは 経路の情報をまとめたものです。
ルーティングテーブルにないセグメントに対する通信には 全て デフォルトゲートウェイという決められた機器に転送することになります。
いわゆる ルーターってやつですね。
自分の所属する ネットワークで解決できなかったものは全てルーター(デフォルトゲートウェイ)に送って解決します。
通常 会社内のネットワークに属さない IP アドレスの場合はほとんど このデフォルトゲートウェイに転送され 外部のインターネットに
接続するということになるかと思います。
※ローカルエリアネットワークの外の場合はまだ 説明してありませんが DNS(名前解決)など必要になってきます。
この辺りはまた後で説明させてください。
インターネットで使われるグローバルアドレスはローカルエリアネットワークのアドレスとは 違います。
ローカルで使う IP アドレスに関しては、はっきり言って 何でも良いということですが グローバル IP アドレスは100% 世界に
一つしかない IP アドレスでないといけません。
この辺は日本では jpニック(JPNIC)という団体が管理しています。
なので 個人的に IP アドレスを取るときは JPNICに加盟している、団体のプロバイダーからアドレスを取得しなければなりません。
この辺は話がそれるので このくらいにしておきましょう。
IPv4
IPv4はインターネットの初期から使われていますが 今もメインで使われています。
IPv6もあるけれども まだ完全に普及しているとは言えない状況です。IPv4の弱みとしては32ビットの長さで表現するので
これだけインターネット デバイスが普及してる中で IP アドレスの不足が懸念されています。そこでIPv6があるんですが
まだ 普及しているとは言えない状況です。ここでは IPv4 のお話をしていきます。
IPv4は32ビットの値を8ビットずつ4つの数値で区切ります。(合計32ビット)
二進数 11000000.10101000.00000000.00000001
十進数 192.168.0.1
PC などのネットワーク設定では10進数を使うことが多いですね。
![]() |
サブネットマスクでネットワーク部とホスト部に分ける(サブネット分割)
IPv4には サブネットマスクというものがあって 先頭から何ビット目までがネットワークアドレスなのかを示します。
ネットワークアドレス部とホスト部に分かれています。
例えば 先頭から 24ビットがネットワークアドレスなら、残りの8ビットがホスト部 となり、8ビットの最大値 255となります。
192.168.0.1/24のようなCIDR表記もあります。この書き方は/24の部分が、ネットワーク部を表しています。32ビットのうち、
先頭の24ビットがネットワークアドレスということです。
サブネット分割時の AND演算 は、IPアドレス と サブネットマスク をビット単位でAND演算し、ネットワークアドレスを
求めるために使用されます。
AND演算の仕組み
AND演算は、各ビットを比較し、両方が「1」の場合にのみ「1」を出力する論理演算となります。
1 AND 1 = 1
1 AND 0 = 0
0 AND 1 = 0
0 AND 0 = 0
例えば: 192.168.1.10/24 のネットワークアドレス
① IPアドレス(192.168.1.10)を2進数に変換
192 → 11000000
168 → 10101000
1 → 00000001
10 → 00001010
なので、
192.168.1.10 = 11000000.10101000.00000001.00001010
② サブネットマスク(/24 = 255.255.255.0)を2進数に変換
255 → 11111111
255 → 11111111
255 → 11111111
0 → 00000000
なので、
255.255.255.0 = 11111111.11111111.11111111.00000000
③ IPアドレスとサブネットマスクをAND演算
11000000.10101000.00000001.00001010 (192.168.1.10)
AND
11111111.11111111.11111111.00000000 (255.255.255.0)
--------------------------------------------------
11000000.10101000.00000001.00000000 (192.168.1.0)
結果: ネットワークアドレス
AND演算の結果、ネットワークアドレスは 192.168.1.0 になります。
サブネット分割時のポイント
- サブネットマスクの変更 によって、ネットワークアドレスの範囲を変更できる。
- 例えば、/25(255.255.255.128) を使えば、192.168.1.0 と 192.168.1.128 に分割できる。
- ホスト部分のビット数を変更 することで、サブネットのサイズを決定する。
192.168.0.1/24と192.168.0.1/25では、IPアドレスは、一緒だが、違うネットワークに属していると言える!
内部のネットワークなどでネットワークアドレスに制限がない場合やネットワークに接続する機器が少ない場合では
8ビット 刻みでの設定が読みやすくて理解しやすいと思います。
グローバルアドレスなど なるべく 節約しながら使いたい場合は 8ビット以下
192.168.0.1/24
192.168.0.1/28
とかにするのも良いです。ネットワーク部が28ビットということは、4ビットがホスト部 ということになり、
IP アドレスは 16個 使えるということです。
ただし IP アドレスの最初の一つと最後の1つは 機器に割り当てられないと思ってください。
最初の一つは ネットワークアドレス、最後の一つは ブロードキャストアドレスとして利用します。
なので上で16個 使えると言いましたが正確には 14個しか使えません。この辺をよく理解しといてください。
ローカルIPとして使用できるアドレス
IPv4のプライベートIPアドレスとして利用できるクラスAからクラスCの範囲となります。
プライベートIPアドレスはローカルネットワーク内で使用され、インターネットでは直接ルーティングされません。
プライベートIPアドレスの範囲
![]() |
トランスポート層